Rompicapo con tabella Access

di il
4 risposte

Rompicapo con tabella Access

Buongiorno a tutti e grazie in anticipo per gli eventuali suggerimenti.
Ho un problema che mi sta facendo perdere un sacco di tempo con un gestionale sportivo che ho scritto tempo fa.
Il programma può essere dato in uso a più utenti che lavorano separatamente, ma poi tutti i dati raccolti in un database Access, devono confluire in un unico archivio.
Per fare questo uso un Form che confronta il database di origine (quelli che vengono utilizzati dai vari utenti) con quello chiamiamolo Master che deve contenere tutti i dati raccolti.
Lanciando questa "funzione" i due archivi vengono confrontati, e i dati mancanti nelle varie tabelle, vengono inseriti con i vari puntatori (ID) aggiornati.
Il problema sorge quando devo creare una tabella che non è presente nel database di arrivo.
Se la tabella non esiste, il software effettivamente la crea, ma non la riempie.
Se rilancio la routine, i dati vengono caricati, ma a quel punto la tabella esiste già, essendo stata creata nel primo passaggio.
Se al primo passaggio richiamo due volte la routine che mi crea la tabella inesistente senza uscire dalla routine chiamante, al primo passaggio viene creata la tabella senza generare errori, la seconda colta ovviamente viene generato l'errore di tabella esistente, e faccio comparire un MSGBOX di avviso.
Chiudendo il messagebox con il pulsante OK, i dati vengono caricati.
Qualcuno ha idea del perché di questo strano comportamento, e quindi di come risolverlo senza dover interagire con il messagebox?
Preciso che se importo l'intero database in uno vuoto, con lo stesso codice vengono importati tutti i dati, anche senza richiamare due volte la creazione delle nuove tabelle.
Allego il codice della routine di creazione tabella.
Grazie mille per i suggerimenti
Luca

Private Sub CreaTabella()
Dim ADOXcatalog As New ADOX.Catalog
Dim ADOXtable As New Table
Dim ADOXindex As New ADOX.Index
Dim col As New ADOX.Column
Dim col1 As New ADOX.Column
Dim col2 As New ADOX.Column
Dim col3 As New ADOX.Column
Dim col4 As New ADOX.Column
Dim col5 As New ADOX.Column

Dim col6 As New ADOX.Column
Dim col7 As New ADOX.Column
Dim col8 As New ADOX.Column
Dim col9 As New ADOX.Column
Dim col10 As New ADOX.Column
Dim col11 As New ADOX.Column
Dim col12 As New ADOX.Column
Dim col13 As New ADOX.Column
Dim col14 As New ADOX.Column
Dim col15 As New ADOX.Column

On Error GoTo errhandler
On Error Resume Next


ADOXcatalog.ActiveConnection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Archivio


'ADOXcatalog.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Archivio
ADOXtable.Name = nomegara
With col
.Name = "ID"
.Type = adInteger
Set .ParentCatalog = ADOXcatalog
.Properties("AutoIncrement") = True
.Properties("Seed") = CLng(1)
.Properties("Increment") = CLng(1)
End With
ADOXtable.Columns.Append col
Set cat = Nothing

With col1
.Name = "CodSocieta"
.Type = adVarWChar
.DefinedSize = 10
.Attributes = adColNullable
End With
ADOXtable.Columns.Append col1
Set cat = Nothing
With col2
.Name = "Tempo"
.Type = adVarWChar
.DefinedSize = 30
.Attributes = adColNullable
End With
ADOXtable.Columns.Append col2
Set cat = Nothing
With col3
.Name = "Km"
.Type = adVarWChar
.DefinedSize = 5
.Attributes = adColNullable
End With
ADOXtable.Columns.Append col3
Set cat = Nothing

With col4
.Name = "Societa"
.Type = adVarWChar
.DefinedSize = 50
.Attributes = adColNullable
End With
ADOXtable.Columns.Append col4
Set cat = Nothing


With col5
.Name = "Posizione"
.Type = adVarWChar
.DefinedSize = 50
.Attributes = adColNullable
End With
ADOXtable.Columns.Append col5
Set cat = Nothing


ADOXcatalog.Tables.Append ADOXtable

errhandler:
If Err.Number = -2147217897 Then
MsgBox "Database already exists"
ElseIf Err.Number <> 0 Then

MsgBox "Err " & Err.Description & "; operation not complete"
End If
Set ADOXtable = Nothing
Set ADOXindex = Nothing
Set ADOXcatalog = Nothing



End Sub

4 Risposte

  • Re: Rompicapo con tabella Access

    Modifica il post e usa i tag CODE per il codice ...

    E mi pare che manchi quello per l'inserimento ... e poi, come chiami la creazione e l'inserimento?


    P.S. Ma quanti On Error metti nel codice?

    On Error GoTo errhandler
    On Error Resume Next
  • Re: Rompicapo con tabella Access

    Non sarà il massimo della programmazione, ma purtroppo non ho tempo di ottimizzarlo…
    Ogni vettore e variabile ha un senso, ma spiegarle tutte impiegheremmo troppo tempo.
    La routine postata in precedenza è quella che dove casca l'asino (cioè io…), funzionando solo con l'interazione con l'utente, sotto forma di click sul tasto OK del msgbox..
    Solo così infatti, e dopo aver rilanciato il sottoprogramma stesso, il tutto funziona, ed è quello a cui non riuscendo a dare un senso, non riesco a risolvere…
    Grazie mille e portate pazienza..
    Luca









    
    
    Private Sub Importa_Click()
    
    On Error Resume Next
    
    qry = "SELECT * FROM Tesserati"
    qry1 = "SELECT * FROM DatiGara"
    qry4 = "SELECT * FROM Classifiche"
    qry8 = "SELECT * FROM Categorie"
    qry9 = "SELECT * FROM Enti"
    
        Screen.MousePointer = vbHourglass
        Archivio = App.Path & "\amatorilombardia.mdb"
        Set DBCorrente = OpenDatabase(Archivio)
        Set TabellaDati_Generali = DBCorrente.OpenRecordset(qry, dbOpenDynaset)
    
    Archivio1 = txtFileName.Text
    Set DBEsterno = OpenDatabase(Archivio1)
    
    Set TabellaEsternadati_generali = DBEsterno.OpenRecordset(qry, dbOpenDynaset)
    If TabellaEsternadati_generali.EOF = False Then
            TabellaEsternadati_generali.MoveLast
            TabellaEsternadati_generali.MoveFirst
            p = TabellaEsternadati_generali.RecordCount
            ntessere = p
    End If
    ReDim Y(p, 5)
                For i = 0 To p - 1
                    Y(i, 1) = TabellaEsternadati_generali("ID")
                    Y(i, 2) = TabellaEsternadati_generali("Tessera")
                    Y(i, 3) = ""
                    Y(i, 4) = "flag"
                    Y(i, 5) = ""
                    TabellaEsternadati_generali.MoveNext
                Next i
              
                    If TabellaDati_Generali.EOF = True Then GoTo gj1
                    If TabellaDati_Generali.EOF = False Then
                        TabellaDati_Generali.MoveLast
                        TabellaDati_Generali.MoveFirst
                        p1 = TabellaDati_Generali.RecordCount
                    End If
                                  For I1 = 0 To p1 - 1
                                    For i = 0 To p - 1
                                        If TabellaDati_Generali("Tessera") = Y(i, 2) Then Y(i, 4) = "": Y(i, 3) = TabellaDati_Generali("ID"): Y(i, 5) = TabellaDati_Generali("Tessera")
                                    Next i
                                    TabellaDati_Generali.MoveNext
                                Next I1
    gj1:
    For i = 0 To p - 1
        If Y(i, 4) <> "" Then
            qry2 = "SELECT * FROM Tesserati WHERE ID=" & Y(i, 1)
            Set TabellaEsternadati_generali = DBEsterno.OpenRecordset(qry2, dbOpenDynaset)
            TabellaDati_Generali.AddNew
            TabellaDati_Generali.Fields("Tessera") = TabellaEsternadati_generali("Tessera")
            TabellaDati_Generali.Fields("Ente") = TabellaEsternadati_generali("Ente")
            TabellaDati_Generali.Fields("Anno") = TabellaEsternadati_generali("Anno")
            TabellaDati_Generali.Fields("Cognome") = TabellaEsternadati_generali("Cognome")
            TabellaDati_Generali.Fields("Nome") = TabellaEsternadati_generali("Nome")
            TabellaDati_Generali.Fields("Cod Societa") = TabellaEsternadati_generali("Cod Societa")
            TabellaDati_Generali.Fields("Societa") = TabellaEsternadati_generali("Societa")
            TabellaDati_Generali.Fields("Sesso") = TabellaEsternadati_generali("Sesso")
            Y(i, 3) = TabellaDati_Generali("ID")
            Y(i, 5) = TabellaEsternadati_generali("Tessera")
            TabellaDati_Generali.Update
        End If
    Next i
    TabellaEsternadati_generali.Close
    TabellaDati_Generali.Close
    
    
            
    '****************** Inportazione tabelle iscritti e classifiche *******************
    
     For i = 0 To ngare - 1
        p = 0
            
        If yg(i, 7) = "1" And yg(i, 6) = "Cicloturismo" Then
            nomegara = yg(i, 8)
            nomegara1 = yg(i, 3)
            DBCorrente.Close
            Call CreaTabellaGaraRando
            qry6 = "SELECT * FROM " & nomegara
            qry3 = "SELECT * FROM " & nomegara1
            Set DBCorrente = OpenDatabase(Archivio)
            Set TabellaDati_Generali = DBCorrente.OpenRecordset(qry6, dbOpenDynaset)
            GoTo impo:
        End If
        
            If yg(i, 7) = "1" And yg(i, 6) = "Randonnee" Then
            nomegara = yg(i, 8)
            nomegara1 = yg(i, 3)
            DBCorrente.Close
            Call CreaTabellaGaraRando
            qry6 = "SELECT * FROM " & nomegara
            qry3 = "SELECT * FROM " & nomegara1
            Set DBCorrente = OpenDatabase(Archivio)
            Set TabellaDati_Generali = DBCorrente.OpenRecordset(qry6, dbOpenDynaset)
            GoTo impo:
        End If
        
        If yg(i, 7) = "1" And yg(i, 6) = "Pista" Then
            nomegara = yg(i, 8)
            nomegara1 = yg(i, 3)
            DBCorrente.Close
            Call CreaTabellaGaraPista
            qry6 = "SELECT * FROM " & nomegara
            qry3 = "SELECT * FROM " & nomegara1
            Set DBCorrente = OpenDatabase(Archivio)
            Set TabellaDati_Generali = DBCorrente.OpenRecordset(qry6, dbOpenDynaset)
            GoTo impo:
        End If
        
         If yg(i, 7) = "1" And yg(i, 6) = "Cronosquadre" Then
            nomegara = yg(i, 8)
            nomegara1 = yg(i, 3)
            DBCorrente.Close
            Call CreaTabellaGaraCronosquadre
            qry6 = "SELECT * FROM " & nomegara
            qry3 = "SELECT * FROM " & nomegara1
            Set DBCorrente = OpenDatabase(Archivio)
            Set TabellaDati_Generali = DBCorrente.OpenRecordset(qry6, dbOpenDynaset)
            GoTo impo:
        End If
     
     
        
        If yg(i, 7) = "1" And yg(i, 6) <> "Pista" And yg(i, 6) <> "Cronosquadre" And yg(i, 6) <> "Cicloturismo" And yg(i, 6) <> "Randonnee" Then
            nomegara = yg(i, 8)
            nomegara1 = yg(i, 3)
            DBCorrente.Close
            Call CreaTabellaGara
            qry6 = "SELECT * FROM " & nomegara
            qry3 = "SELECT * FROM " & nomegara1
            Set DBCorrente = OpenDatabase(Archivio)
            Set TabellaDati_Generali = DBCorrente.OpenRecordset(qry6, dbOpenDynaset)
            GoTo impo:
        End If
        
        If yg(i, 7) = "0" Then
            nomegara = yg(i, 3)
            qry6 = "SELECT * FROM " & nomegara
            qry3 = "SELECT * FROM " & yg(i, 3)
                        Set TabellaEsternadati_generali = DBEsterno.OpenRecordset(qry3, dbOpenDynaset)
                        If TabellaEsternadati_generali.EOF = False Then
                            TabellaEsternadati_generali.MoveLast
                            TabellaEsternadati_generali.MoveFirst
                            p = TabellaEsternadati_generali.RecordCount
                        End If
                        If p = 0 Then GoTo fig
          End If
        
    
    
    '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%             qui crea le tabelle delle gare non ancora in archivio  %%%%%%%%%%%%%%%%
    '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        Set TabellaDati_Generali = DBCorrente.OpenRecordset(qry6, dbOpenDynaset)
        If Err.Number = 3078 Then
            TabellaDati_Generali.Close
            DBCorrente.Close
            If yg(i, 6) = "Pista" Then Call CreaTabellaGaraPista
            If yg(i, 6) <> "Pista" And yg(i, 6) <> "Cronosquadre" And yg(i, 6) <> "Cicloturismo" And yg(i, 6) <> "Randonnee" Then Call CreaTabellaGara
            If yg(i, 6) = "Cronosquadre" Then Call CreaTabellaGaraCronosquadre
            If yg(i, 6) = "Cicloturismo" Then Call CreaTabellaGaraRando
            If yg(i, 6) = "Randonnee" Then Call CreaTabellaGaraRando
            Set DBCorrente = OpenDatabase(Archivio)
            Set TabellaDati_Generali = DBCorrente.OpenRecordset(qry6, dbOpenDynaset)
        End If
        
    '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^          richiamo le routine di creazione per ovviare al mancato inserimento dei dati nel caso di imprtazione di una singola tabella  ^^^^^^^^^^^
    '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            
            If yg(i, 6) = "Pista" Then Call CreaTabellaGaraPista
            If yg(i, 6) <> "Pista" And yg(i, 6) <> "Cronosquadre" And yg(i, 6) <> "Cicloturismo" And yg(i, 6) <> "Randonnee" Then Call CreaTabellaGara
            If yg(i, 6) = "Cronosquadre" Then Call CreaTabellaGaraCronosquadre
            If yg(i, 6) = "Cicloturismo" Then Call CreaTabellaGaraRando
            If yg(i, 6) = "Randonnee" Then Call CreaTabellaGaraRando
    '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       
        
    impo:
    
    
    ' Vettore dove sono immagazzinati i dati degli iscritti e arrivati da importare
    ' colonna 1 ID Iscritto da importare,colonna 2 NTesserato da importare, colonna 3 Dorsale, ,colonna 4 flag che indica se la gara va importata o meno,colonna5 nuovo ID Tesserato
    
    ReDim yo(p, 44)
                
                
                For I1 = 0 To p - 1
                         
                If yg(i, 6) = "Cicloturismo" Or yg(i, 6) = "Randonnee" Then
                    yo(I1, 1) = TabellaEsternadati_generali("CodSocieta")
                    yo(I1, 2) = TabellaEsternadati_generali("Societa")
                    yo(I1, 3) = TabellaEsternadati_generali("IscCorto")
                    yo(I1, 4) = TabellaEsternadati_generali("IscMedio")
                    yo(I1, 5) = TabellaEsternadati_generali("IscLungo")
                    yo(I1, 6) = TabellaEsternadati_generali("ArrCorto")
                    yo(I1, 7) = TabellaEsternadati_generali("ArrMedio")
                    yo(I1, 8) = TabellaEsternadati_generali("ArrLungo")
                    yo(I1, 9) = "Flag"
                    yo(I1, 10) = ""
                    GoTo ecco
                End If
                
                
                If yg(i, 6) = "Cronosquadre" Then
                    yo(I1, 1) = TabellaEsternadati_generali("ID")
                    yo(I1, 2) = TabellaEsternadati_generali("CodSocieta")
                    yo(I1, 3) = TabellaEsternadati_generali("Tempo")
                    yo(I1, 4) = TabellaEsternadati_generali("Km")
                    yo(I1, 5) = TabellaEsternadati_generali("Societa")
                    yo(I1, 6) = TabellaEsternadati_generali("Posizione")
                    yo(I1, 7) = TabellaEsternadati_generali("Dorsale1")
                    yo(I1, 8) = TabellaEsternadati_generali("Atleta1")
                    yo(I1, 9) = TabellaEsternadati_generali("Categoria1")
                    yo(I1, 10) = TabellaEsternadati_generali("Dorsale2")
                    yo(I1, 11) = TabellaEsternadati_generali("Atleta2")
                    yo(I1, 12) = TabellaEsternadati_generali("Categoria2")
                    yo(I1, 13) = TabellaEsternadati_generali("Dorsale3")
                    yo(I1, 14) = TabellaEsternadati_generali("Atleta3")
                    yo(I1, 15) = TabellaEsternadati_generali("Categoria3")
                    yo(I1, 16) = TabellaEsternadati_generali("Dorsale4")
                    yo(I1, 17) = TabellaEsternadati_generali("Atleta4")
                    yo(I1, 18) = TabellaEsternadati_generali("Categoria4")
                    yo(I1, 19) = TabellaEsternadati_generali("Dorsale5")
                    yo(I1, 20) = TabellaEsternadati_generali("Atleta5")
                    yo(I1, 21) = TabellaEsternadati_generali("Categoria5")
                    yo(I1, 22) = TabellaEsternadati_generali("Dorsale6")
                    yo(I1, 23) = TabellaEsternadati_generali("Atleta6")
                    yo(I1, 24) = TabellaEsternadati_generali("Categoria6")
                    yo(I1, 25) = TabellaEsternadati_generali("Dorsale7")
                    yo(I1, 26) = TabellaEsternadati_generali("Atleta7")
                    yo(I1, 27) = TabellaEsternadati_generali("Categoria7")
                    yo(I1, 28) = TabellaEsternadati_generali("Dorsale8")
                    yo(I1, 29) = TabellaEsternadati_generali("Atleta8")
                    yo(I1, 30) = TabellaEsternadati_generali("Categoria8")
                    yo(I1, 31) = TabellaEsternadati_generali("Dorsale9")
                    yo(I1, 32) = TabellaEsternadati_generali("Atleta9")
                    yo(I1, 33) = TabellaEsternadati_generali("Categoria9")
                    yo(I1, 34) = TabellaEsternadati_generali("Dorsale10")
                    yo(I1, 35) = TabellaEsternadati_generali("Atleta10")
                    yo(I1, 36) = TabellaEsternadati_generali("Categoria10")
                    yo(I1, 37) = TabellaEsternadati_generali("Fascia")
                    yo(I1, 38) = "flag"
                    yo(I1, 39) = TabellaEsternadati_generali("OraPartenza")
                    yo(I1, 40) = TabellaEsternadati_generali("OraArrivo")
                    yo(I1, 41) = TabellaEsternadati_generali("ScartoPartenza")
                    GoTo ecco
                End If
                
                
                
                
                    yo(I1, 1) = TabellaEsternadati_generali("ID")
                    yo(I1, 2) = TabellaEsternadati_generali("NTesserato")
                    yo(I1, 3) = TabellaEsternadati_generali("Dorsale")
                    yo(I1, 4) = "flag"
                    yo(I1, 5) = ""
                    
                If yg(i, 6) <> "Pista" And yg(i, 6) <> "Cronosquadre" Then
                    yo(I1, 6) = TabellaEsternadati_generali("Categoria")
                    yo(I1, 7) = TabellaEsternadati_generali("Posizione")
                    yo(I1, 8) = TabellaEsternadati_generali("Tempo")
                    yo(I1, 9) = TabellaEsternadati_generali("Km")
                    yo(I1, 10) = TabellaEsternadati_generali("Punti")
                    yo(I1, 11) = TabellaEsternadati_generali("OraPartenza")
                    yo(I1, 12) = TabellaEsternadati_generali("OraArrivo")
                    yo(I1, 13) = TabellaEsternadati_generali("ScartoPartenza")
                End If
                
                If yg(i, 6) = "Pista" Then
                    yo(I1, 6) = TabellaEsternadati_generali("Categoria")
                    yo(I1, 7) = TabellaEsternadati_generali("Inseguimento3000")
                    yo(I1, 8) = TabellaEsternadati_generali("Inseguimento2000")
                    yo(I1, 9) = TabellaEsternadati_generali("Km")
                    yo(I1, 10) = TabellaEsternadati_generali("c750")
                    yo(I1, 11) = TabellaEsternadati_generali("c500")
                    yo(I1, 42) = TabellaEsternadati_generali("c200")
                    yo(I1, 43) = TabellaEsternadati_generali("Scratch1")
                    yo(I1, 44) = TabellaEsternadati_generali("Scratch2")
                    yo(I1, 12) = TabellaEsternadati_generali("GaraPunti1")
                    yo(I1, 13) = TabellaEsternadati_generali("GaraPunti2")
                End If
    ecco:
                    TabellaEsternadati_generali.MoveNext
                Next I1
        
                If yg(i, 6) = "Cronosquadre" Then
                    Call sistema_cronosquadre
                GoTo fig
                End If
                
                If yg(i, 6) = "Cicloturismo" Or yg(i, 6) = "Randonnee" Then
                    Call sistema_turismo
                GoTo fig
                End If
                
                
       For I1 = 0 To ntessere - 1
            For I2 = 0 To p - 1
                If yo(I2, 2) = Y(I1, 1) Then yo(I2, 5) = Y(I1, 3)
            Next I2
       Next I1
                If TabellaDati_Generali.EOF = True Then GoTo gp
             
                If TabellaDati_Generali.EOF = False Then
                    TabellaDati_Generali.MoveLast
                    TabellaDati_Generali.MoveFirst
                    p1 = TabellaDati_Generali.RecordCount
                End If
                For I1 = 0 To p1 - 1
                    For I3 = 0 To p - 1
                        If TabellaDati_Generali("NTesserato") = yo(I3, 5) Then yo(I3, 4) = ""
                    Next I3
                   TabellaDati_Generali.MoveNext
                Next I1
    gp:
    TabellaDati_Generali.Close
    TabellaEsternadati_generali.Close
    
    '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
    Set TabellaEsternadati_generali = DBEsterno.OpenRecordset(qry3, dbOpenDynaset)
    
    Set TabellaDati_Generali = DBCorrente.OpenRecordset(qry6, dbOpenDynaset)
                    If TabellaDati_Generali.EOF = True Then GoTo g21
                    If TabellaDati_Generali.EOF = False Then
                        TabellaDati_Generali.MoveLast
                        TabellaDati_Generali.MoveFirst
                        p2 = TabellaDati_Generali.RecordCount
                    End If
    ReDim yr(p2)
                For I3 = 0 To p2 - 1
                    yr(I3) = TabellaDati_Generali("ID")
                    TabellaDati_Generali.MoveNext
                Next I3
                        If TabellaEsternadati_generali.EOF = True Then GoTo g21
                        If TabellaEsternadati_generali.EOF = False Then
                        TabellaEsternadati_generali.MoveLast
                        TabellaEsternadati_generali.MoveFirst
                        p3 = TabellaEsternadati_generali.RecordCount
                    End If
                                  For I1 = 0 To p3 - 1
                                  u = 0
                                    For I2 = 0 To p2 - 1
                                        If yr(I2) = TabellaEsternadati_generali("NTesserato") Then u = 1
                                    Next I2
                                    If u = 0 Then
                                        If yg(i, 6) <> "Pista" And yg(i, 6) <> "Cronosquadre" Then
                                            yo(I1, 6) = ""
                                            yo(I1, 7) = ""
                                            yo(I1, 8) = ""
                                            yo(I1, 9) = ""
                                            yo(I1, 10) = ""
                                            yo(I1, 11) = ""
                                            yo(I1, 12) = ""
                                            yo(I1, 13) = ""
                                        End If
                
                                        If yg(i, 6) = "Pista" Then
                                            yo(I1, 6) = ""
                                            yo(I1, 7) = ""
                                            yo(I1, 8) = ""
                                            yo(I1, 9) = ""
                                            yo(I1, 10) = ""
                                            yo(I1, 11) = ""
                                            yo(I1, 12) = ""
                                            yo(I1, 13) = ""
                                            yo(I1, 42) = ""
                                            yo(I1, 43) = ""
                                            yo(I1, 44) = ""
                                        End If
                                    End If
                                    
                                    TabellaEsternadati_generali.MoveNext
                                Next I1
    TabellaDati_Generali.Close
    TabellaEsternadati_generali.Close
    
    g21:
    For I1 = 0 To p - 1
        If yg(i, 6) <> "Pista" And yg(i, 6) <> "Cronosquadre" Then
        
            If yo(I1, 4) <> "" Then
                
                qry2 = qry6 & " WHERE ID=" & yo(I1, 1)
                qry7 = qry3 & " WHERE ID=" & yo(I1, 1)
                
                Set TabellaEsternadati_generali = DBEsterno.OpenRecordset(qry7, dbOpenDynaset)
                Set TabellaDati_Generali = DBCorrente.OpenRecordset(qry2, dbOpenDynaset)
                TabellaDati_Generali.AddNew
                TabellaDati_Generali.Fields("NTesserato") = yo(I1, 5)
                TabellaDati_Generali.Fields("Dorsale") = yo(I1, 3)
                TabellaDati_Generali.Fields("Categoria") = yo(I1, 6)
                TabellaDati_Generali.Fields("Posizione") = yo(I1, 7)
                TabellaDati_Generali.Fields("Tempo") = yo(I1, 8)
                TabellaDati_Generali.Fields("Km") = yo(I1, 9)
                TabellaDati_Generali.Fields("Punti") = yo(I1, 10)
                TabellaDati_Generali.Fields("OraPartenza") = yo(I1, 11)
                TabellaDati_Generali.Fields("OraArrivo") = yo(I1, 12)
                TabellaDati_Generali.Fields("ScartoPartenza") = yo(I1, 13)
                TabellaDati_Generali.Update
                TabellaDati_Generali.Close
                TabellaEsternadati_generali.Close
    
            End If
        End If
        
        If yg(i, 6) = "Pista" Then
            If yo(I1, 4) <> "" Then
            
                qry2 = qry6 & " WHERE ID=" & yo(I1, 1)
                qry7 = qry3 & " WHERE ID=" & yo(I1, 1)
                Set TabellaEsternadati_generali = DBEsterno.OpenRecordset(qry7, dbOpenDynaset)
                Set TabellaDati_Generali = DBCorrente.OpenRecordset(qry2, dbOpenDynaset)
                TabellaDati_Generali.AddNew
                TabellaDati_Generali.Fields("NTesserato") = yo(I1, 5)
                TabellaDati_Generali.Fields("Dorsale") = yo(I1, 3)
                TabellaDati_Generali.Fields("Categoria") = yo(I1, 6)
                TabellaDati_Generali.Fields("Inseguimento3000") = yo(I1, 7)
                TabellaDati_Generali.Fields("Inseguimento2000") = yo(I1, 8)
                TabellaDati_Generali.Fields("Km") = yo(I1, 9)
                TabellaDati_Generali.Fields("c750") = yo(I1, 10)
                TabellaDati_Generali.Fields("c500") = yo(I1, 11)
                TabellaDati_Generali.Fields("c200") = yo(I1, 42)
                TabellaDati_Generali.Fields("Scratch1") = yo(I1, 43)
                TabellaDati_Generali.Fields("Scratch2") = yo(I1, 44)
                TabellaDati_Generali.Fields("GaraPunti1") = yo(I1, 12)
                TabellaDati_Generali.Fields("GaraPunti2") = yo(I1, 13)
                TabellaDati_Generali.Update
                TabellaDati_Generali.Close
                TabellaEsternadati_generali.Close
            End If
        End If
    Next I1
    
    fig:
    Next i
    
    
    MsgBox "IMPORTAZIONE DATI ESEGUITA CON SUCCESSO!!! Premi OK per continuare"
    flag_inserito = True
    
    End Sub
    
    
  • Re: Rompicapo con tabella Access

    Mi dispiace ma magari il codice avesse solo problemi di ottimizzazione, semmai è confuso e a tratti incomprensibile.

    Puoi spiegare meglio COSA esegui esattamente (quali procedure) e in quale ordine con quale esito? Perché da quello che hai spiegato non si è capito assolutamente nulla.

    La questione comunque è un'altra.

    Non ha senso creare tabelle dinamicamente se sai come deve essere fatto il tuo DB.
    Vedo che ne crei tante, tutte eguali, con il nome della "gara", quando potresti crearne una sola (non da programma) sin dall'inizio ed inserire i dati che ti servono, magari differenziandoli con uno specifico campo.
  • Re: Rompicapo con tabella Access

    oregon ha scritto:


    Mi dispiace ma magari il codice avesse solo problemi di ottimizzazione, semmai è confuso e a tratti incomprensibile.

    Puoi spiegare meglio COSA esegui esattamente (quali procedure) e in quale ordine con quale esito? Perché da quello che hai spiegato non si è capito assolutamente nulla.

    La questione comunque è un'altra.

    Non ha senso creare tabelle dinamicamente se sai come deve essere fatto il tuo DB.
    Vedo che ne crei tante, tutte eguali, con il nome della "gara", quando potresti crearne una sola (non da programma) sin dall'inizio ed inserire i dati che ti servono, magari differenziandoli con uno specifico campo.
    Grazie della risposta, veniamo alle precisazioni:
    come avrai visto, le tabelle sono diverse perché diversi sono i dati relativi ad ogni tipo di manifestazione da gestire, quindi fare un unico modello di tabella per ogni manifestazione, inserendovi tutti i campi necessari, porterebbe ad avere un database ancor più grande, con campi utilizzati solo in parte a seconda del tipo di gara gestita.
    Detto questo, in questa sezione controllo se la tabella da importare di nome nomegara esiste nel database finale.
    In caso contrario (se viene generato l'errore di tabella inesistente Err 3078) chiamo la routine di creazione dei vari tipi di tabella, a seconda del tipo di gara da gestire, e questo per il ciclo "For i = 0 To ngare - 1" dove ngare è il numero di tabelle/gara presenti nel db da importare.

    
    '****************** Inportazione tabelle iscritti e classifiche *******************
    
     For i = 0 To ngare - 1
        p = 0
            
        If yg(i, 7) = "1" And yg(i, 6) = "Cicloturismo" Then
            nomegara = yg(i, 8)
            nomegara1 = yg(i, 3)
            DBCorrente.Close
            Call CreaTabellaGaraRando
            qry6 = "SELECT * FROM " & nomegara
            qry3 = "SELECT * FROM " & nomegara1
            Set DBCorrente = OpenDatabase(Archivio)
            Set TabellaDati_Generali = DBCorrente.OpenRecordset(qry6, dbOpenDynaset)
            GoTo impo:
        End If
        
            If yg(i, 7) = "1" And yg(i, 6) = "Randonnee" Then
            nomegara = yg(i, 8)
            nomegara1 = yg(i, 3)
            DBCorrente.Close
            Call CreaTabellaGaraRando
            qry6 = "SELECT * FROM " & nomegara
            qry3 = "SELECT * FROM " & nomegara1
            Set DBCorrente = OpenDatabase(Archivio)
            Set TabellaDati_Generali = DBCorrente.OpenRecordset(qry6, dbOpenDynaset)
            GoTo impo:
        End If
        
        If yg(i, 7) = "1" And yg(i, 6) = "Pista" Then
            nomegara = yg(i, 8)
            nomegara1 = yg(i, 3)
            DBCorrente.Close
            Call CreaTabellaGaraPista
            qry6 = "SELECT * FROM " & nomegara
            qry3 = "SELECT * FROM " & nomegara1
            Set DBCorrente = OpenDatabase(Archivio)
            Set TabellaDati_Generali = DBCorrente.OpenRecordset(qry6, dbOpenDynaset)
            GoTo impo:
        End If
        
         If yg(i, 7) = "1" And yg(i, 6) = "Cronosquadre" Then
            nomegara = yg(i, 8)
            nomegara1 = yg(i, 3)
            DBCorrente.Close
            Call CreaTabellaGaraCronosquadre
            qry6 = "SELECT * FROM " & nomegara
            qry3 = "SELECT * FROM " & nomegara1
            Set DBCorrente = OpenDatabase(Archivio)
            Set TabellaDati_Generali = DBCorrente.OpenRecordset(qry6, dbOpenDynaset)
            GoTo impo:
        End If
     
     
        
        If yg(i, 7) = "1" And yg(i, 6) <> "Pista" And yg(i, 6) <> "Cronosquadre" And yg(i, 6) <> "Cicloturismo" And yg(i, 6) <> "Randonnee" Then
            nomegara = yg(i, 8)
            nomegara1 = yg(i, 3)
            DBCorrente.Close
            Call CreaTabellaGara
            qry6 = "SELECT * FROM " & nomegara
            qry3 = "SELECT * FROM " & nomegara1
            Set DBCorrente = OpenDatabase(Archivio)
            Set TabellaDati_Generali = DBCorrente.OpenRecordset(qry6, dbOpenDynaset)
            GoTo impo:
        End If
        
        If yg(i, 7) = "0" Then
            nomegara = yg(i, 3)
            qry6 = "SELECT * FROM " & nomegara
            qry3 = "SELECT * FROM " & yg(i, 3)
                        Set TabellaEsternadati_generali = DBEsterno.OpenRecordset(qry3, dbOpenDynaset)
                        If TabellaEsternadati_generali.EOF = False Then
                            TabellaEsternadati_generali.MoveLast
                            TabellaEsternadati_generali.MoveFirst
                            p = TabellaEsternadati_generali.RecordCount
                        End If
                        If p = 0 Then GoTo fig
          End If
     
    '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%             qui crea le tabelle delle gare non ancora in archivio  %%%%%%%%%%%%%%%%
    '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        Set TabellaDati_Generali = DBCorrente.OpenRecordset(qry6, dbOpenDynaset)
        If Err.Number = 3078 Then
            TabellaDati_Generali.Close
            DBCorrente.Close
            If yg(i, 6) = "Pista" Then Call CreaTabellaGaraPista
            If yg(i, 6) <> "Pista" And yg(i, 6) <> "Cronosquadre" And yg(i, 6) <> "Cicloturismo" And yg(i, 6) <> "Randonnee" Then Call CreaTabellaGara
            If yg(i, 6) = "Cronosquadre" Then Call CreaTabellaGaraCronosquadre
            If yg(i, 6) = "Cicloturismo" Then Call CreaTabellaGaraRando
            If yg(i, 6) = "Randonnee" Then Call CreaTabellaGaraRando
            Set DBCorrente = OpenDatabase(Archivio)
            Set TabellaDati_Generali = DBCorrente.OpenRecordset(qry6, dbOpenDynaset)
        End If
        
        
        
        
        
        
    '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^          richiamo le routine di creazione per ovviare al mancato inserimento dei dati nel caso di imprtazione di una singola tabella  ^^^^^^^^^^^
    '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            
            If yg(i, 6) = "Pista" Then Call CreaTabellaGaraPista
            If yg(i, 6) <> "Pista" And yg(i, 6) <> "Cronosquadre" And yg(i, 6) <> "Cicloturismo" And yg(i, 6) <> "Randonnee" Then Call CreaTabellaGara
            If yg(i, 6) = "Cronosquadre" Then Call CreaTabellaGaraCronosquadre
            If yg(i, 6) = "Cicloturismo" Then Call CreaTabellaGaraRando
            If yg(i, 6) = "Randonnee" Then Call CreaTabellaGaraRando
    '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        
        

    Mi sono poi ridotto a richiamare una seconda volta le routine di generazione della nuova tabella per arrivare ad avere nella routine crea… il msgbox di errore, chiudendo il quale con il tasto OK i dati della tabella appena creata vengono scritti nel db di arrivo. Ometto qualche campo della tabella per brevità.
    
    
    Private Sub CreaTabella()
     Dim ADOXcatalog As New ADOX.Catalog
     Dim ADOXtable As New Table
     Dim ADOXindex As New ADOX.Index
     Dim col As New ADOX.Column
     Dim col1 As New ADOX.Column
     Dim col2 As New ADOX.Column
     Dim col3 As New ADOX.Column
     Dim col4 As New ADOX.Column
     Dim col5 As New ADOX.Column
    
     Dim col6 As New ADOX.Column
     Dim col7 As New ADOX.Column
     Dim col8 As New ADOX.Column
     Dim col9 As New ADOX.Column
     Dim col10 As New ADOX.Column
     Dim col11 As New ADOX.Column
     Dim col12 As New ADOX.Column
     Dim col13 As New ADOX.Column
     Dim col14 As New ADOX.Column
     Dim col15 As New ADOX.Column
    
     On Error GoTo errhandler
     On Error Resume Next
    
    
     ADOXcatalog.ActiveConnection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Archivio
    
    
     'ADOXcatalog.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Archivio
     ADOXtable.Name = nomegara
    With col
    .Name = "ID"
    .Type = adInteger
    Set .ParentCatalog = ADOXcatalog
    .Properties("AutoIncrement") = True
    .Properties("Seed") = CLng(1)
    .Properties("Increment") = CLng(1)
    End With
     ADOXtable.Columns.Append col
     Set cat = Nothing
    
     With col1
    .Name = "CodSocieta"
    .Type = adVarWChar
    .DefinedSize = 10
    .Attributes = adColNullable
    End With
     ADOXtable.Columns.Append col1
     Set cat = Nothing
     With col2
    .Name = "Tempo"
    .Type = adVarWChar
    .DefinedSize = 30
    .Attributes = adColNullable
     End With
     ADOXtable.Columns.Append col2
     Set cat = Nothing
     With col3
    .Name = "Km"
    .Type = adVarWChar
    .DefinedSize = 5
    .Attributes = adColNullable
     End With
     ADOXtable.Columns.Append col3
     Set cat = Nothing
    
     With col4
    .Name = "Societa"
    .Type = adVarWChar
    .DefinedSize = 50
    .Attributes = adColNullable
    End With
     ADOXtable.Columns.Append col4
     Set cat = Nothing
    
    
     With col5
    .Name = "Posizione"
    .Type = adVarWChar
    .DefinedSize = 50
    .Attributes = adColNullable
    End With
     ADOXtable.Columns.Append col5
     Set cat = Nothing
    
     ADOXcatalog.Tables.Append ADOXtable
    
     errhandler:
     If Err.Number = -2147217897 Then
    MsgBox "Database already exists"
     ElseIf Err.Number <> 0 Then
    
    MsgBox "Err " & Err.Description & "; operation not complete"
     End If
     Set ADOXtable = Nothing
     Set ADOXindex = Nothing
     Set ADOXcatalog = Nothing
    
     End Sub
    
    

    Il codice qui sotto riporta l'assegnazione dei vari campi della tabella, i dati di origine sono nel vettore yo(indice,campo dati) che viene caricato nei primi blocchi dal db da importare in base al tipo di gara da trattare
    For I1 = 0 To p - 1

    If yg(i, 6) = "Cicloturismo" Or yg(i, 6) = "Randonnee" Then
    yo(I1, 1) = TabellaEsternadati_generali("CodSocieta")
    yo(I1, 2) = TabellaEsternadati_generali("Societa")
    yo(I1, 3) = TabellaEsternadati_generali("IscCorto")
    yo(I1, 4) = TabellaEsternadati_generali("IscMedio")
    yo(I1, 5) = TabellaEsternadati_generali("IscLungo")
    yo(I1, 6) = TabellaEsternadati_generali("ArrCorto")
    yo(I1, 7) = TabellaEsternadati_generali("ArrMedio")
    yo(I1, = TabellaEsternadati_generali("ArrLungo")
    yo(I1, 9) = "Flag"
    yo(I1, 10) = ""
    GoTo ecco
    End If


    If yg(i, 6) = "Cronosquadre" Then
    yo(I1, 1) = TabellaEsternadati_generali("ID")
    yo(I1, 2) = TabellaEsternadati_generali("CodSocieta")
    yo(I1, 3) = TabellaEsternadati_generali("Tempo")
    yo(I1, 4) = TabellaEsternadati_generali("Km")
    yo(I1, 5) = TabellaEsternadati_generali("Societa")
    yo(I1, 6) = TabellaEsternadati_generali("Posizione")
    yo(I1, 7) = TabellaEsternadati_generali("Dorsale1")
    yo(I1, = TabellaEsternadati_generali("Atleta1")
    yo(I1, 9) = TabellaEsternadati_generali("Categoria1")
    yo(I1, 10) = TabellaEsternadati_generali("Dorsale2")
    yo(I1, 11) = TabellaEsternadati_generali("Atleta2")
    yo(I1, 12) = TabellaEsternadati_generali("Categoria2")
    yo(I1, 13) = TabellaEsternadati_generali("Dorsale3")
    yo(I1, 14) = TabellaEsternadati_generali("Atleta3")
    yo(I1, 15) = TabellaEsternadati_generali("Categoria3")
    yo(I1, 16) = TabellaEsternadati_generali("Dorsale4")
    yo(I1, 17) = TabellaEsternadati_generali("Atleta4")
    yo(I1, 18) = TabellaEsternadati_generali("Categoria4")
    yo(I1, 19) = TabellaEsternadati_generali("Dorsale5")
    yo(I1, 20) = TabellaEsternadati_generali("Atleta5")
    yo(I1, 21) = TabellaEsternadati_generali("Categoria5")
    yo(I1, 22) = TabellaEsternadati_generali("Dorsale6")
    yo(I1, 23) = TabellaEsternadati_generali("Atleta6")
    yo(I1, 24) = TabellaEsternadati_generali("Categoria6")
    yo(I1, 25) = TabellaEsternadati_generali("Dorsale7")
    yo(I1, 26) = TabellaEsternadati_generali("Atleta7")
    yo(I1, 27) = TabellaEsternadati_generali("Categoria7")
    yo(I1, 28) = TabellaEsternadati_generali("Dorsale8")
    yo(I1, 29) = TabellaEsternadati_generali("Atleta8")
    yo(I1, 30) = TabellaEsternadati_generali("Categoria8")
    yo(I1, 31) = TabellaEsternadati_generali("Dorsale9")
    yo(I1, 32) = TabellaEsternadati_generali("Atleta9")
    yo(I1, 33) = TabellaEsternadati_generali("Categoria9")
    yo(I1, 34) = TabellaEsternadati_generali("Dorsale10")
    yo(I1, 35) = TabellaEsternadati_generali("Atleta10")
    yo(I1, 36) = TabellaEsternadati_generali("Categoria10")
    yo(I1, 37) = TabellaEsternadati_generali("Fascia")
    yo(I1, 38) = "flag"
    yo(I1, 39) = TabellaEsternadati_generali("OraPartenza")
    yo(I1, 40) = TabellaEsternadati_generali("OraArrivo")
    yo(I1, 41) = TabellaEsternadati_generali("ScartoPartenza")
    GoTo ecco
    End If




    yo(I1, 1) = TabellaEsternadati_generali("ID")
    yo(I1, 2) = TabellaEsternadati_generali("NTesserato")
    yo(I1, 3) = TabellaEsternadati_generali("Dorsale")
    yo(I1, 4) = "flag"
    yo(I1, 5) = ""

    If yg(i, 6) <> "Pista" And yg(i, 6) <> "Cronosquadre" Then
    yo(I1, 6) = TabellaEsternadati_generali("Categoria")
    yo(I1, 7) = TabellaEsternadati_generali("Posizione")
    yo(I1, = TabellaEsternadati_generali("Tempo")
    yo(I1, 9) = TabellaEsternadati_generali("Km")
    yo(I1, 10) = TabellaEsternadati_generali("Punti")
    yo(I1, 11) = TabellaEsternadati_generali("OraPartenza")
    yo(I1, 12) = TabellaEsternadati_generali("OraArrivo")
    yo(I1, 13) = TabellaEsternadati_generali("ScartoPartenza")
    End If

    If yg(i, 6) = "Pista" Then
    yo(I1, 6) = TabellaEsternadati_generali("Categoria")
    yo(I1, 7) = TabellaEsternadati_generali("Inseguimento3000")
    yo(I1, = TabellaEsternadati_generali("Inseguimento2000")
    yo(I1, 9) = TabellaEsternadati_generali("Km")
    yo(I1, 10) = TabellaEsternadati_generali("c750")
    yo(I1, 11) = TabellaEsternadati_generali("c500")
    yo(I1, 42) = TabellaEsternadati_generali("c200")
    yo(I1, 43) = TabellaEsternadati_generali("Scratch1")
    yo(I1, 44) = TabellaEsternadati_generali("Scratch2")
    yo(I1, 12) = TabellaEsternadati_generali("GaraPunti1")
    yo(I1, 13) = TabellaEsternadati_generali("GaraPunti2")
    End If
    e scritti nel db di destinazione qui sempre in base al tipo di gara.
    
    For I1 = 0 To p - 1
        If yg(i, 6) <> "Pista" And yg(i, 6) <> "Cronosquadre" Then
        
            If yo(I1, 4) <> "" Then
                
                qry2 = qry6 & " WHERE ID=" & yo(I1, 1)
                qry7 = qry3 & " WHERE ID=" & yo(I1, 1)
                
                Set TabellaEsternadati_generali = DBEsterno.OpenRecordset(qry7, dbOpenDynaset)
                Set TabellaDati_Generali = DBCorrente.OpenRecordset(qry2, dbOpenDynaset)
                TabellaDati_Generali.AddNew
                TabellaDati_Generali.Fields("NTesserato") = yo(I1, 5)
                TabellaDati_Generali.Fields("Dorsale") = yo(I1, 3)
                TabellaDati_Generali.Fields("Categoria") = yo(I1, 6)
                TabellaDati_Generali.Fields("Posizione") = yo(I1, 7)
                TabellaDati_Generali.Fields("Tempo") = yo(I1, 8)
                TabellaDati_Generali.Fields("Km") = yo(I1, 9)
                TabellaDati_Generali.Fields("Punti") = yo(I1, 10)
                TabellaDati_Generali.Fields("OraPartenza") = yo(I1, 11)
                TabellaDati_Generali.Fields("OraArrivo") = yo(I1, 12)
                TabellaDati_Generali.Fields("ScartoPartenza") = yo(I1, 13)
                TabellaDati_Generali.Update
                TabellaDati_Generali.Close
                TabellaEsternadati_generali.Close
    
            End If
        End If
        
        If yg(i, 6) = "Pista" Then
            If yo(I1, 4) <> "" Then
            
                qry2 = qry6 & " WHERE ID=" & yo(I1, 1)
                qry7 = qry3 & " WHERE ID=" & yo(I1, 1)
                Set TabellaEsternadati_generali = DBEsterno.OpenRecordset(qry7, dbOpenDynaset)
                Set TabellaDati_Generali = DBCorrente.OpenRecordset(qry2, dbOpenDynaset)
                TabellaDati_Generali.AddNew
                TabellaDati_Generali.Fields("NTesserato") = yo(I1, 5)
                TabellaDati_Generali.Fields("Dorsale") = yo(I1, 3)
                TabellaDati_Generali.Fields("Categoria") = yo(I1, 6)
                TabellaDati_Generali.Fields("Inseguimento3000") = yo(I1, 7)
                TabellaDati_Generali.Fields("Inseguimento2000") = yo(I1, 8)
                TabellaDati_Generali.Fields("Km") = yo(I1, 9)
                TabellaDati_Generali.Fields("c750") = yo(I1, 10)
                TabellaDati_Generali.Fields("c500") = yo(I1, 11)
                TabellaDati_Generali.Fields("c200") = yo(I1, 42)
                TabellaDati_Generali.Fields("Scratch1") = yo(I1, 43)
                TabellaDati_Generali.Fields("Scratch2") = yo(I1, 44)
                TabellaDati_Generali.Fields("GaraPunti1") = yo(I1, 12)
                TabellaDati_Generali.Fields("GaraPunti2") = yo(I1, 13)
                TabellaDati_Generali.Update
                TabellaDati_Generali.Close
                TabellaEsternadati_generali.Close
            End If
        End If
    Next I1
    
    
    fig:
    Next i
    
    
    
    Il problema è che se lancio le routine di creazione tabella una sola volta, crea le tabelle ma no ci scrive i dati, richiamandole la seconda volta si genera il msgbox e all'interazione con questo mediante pressione del tasto Ok i dati vengono caricati.
    Se il db di destinazione però è vuoto, tutto funziona a meraviglia, il problema si pone se in db già popolato, devo importare solo alcune tabelle…
    Spero di essere riuscito a spiegarmi senza postare tutto il codice, sono migliaia di righe!
    Grazie mille
    Ps.: ovvio che il codice non è ottimizzato ecc.. ma purtroppo non ho il tempo necessario per una revisione completa
Devi accedere o registrarti per scrivere nel forum
4 risposte