Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18

Query confronto tabelle

  1. #1
    simona.s non è in linea Novello
    Ciao a tutti e Auguri per un Super 2010. Problemino probabilmente molto facile per i super esperti di Access.

    Ho una tabella con questi campi
    UE
    Assegnatario
    Ubicazione
    Mq

    ed una copia della tabella sopra con gli stessi campi
    UE
    Assegnatario
    Ubicazione
    Mq

    e in piu'

    Data
    Assegnatario
    Questi ultimi li inserisco manualmente.

    I record della prima tabella potrebbero subire modifiche, aggiunte o cancellazioni.

    Come posso creare una query che mi confronti le tue tabelle aggiornandomi la seconda tabella (mantenendo i campi da me inseriti manualmente) segnalandomi con un flag i record modificati, aggiunti o cancellati?

    Scusate per la banalità ma proprio non riesco a venirne fuori. (ho provato con la creazione automatica della query di non corrispondenza ma......non funziona..

    Grazie a tutti e scusate il disturbo....

  2. #2
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Domanda fondamentale...!
    Perchè devi avere 2 Tabelle difformi per poi trovarti questi problemi...????

    Ti suggerisco vivamente di rivedere la tua logica, perchè come peraltro ti sei accorta, è decisamente poco produttiva...!

    In ogni caso l'autocomposizione delle Query di Access ti propone di realizzare una Query per la Ricerca delle Differenze... quindi se la la TabellaA alla Fine è quella valida, perchè più semplicemente non esegui una Query UPDATE dei Campi interessati alle Differenze(estratti dalla query in Autocomposizione)...???
    ℹ️ Leggi di più su @Alex ...

  3. #3
    simona.s non è in linea Novello
    Purtroppo la tabella A è una tabella collegata ad un file txt che si autoaggiorna e che io non posso variare.

    Ho creato una copia di questa tabella perchè devo aggiungere dei campi che inseriro' manualmente (vado quindi ad integrare la tabella A con altre informazioni - La tabella B è quindi formata da tutti i dati della tabella A piu' alcuni campi che inserisco manualmente).

    Essendoci pero' circa 20.000 record avrei bisogno che la mia tabella B si aggiornasse con i campi che variano nella tabella A (mantenendo comunque i dati da me inseriti manualmente) ma nello stesso tempo di vedere i record che hanno subito modifiche, aggiunte o cancellazioni.

  4. #4
    L'avatar di almorel
    almorel non è in linea Scribacchino
    Ciao Simona e buon anno.

    Secondo me devi scomporre il problema, (ovvero la soluzione del), in varie parti creando una procedura (macro o VBA):

    1) query di ricerca non corrispondenza tra tabella A e tabella B
    (record aggiunti a tabella A da aggiungere in tabella B)
    2) query di ricerca non corrispondenza tra tabella B e tabella A
    (record eliminati dalla tabella A da eliminare dalla tabella B)
    3) query di confronto tabelle
    (campo1A<>campo1B or campo2A<>campo2B or ecc. ecc.)

    per comodità, e successive operazioni ti potrebbe convenire scaricare queste query in tabelle di appoggio anche per fare, infine

    4) query di aggiornamento per riportare in tabella B le corrispondenti variazioni in tabella A (sulla base della query 3)

    Ovviamente il tutto presuppone la presenza di una chiave univoca nella tabella A.

    Questo, naturalmente a livello concettuale, poi c'è da fare l'implementazione.

    Se poi vuoi postare una demo dell'applicazione gli posso/possiamo
    dare un'occhiata.

    Ciao
    Alberto
    Ultima modifica di almorel; 04-01-2010 14:30 

  5. #5
    L'avatar di dragone bianco
    dragone bianco non è in linea Amanuense
    Ciao simona.s

    Il consiglio di almorel è ottimo
    io userei una macro VBA ma metterei 2 campi aggiuntivi nella tabella B
    Una che indica se il campo è stato Modificato,Aggiunto o eliminato
    (il campo eliminato a tutti gli effetti c'è ancora nella tabella ma è contrassegnato Eliminato) un campo alfanumerico dove puoi per esempio usare le lettere A=aggiunto B=Modifcato E=Eliminato

    il secondo campo serve per la procedura VBA
    Cioè per realizzare quello che ha scritto Amorel la struttura del codice deve essere eseguita così

    Azzerare tutti i contrassegni del "Campo per procedura" della tabellaB

    Lettura dell'intera tabellaA per ogni dato si esegue questi punti
    • Ricerca del dato nella tabellaB
    • Se si trova il dato: verificare se ci siano modifiche e contrassegnare nella tabella b Il campo Aggiuntivo
    • Se non si trova il dato: aggiungere il nuovo dato contrassegnare nella tabella b Il campo Aggiuntivo

    fine ciclo

    Legere tutta la tabellaB e tutti campi non contrassegnati sono campi da eliminare (da contrassegnare eliminati)

    Ciao
    ℹ️ Leggi di più su dragone bianco ...

  6. #6
    simona.s non è in linea Novello
    Grazie mille per i consigli...... dopo domani (visto che domani sarà la mia festa, scherzo) rientrero' in ufficio e provero' a mettere in pratica i Vostri consigli....In caso vi chiedero' un altro aiuto...

    Grazie mille ancora....

    Spero di esservi utile in qualcosa io in futuro....

    Simona

  7. #7
    L'avatar di dragone bianco
    dragone bianco non è in linea Amanuense
    in caso di problemi strutture simili in vba le ho già realizzate.
    Ho dato per scontato che possiedi un po' di infarinatura di VBA
    se ho frainteso si può eventualmente trovare una soluzione alternativa

    Quote Originariamente inviato da simona.s
    (visto che domani sarà la mia festa, scherzo)
    Non è la vostra festa, è 8 Marzo la vostra festa

    Ciao
    ℹ️ Leggi di più su dragone bianco ...

  8. #8
    simona.s non è in linea Novello
    Eccomi qui al rientro in ufficio.......

    Scusandomi nuovamente per il disturbo, posto una macro che mi hanno creato dove LOC_AIR è la tabella che non posso toccare.... In teoria dovrebbe funzionare.....ma NON sul mio catorcissimo computer perchè probabilmente va a leggere ogni campo di ogni record (20.000) e quindi impalla tutto....

    Non è che si puo' rendere piu' leggera?

    Come avrete notato sono autodidatta e come query, a parte quelle basilari,.....sono un po'...(tanto) scarsa...

    Grazie ancora a tutti

    Option Compare Database
    Function UpdateDB(tableOriginal As Variant, tableNew As Variant)
    Call AggiornaDB(tableOriginal, tableNew)
    End Function
    Sub AggiornaDB(tableOriginal As Variant, tableNew As Variant)
    
       Dim strProc As String
       Dim ubicazione As String
       Dim cmd As ADODB.Command
       Dim cmd2 As ADODB.Command
       Dim rst As ADODB.Recordset
       Dim rst2 As ADODB.Recordset
    
       Set cmd = New ADODB.Command
       Set cmd.ActiveConnection = CurrentProject.Connection
    
       strProc = "DELETE FROM " & tableOriginal
       cmd.CommandText = strProc
       cmd.Execute
       strProc = "INSERT INTO " & tableOriginal & " (UE, Edificio, Ubicazione, Descrizione, [N Locale], Assegnatario, [Descrizione cod sap], [Descrizione locale], [Tipo UL], Contratto, Mq, [Mq reali], M3 ) " & _
                 "SELECT LOC_AIR.Campo1 AS UE, LOC_AIR.Campo2 AS Edificio, LOC_AIR.Campo4 AS Ubicazione, Piani.Descrizione, LOC_AIR.Campo6 AS [N Locale], LOC_AIR.Campo7 AS Assegnatario, LOC_AIR.Campo9 AS [Descrizione cod sap], LOC_AIR.Campo10 AS [Descrizione locale], LOC_AIR.Campo11 AS [Tipo UL], LOC_AIR.Campo17 AS Contratto, LOC_AIR.Campo18 AS Mq, LOC_AIR.Campo19 AS [Mq reali], LOC_AIR.Campo20 AS M3 " & _
                 "FROM LOC_AIR LEFT JOIN Piani ON (LOC_AIR.Campo5=Piani.[Piani SAP]) AND (LOC_AIR.Campo1=Piani.Ue)"
       cmd.CommandText = strProc
       cmd.Execute
       strProc = "UPDATE " & tableNew & " SET Canc = FALSE, Nuovo = FALSE"
       cmd.CommandText = strProc
       cmd.Execute
       strProc = "ALTER TABLE " & tableOriginal & " ADD COLUMN Chiave TEXT(255)"
       cmd.CommandText = strProc
       cmd.Execute
       strProc = "ALTER TABLE " & tableNew & " ADD COLUMN Chiave TEXT(255)"
       cmd.CommandText = strProc
       cmd.Execute
       strProc = "UPDATE " & tableOriginal & " SET Chiave = UE & Edificio & Ubicazione & Descrizione & [N Locale] & Assegnatario & [Descrizione cod sap] & [Descrizione locale] & [Tipo UL] & Contratto & Mq & [Mq reali] & M3"
       cmd.CommandText = strProc
       cmd.Execute
       strProc = "UPDATE " & tableNew & " SET Chiave = UE & Edificio & Ubicazione & Descrizione & [N Locale] & Assegnatario & [Descrizione cod sap] & [Descrizione locale] & [Tipo UL] & Contratto & Mq & [Mq reali] & M3"
       cmd.CommandText = strProc
       cmd.Execute
    
       strProc = "select distinct Chiave from " & tableNew
       cmd.CommandText = strProc
       Set rst = New ADODB.Recordset
       rst.Open cmd
       Do Until rst.EOF
            strProc = "select distinct Chiave from " & tableOriginal & " where Chiave = """ & Replace(rst(0), """", """""") & """"
            cmd.CommandText = strProc
            Set rst2 = New ADODB.Recordset
            rst2.Open cmd
            If rst2.EOF And rst2.BOF Then
                strProc = "UPDATE " & tableNew & " SET Canc = TRUE where Chiave = """ & Replace(rst(0), """", """""") & """"
                Set cmd2 = New ADODB.Command
                Set cmd2.ActiveConnection = CurrentProject.Connection
                cmd2.CommandText = strProc
                cmd2.Execute
                Set cmd2 = Nothing
            End If
            rst2.Close
            Set rst2 = Nothing
          rst.MoveNext
       Loop
       rst.Close
       Set rst = Nothing
    
       strProc = "select Chiave, UE, Edificio, Ubicazione, Descrizione, [N Locale], Assegnatario, [Descrizione cod sap], [Descrizione locale], [Tipo UL], Contratto, Mq, [Mq reali], M3 from " & tableOriginal
       cmd.CommandText = strProc
       Set rst = New ADODB.Recordset
       rst.Open cmd
       Do Until rst.EOF
            strProc = "select distinct Chiave from " & tableNew & " where Chiave = """ & Replace(rst(0), """", """""") & """"
            cmd.CommandText = strProc
            Set rst2 = New ADODB.Recordset
            rst2.Open cmd
            If rst2.EOF And rst2.BOF Then
                If IsNull(rst(3)) Then
                    ubicazione = " "
                Else
                    ubicazione = rst(3)
                End If
                strProc = "INSERT INTO " & tableNew & " (UE, Edificio, Ubicazione, Descrizione, [N Locale], Assegnatario, [Descrizione cod sap], [Descrizione locale], [Tipo UL], Contratto, Mq, [Mq reali], M3, Nuovo ) " & _
                          "VALUES ( """ & rst(1) & """, """ & rst(2) & """, """ & Replace(ubicazione, """", """""") & """, """ & rst(4) & """, """ & rst(5) & """, """ & Replace(rst(6), """", """""") & """, """ & rst(7) & """, """ & rst(8) & """, """ & rst(9) & """, """ & rst(10) & """, """ & rst(11) & """, """ & rst(12) & """, """ & rst(12) & """, TRUE )"
                Set cmd2 = New ADODB.Command
                Set cmd2.ActiveConnection = CurrentProject.Connection
                cmd2.CommandText = strProc
                cmd2.Execute
                Set cmd2 = Nothing
            End If
            rst2.Close
            Set rst2 = Nothing
          rst.MoveNext
       Loop
       rst.Close
       Set rst = Nothing
    
       strProc = "ALTER TABLE " & tableOriginal & " DROP COLUMN Chiave"
       cmd.CommandText = strProc
       cmd.Execute
       strProc = "ALTER TABLE " & tableNew & " DROP COLUMN Chiave"
       cmd.CommandText = strProc
       cmd.Execute
    
    End Sub
    
    Ultima modifica di dragone bianco; 07-01-2010 13:44 

  9. #9
    L'avatar di dragone bianco
    dragone bianco non è in linea Amanuense
    Ciao

    Ho letto il codice, usano ADODB
    se le tabelle sono sullo stesso db usa il DAO
    trovi una guida in merito su masterdrive
    [Access] Leggere/scrivere dati nelle tabelle tramite VBA (DAO)

    prima fai un Loop per leggere la tabella di origine e cercare il dati sulla tabellaB (se li trova verifichi se ci sono modifiche, altrimenti aggiungi il dato)

    Ciao
    ℹ️ Leggi di più su dragone bianco ...

  10. #10
    simona.s non è in linea Novello
    Dragone scusa, mi sa che devo proprio andare a fare un mega corso....io purtroppo non so nulla di codici.... e, a dire la verità, non so neanche dove va inserito il codice DAO.

    Chiedo davvero scusa, pensavo fosse una cosa semplice ma a quanto vedo non ho abbastanza conoscenze e certo non posso chiedere di fare il lavoro al posto mio e mi dispiace far perdere tempo.

+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo

Potrebbero interessarti anche ...

  1. confronto fra tabelle
    Da frugo nel forum Microsoft Access
    Risposte: 10
    Ultimo Post: 28-08-2014, 06:04
  2. Confronto Tabelle
    Da Lorenzo Gallo nel forum Visual Basic 6
    Risposte: 3
    Ultimo Post: 09-07-2012, 10:15
  3. Confronto Tabelle e Query Access
    Da Luca050284 nel forum Microsoft Access
    Risposte: 0
    Ultimo Post: 10-04-2012, 20:25
  4. confronto fra tabelle
    Da orangotango nel forum Microsoft Word
    Risposte: 10
    Ultimo Post: 17-11-2010, 19:31
  5. access confronto fra tabelle
    Da gondoliere nel forum Microsoft Access
    Risposte: 2
    Ultimo Post: 21-11-2007, 10:59