Ho 2 tabelle identiche, tabella1 e tabella2, uguali in struttura, numero di records e campi, contenti gli stessi valori;
supponiamo che inizialmente le tabelle hanno entrambe 10 records
tramite vba inserisco/aggiungo, ad esempio, altri 5 record in tabella 1, che quindi passa da 10 a 15 records.
Ora devo copiare/incollare nella tabella 2, solo i 5 records che ho aggiunto in tabella 1 .
Con la creazione guidata ho realizzato la query di accodamento che poi ho convertito in vba.
Credo di aver capito che la query-vba con il codice, INSERT INTO … SELECT …FROM, così come viene realizzata dalla creazione guidata, copia l’intera tabella 1 dal primo all’ultimo record e la incolla in tabella 2;
mi interessa invece copiare solo gli ultimi 5 records.
Allora ho realizzato questo codice:
- Codice: Seleziona tutto
Option Compare Database
Private Sub AGGIORNA
Dim NC As Integer, criterio As String
Dim DBCOrrente As DAO.Database
Dim Tabella1 As DAO.Recordset
Dim Tabella2 As DAO.Recordset
On Error Resume Next
Set db = CurrentDb
Set ds = db.OpenRecordset("SELECT Count(ID) AS IDA FROM Tabella1")
NR1 = ds!IDA
ds.Close
Set ds = db.OpenRecordset("SELECT Count(ID) AS IDC FROM Tabella2")
NR2 = ds!IDC
ds.Close
If NR1 = NR2 Then
MsgBox " INSERITE " & " " & record_Finali - record_esistenti & " " & " NUOVI RECORDS" & vbCrLf & "TABELLA 2 GIA' AGGIORNATA"
db.Close
Exit Sub
End If
Set Tab1 = db.OpenRecordset("Tabella1", dbOpenDynaset)
Set Tab2 = db.OpenRecordset("Tabella2", dbOpenDynaset)
criterio = "INSERT INTO Tab2 (ID, Nes, Nco, DATA, N1, N2, N3, N4, N5, N6, Jy, St) "
criterio = criterio & "SELECT ID, Nes, Nco, DATA, N1, N2, N3, N4, N5, N6, Jy, St From Tab1 WHERE Tab1.ID > 10" <<<<<
db.Execute criterio
Tab2.Close
Tab1.Close
db.Close
End Sub
Il codice funziona se nella riga evidenziata, la clausola WHERE contiene un numero, in questo caso 10.
Ma se al posto del numero inserisco una variabile, ad esempio se scrivo … WHERE Tab1.ID > Tab2.ID, oppure WHERE Tab1.ID > NR2, ho errore ed il messaggio recita “ previsto 1”;
leggendo l’help pare di aver capito che è necessario il numero.
Vorrei modificare il codice, oppure la clausola WHERE, in modo da usare una variabile e non un numero, per indicare che si deve copiare, nell’esempio, dal record 11 al record 15;
se prima di aggiornare le tabelle l’ultimo record è LastIniziale, mentre dopo l’aggiornamento l’ultimo record
è LastFinale, come devo scrivere per dire “copia da LastIniziale + 1 a LastFinale” ?
inoltre leggo che il riferimento al DAO è ormai vecchio e superato, ed è preferibile riferirsi all ‘ ADO oppure
all’ ADODB, (non so se questi ultimi sono la stessa cosa).
Attualmente uso office 2013 e forse dovrei passare a versioni più recenti.
A quale devo fare riferimento?
Saluti grazie