AGGIORNAMENTO CAMPI IN TABELLA DI COMODO

di il
9 risposte

AGGIORNAMENTO CAMPI IN TABELLA DI COMODO

Buongiorno,
un fornitore mi invia un file Excel con X campi.
Nel DB ho creato una tabella tblComodo in cui importare questi campi che poi vanno modificati.
Uno di questi campi è la Regione_Sociale che è di tipo testo.

Nel DB ho creato una tabella Anagrafica_Clienti composta da:
PIva
Regione_Sociale

Ho creato una query di aggiornamento e dovrebbe fare quanto segue:
confrontare il campo Regione_Sociale di ogni record della tblComodo con il campo Regione_Sociale della tabella Anagrafica_Clienti, se i due campi sono uguali sostituire la Regione_Sociale della tblComodo con il campo Piva della tabella Anagrafica_Clienti

Ovviamente non so come fare per farlo in una volta sola.

Unica cosa che mi viene in mente è fare n query di selezione per ogni Regione_Sociale di tblComodo e successivamente n query di Aggiornamento ma è tolto lo scopo del DB.

Potete aiutarmi?

9 Risposte

  • Re: AGGIORNAMENTO CAMPI IN TABELLA DI COMODO

    Leggi attentamente come si imposta ed esegue una "query di aggiornamento". Magari procedi così:
    1. Hai detto che hai già una query di selezione che ti confronta i 2 Ragione_Sociale (non Regione_Sociale...credo): Query1.
    2. Quindi crei una nuova query di aggiornamento (Query2) dove importi Query1 e gli dici che vuoi aggiornare in Anagrafica_Clienti

    Probabilmente puoi risolvere tutto con una query sola...ti ho fornito un suggerimento per più piccoli passi.
  • Re: AGGIORNAMENTO CAMPI IN TABELLA DI COMODO

    Lo fai da VBA ma se dici così probabilmente non sei molto pratico di vba ... sbaglio?

    PS: non serve a risolvere il problema del 3D ma ... non si chiama REGIONE_SOCIALE ma RAGIONE_SOCIALE
  • Re: AGGIORNAMENTO CAMPI IN TABELLA DI COMODO

    OsvaldoLaviosa ha scritto:


    Leggi attentamente come si imposta ed esegue una "query di aggiornamento". Magari procedi così:
    1. Hai detto che hai già una query di selezione che ti confronta i 2 Ragione_Sociale (non Regione_Sociale...credo): Query1.
    2. Quindi crei una nuova query di aggiornamento (Query2) dove importi Query1 e gli dici che vuoi aggiornare in Anagrafica_Clienti

    Probabilmente puoi risolvere tutto con una query sola...ti ho fornito un suggerimento per più piccoli passi.
    Grazie OsvaldoLaviosa per la tua risposta.
    Scusate per l'errore di italiano.
    Forse mi sono spiegato male io, la mia intenzione era fare tutto con una query ma non so come impostarla.
    Grazie per il suggerimento, mi guardo bene come fare una query di aggiornamento
  • Re: AGGIORNAMENTO CAMPI IN TABELLA DI COMODO

    muttley005 ha scritto:


    Lo fai da VBA ma se dici così probabilmente non sei molto pratico di vba ... sbaglio?

    PS: non serve a risolvere il problema del 3D ma ... non si chiama REGIONE_SOCIALE ma RAGIONE_SOCIALE
    Grazie muttley005 per la tua risposta.
    Non sono pratico di VBA anche se, per automatizzare penso sia fondamentale avere almeno un infarinatura.
    Oggi, nell'attesa di avere risposte sono andato a vedermi un po di VBA, perdonami se scrivo delle cavolate.
    Penso che per raggiungere il risultato mi serva
    ciclo Do Until Loop
    Spostamento tra record con move first, move next con controllo. EOF
    If
    Provo a mettere insieme quello che ho capito e lo posto così puoi valutarmelo e darmi magri qualche riscontro sia come correttezza che come regole di acrittura
  • Re: AGGIORNAMENTO CAMPI IN TABELLA DI COMODO

    muttley005 ha scritto:


    Lo fai da VBA ma se dici così probabilmente non sei molto pratico di vba ... sbaglio?

    PS: non serve a risolvere il problema del 3D ma ... non si chiama REGIONE_SOCIALE ma RAGIONE_SOCIALE
    Ci ho provato cercando e mettendo insieme tutto quello che ho trovato, sinceramente non l'ho provato, mi sono perso in mezzo al codice.

    Lo metto qui sotto, puoi darmi riscontro quando hai un attimo?
    Grazie mille

    Ps. I nomi delle tabelle che ho riportato nei messaggi precedenti non erano corrette perchè sto testando varie cose, perdonami.
    Private Sub 
    
    Dim DBCorrente As DAO.Database
    Dim A0000_Registro_Rifornimenti_Comodo As DAO.Recordset
    Dim A0020_Anagrafica_Soggetti As DAO.Recordset
    
    Set DBCorrente = CurrentDB
    Set rs1 = DBCorrente.OpenRecordset("A0000_Registro_Rifornimenti_Comodo", dbOpenTable)
    Set rs2 = DBCorrente.OpenRecordset("A0020_Anagrafica_Soggetti", dbOpenTable)
    Set rs3 = DBCorrente.OpenRecordset("A0020_Anagrafica_Soggetti", dbOpenTable)
    
    rs1.MoveFirst
    rs2.MoveFirst
    rs3.MoveFirst
    
    rs1.Fields("Socio")
    rs2.Fields("Ragione_Sociale")
    rs3.Fields("PIva_Cod_Fisc")
    
    
    Do While Not rs1.EOF And rs2.EOF
    	Do While rs1.EOF
    	If 
    		rs1.Fields("Socio") = rs2.Fields("Ragione_Sociale")
    	Then 
    		rs1.Edit
    		rs1.Fields("Socio") = rs3.Fields("PIva_Cod_Fisc")
    		rs1.Update
    		
    		rs1.MoveNext
    	Loop
    		
    	Else
    		rs2.MoveNext
    		rs3.MoveNext
    		Do While Not rs2.EOF
    			If
    				rs1.Fields("Socio") = rs2.Fields("Ragione_Sociale")
    			Then
    				rs1.Edit
    				rs1.Fields("Socio") = rs3.Fields("PIva_Cod_Fisc")
    				rs1.Update
    				
    				rs1.MoveNext
    				Exit Do
    			End If
    			Else
    		Loop
    	End If	
    Loop
    
    MsgBox "Tutti i dati sono stati aggiornati"
    
    rs1.Close
    rs2.Close
    rs3.Close
    
    Set rs1 = Nothing
    Set rs2 = Nothing
    Set rs3 = Nothing
    
    End Sub
  • Re: AGGIORNAMENTO CAMPI IN TABELLA DI COMODO

    Lasciamo stare per un attimo il codice che hai postato ... non mi è chiaro cosa devi fare, anche rileggendo il tuo primo post ...
    facciamo un esempio pratico
    In tabella ANAG hai PIVA, RAGIONE_SOCIALE, altro
    in tabella COMODO hai SOCIO (che è la RAGIONE_SOCIALE) ed altri campi
    devi prendere i record in cui ANAG.RAGIONE_SOCIALE = COMODO.SOCIO e ... ?!?
    mettere in COMODO.SOCIO la ANAG.PIVA ???
    io ho capito così ma non ne capisco il senso ...
    nel caso chiaramente basta una SQL di update che fai prima
  • Re: AGGIORNAMENTO CAMPI IN TABELLA DI COMODO

    muttley005 ha scritto:


    Lasciamo stare per un attimo il codice che hai postato ... non mi è chiaro cosa devi fare, anche rileggendo il tuo primo post ...
    facciamo un esempio pratico
    In tabella ANAG hai PIVA, RAGIONE_SOCIALE, altro
    in tabella COMODO hai SOCIO (che è la RAGIONE_SOCIALE) ed altri campi
    devi prendere i record in cui ANAG.RAGIONE_SOCIALE = COMODO.SOCIO e ... ?!?
    mettere in COMODO.SOCIO la ANAG.PIVA ???
    io ho capito così ma non ne capisco il senso ...
    nel caso chiaramente basta una SQL di update che fai prima
    Esatto, il senso è che la ragione sociale non posso usarla come PK

    SQL di update non so come farlo ne da dove partire.

    Puoi darmi qualche suggerimento
  • Re: AGGIORNAMENTO CAMPI IN TABELLA DI COMODO

    Continuo a non capire perchè aggiorni la tabella COMODO sovrascrivendo la RAGIONE SOCIALE con la P.IVA ...
    comunque l'SQL di update è alquanto semplice e sinceramente avresti tranquillamente potuto trovarlo da solo con una banale ricerca sul WEB tipo "SQL UPDATE CON JOIN MSACCESS"
    un codice generico è questo
    
    UPDATE DestTable INNER JOIN AnagTable ON DestTable.CampoJoinA = AnagTable.CampoJoinB
    SET DestTable.CampoDaUpdatare = AnagTable.CampoDaCuiUpdatare;
    
  • Re: AGGIORNAMENTO CAMPI IN TABELLA DI COMODO

    muttley005 ha scritto:


    Continuo a non capire perchè aggiorni la tabella COMODO sovrascrivendo la RAGIONE SOCIALE con la P.IVA ...
    comunque l'SQL di update è alquanto semplice e sinceramente avresti tranquillamente potuto trovarlo da solo con una banale ricerca sul WEB tipo "SQL UPDATE CON JOIN MSACCESS"
    un codice generico è questo
    
    UPDATE DestTable INNER JOIN AnagTable ON DestTable.CampoJoinA = AnagTable.CampoJoinB
    SET DestTable.CampoDaUpdatare = AnagTable.CampoDaCuiUpdatare;
    
    Grazie mille muttley005, hai ragione, ho riguardo il DB e ho capito che questo passaggio non ha senso.
    La cosa positiva per me è che ho imparato qualcosa di nuovo.
    Mi scuso per averti fatto perdere del tempo, questo DB serve a me al lavoro per risparmiare tempo che non ho e infatti ci lavoro solo la sera e il weekend.
    Mi rendo conto che cercando di fare il prima possibile e sbattendoci la testa quando sono cotto non porta a nessun risultato.
    Ricomincio da capo a fare la progettazione fatta come si deve e un passettino alla volta.
    Grazie mille e scusami ancora
Devi accedere o registrarti per scrivere nel forum
9 risposte