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.


Se pensate di avere del materiale freeware interessante e volete pubblicarlo, allora leggete qui.