Newsgroup: it.comp.appl.access
Titolo: Trasferimento dati tra tabelle con strutture diverse.

Una buona serata a tutti! Io me la sono già rovinata....
Ho pensato, per circa due giorni, come salvare il mio utente (che
sinceramente avrei strozzzato in un primo momento!) dal lavoro immane di
trascrizione di almeno 500 record da una tabella ad un'altra con truttura
diversa.
Ho gettato lo sguardo sul SC ed ho trovato una cosa meravigliosa: tra le
queries ce n'è una proposta da Lorenzo Coronati.
E' proprio ciò che fa al caso mio: Generare automaticamente una query di
accodamento tra due tabelle con numero diverso di campi.
Sì ...d'accordo, ma come si mette in pratica? Io ho creato il modulo
relativo e vi ho ricopiato tutto dentro e poi?
Grazie per la disponibilità.
Ciao Rita.

 ha scritto nel messaggio
news:P8Dz8.119464$SR5.2...@twister1.libero.it...

Ho pensato di elencarvi il codice per una migliore valutazione del problema:
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 Database
   Set d = CurrentDb
   Dim t As TableDef, t1 As 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 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
Grazie ancora
Ciao Rita

 ha scritto nel messaggio
news:P8Dz8.119464$SR5.2...@twister1.libero.it...

E poi, non ho mai usato la funzione di Lorenzo, ma proverei con:
DoCmd.RunSQL AccodaTabella("NomeTabellaDaAccodare",
"NomeTabellaInCuiAccodare")
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 ha scritto nel messaggio
news:tVTz8.122958$SR5.3...@twister1.libero.it...

Grazie Roberto, eseguo subito.
Ciao Rita

relativo e vi ho ricopiato tutto dentro e poi?
Poi devi allegare le tabelle di origine (per esempio t1) e
destinazione (t2).
La funzione restituisce la stringa sql della query da
eseguire, per cui, se la volessi salvare, devi aprire la
finestra di debug (ctrl+g) e scrivere:
? allegatabella("t1","t2")
Ti verra' visualizzata una (lunga?) stringa che inizia con
INSERT INTO t1 ecc.
Selezionala, copiala (ctrl+c)
Crea una nuova query, senza scegliere alcuna tabella,
visualizza sql, incolla (ctrl+v)
Salva la query ed eseguila.
Se non ti occorre salvare la query, va benissimo il metodo
che ti ha suggerito Roberto.
-- 
Lorenzo Coronati
---
Quesito a risposta binaria SI/NO:
"Risponderai no a questa domanda?"
---

"Lorenzo Coronati" <lorenzo.coronati@liberopuntoit> ha scritto nel messaggio
news:3cdb8dfe...@news.edisontel.com...

Grazie mille per la spiegazione, non sarei mai riuscita a farlo da sola.
Ora provo.
Ciao Rita