| Queries |
| 2.5 Generare automaticamente una query di accodamento tra due tabelle con numero diverso di campi. |
| Lorenzo Coronati |
Public Function AccodaTabella(TabDa As String, TabA As String) As String
'Autore: Lorenzo Coronati
'Ritorna una stringa sql per accodare i record della TabDa in TabA
'impostando a null eventuali campi presenti solo in TabA
Dim d As DAO.Database
Set d = CurrentDb
Dim t As DAO.TableDef, t1 As DAO.TableDef
Set t = d.TableDefs(TabDa)
Set t1 = d.TableDefs(TabA)
Dim s As String
s = "INSERT INTO " & TabA & " (##) SELECT §§ FROM " & TabDa & ";"
Dim f As DAO.Field
For Each f In t1.Fields
s = SostituisciStringa(s, f.Name & ", ##", "##")
If EsisteCampo(t, f.Name) Then
s = SostituisciStringa(s, TabDa & "." & f.Name & ", §§", "§§")
Else
s = SostituisciStringa(s, "null, §§", "§§")
End If
Next f
s = EliminaStringa(s, ", ##")
s = EliminaStringa(s, ", §§")
AccodaTabella = s
End Function
Public Function EsisteCampo(t As TableDef, c As String) As Boolean
On Error GoTo annulla
Debug.Print t.Fields(c).Name
EsisteCampo = True
Exit Function
annulla:
EsisteCampo = False
End Function
Public Function SostituisciStringa(campo As String, commento As String, car As String) As String
Dim i As Integer
i = InStr(1, campo, car) - 1
SostituisciStringa = Left(campo, i)
SostituisciStringa = SostituisciStringa & commento & Right(campo, Len(campo) - i - Len(car))
End Function
Public Function EliminaStringa(s As String, car As String) As String
EliminaStringa = Left(s, InStr(1, s, car) - 1) & Right(s, Len(s) - InStr(1, s, car) - Len(car) + 1)
End Function
Serve per generare automaticamente una query di accodamento da una tabella all'altra quando le due strutture sono diverse (campi in piu' o in meno).Tipico esempio di utilizzo: upgrade del be da una qualsiasi versione precedente. Tu fornisci la nuova tabella e vuoi accodarci i record di quella vecchia. Quando i campi hanno lo stesso nome, no problem, ma se hai nuovi campi e non sai quali sono... Comprese nel prezzo le routine per verificare se un campo esiste, per sostituire una parte di stringa in un'altra, per eliminare un pezzo di stringa. Nota Le funzioni di cui sopra fanno riferimento alla libreria Microsoft DAO quindi, se si usa una versione di Access successiva ad Access 97, occorre aggiungere al database i riferimenti a Microsoft DAO 3.6 Object Library. |