Confronto tra due tabelle in access 2003 con differente struttura e tr...

lunedì 24 febbraio 2014 - 15.47
Tag Elenco Tags  Access (.mdb)

leoobelix Profilo | Newbie

consiglio su come procedere

tab1 ( id, NumeroOrdine)
tab2 ( id ,numeroOrdine, data, spedizione etc...)

devo confrontare il campo di tab1.numeroordine con la tab2.numeroordine
e verificare se ci sono alcuni valori di tab1 non presenti in tab2

premetto :

tab2 contiene circa 89.000 record.
tab1 riceve da un file excel su importazione circa 20 record
(ad ogni importazione la tab1 viene totalmente cancellata )

ho provato la strada con il recordset , ma sicuramente qualcosa sbaglio perche' non mi trova nulla

Dim db As DAO.database
Dim T1 As DAO.Recordset
Dim T2 As DAO.Recordset

Set database = CurrentDb
Set T1 = db.OpenRecordset("Tab1", dbOpenDynaset)
T1.MoveFirst
Do Until T1.EOF
Set T2 = db.OpenRecordset("SELECT * FROM Tab2 WHERE [NumeroOrdine]=" & T1.Fields("NumeroOrdine").Value, dbOpenDynaset)
If T2.Fields("NumeroOrdine").Value<>T1.Fields("NumeroOrdine").Value Then
msgbox" Non trovo questo ordine " & T1.Fields("NumeroOrdine").Value & "!"
End if
T2.Close
Set T2=Nothing
T1.MoveNext
Loop

T1.Close
db.Close
Set T1=Nothing
Set db=Nothing

renarig Profilo | Expert

Premesso che si puo fare anche con un RecordSet come hai ipotizzato,

Ma hai un motivo specifico per non fare una query ??

leoobelix Profilo | Newbie

Perche i valori non corrispondenti devo poi metterli in una casella di testo non associata
( questo lo so fare con il recordset ) ma con la query purtroppo non lo so fare in Vba.....


renarig Profilo | Expert

Il tuo problema sta quì
>Set T2 = db.OpenRecordset("SELECT * FROM Tab2 WHERE [NumeroOrdine]=" & T1.Fields("NumeroOrdine").Value, dbOpenDynaset)
>If T2.Fields("NumeroOrdine").Value <> T1.Fields("NumeroOrdine").Value Then
Quando in T1 non hai nessun record corrispondente la tua query ( "SELECT * FROM ..... ) non restituisce nessun record
quindi non ha senso il confronto della riga successiva e ti va in errore.

Per risolvere ti basta usare il RecordCount e verificare che sia diverso da zero
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

_------------- ma io lo farei totalmente diversamente.
Fai una query fra le 2 tabelle per trovare i record non corrispondenti e poi questa query
la fai diventare direttamente recordset
( anche la query scritta naturalmente con VBA )
SELECT tab1.Id, tab1.NumeroOrdine FROM tab1 LEFT JOIN tab2 ON tab1.NumeroOrdine = tab2.NumeroOrdine WHERE (((tab2.NumeroOrdine) Is Null));
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
Facci sapere

leoobelix Profilo | Newbie

ho seguito immediatamente il tuo consiglio e ho usato la query
PERFETTO , risultato ottenuto .

Grazie ancora !!!!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5