Newsgroup: it.comp.appl.access
Titolo: non sono proprio riuscito ad accodare i dati

Carissimi sono ancora in panne con l'accodamento di dati in tabelle con
campi diversi (almeno in parte). Come già detto nel thread precedente sto
provando la function attinta dal SC di Lorenzo Coronati, dal quale ho avuto
anche delle dritte, ma non ho ancora avuto successo. L'errore è sempre lo
stesso: "Tipo non corrispondente". Mi dareste ancora una mano?
grazie
Francesco
P.S.: per comodità ripropongo la function
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
per la precisione l'errore è dato sulla linea iniziale del ciclo For Each f
In t1.Fields......
grazie tantissimo
Francesco
--------------------------------
Inviato via 
http://usenet.libero.it

 ha scritto nel messaggio
news:81Z211Z152Z57Y...@usenet.libero.it...


 ha scritto nel messaggio
news:81Z211Z152Z57Y...@usenet.libero.it...

Scusate per il messaggio precedente, mi è sfuggito.
Che versione di Access usi?
Posta il codice VBA con la quale richiami la funzione AccodaTabella.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------


Allora in una finestra immediata faccio:
?accodatabella("miatab1","miatab2")
ed uso Access2000
ciao


 Francesco



Tutto ok....funziona. Ovviamente i campi non trovati in una delle due tab
vanno persi, cioè messi a null. Secondo te trovato il campo da rendere null
in una delle due tab, lo si può creare nella tab di accodamento dimodoché
non si perdono i dati? Cioè se nella tab1 è presente il campo xxx che non è
presente in tab2, si puo' effettuare l'operazione di creazione del campo in
tab2 e accodarci i dati?
ciao e grazie






Caro Roberto tutto ok. Grazie per sempre per l'aiuto
