+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19

Discussione: Problema assegnazione recordset

  1. #1
    camp non è in linea Scolaretto
    Post
    71

    Problema assegnazione recordset

    Buongiorno a tutti
    ho un "piccolo" problema che mi sta facendo perdere un sacco di tempo e la testa…
    Ho una routine che fonde due file access creati tramite il software in questione, creando nel database di arrivo le tabelle mancanti e inserendo in quelle esistenti i record che non ci sono.
    Nelle varie tabelle ci sono riferimenti a record presenti in altre con indici che puntano ai vari record.
    Ad esempio abbiamo la tabella "nomi" che contiene i nominativi, e nei record della tabella "attività" abbiamo una data, un luogo e l'Id del nome che ha partecipato all'attività.
    Quando incrocio i dati, ovviamente ho la tabella "nomi" presente sia nel DB sorgente che in quello di destinazione, e le varie tabelle di attività: se una di queste non esiste, la creo e ci butto i dati di quella di origine, controllando che gli Id di "Nomi" puntino allo stesso nominativo, quindi che l'ID della tabella di destinazione corrisponda ad esempio a Mario Rossi.
    Il problema è che se importo il tutto in un db nuovo e creato ad hoc, tutto funziona, ma se cerco di importare i dati in uno esistente, funziona tutto meco che…
    Riesco a creare la nuova tabella "attività", ma non mi carica i dati da quella di origine, e questo alla prima esecuzione della routine.
    Se però esco dal software , e a questo punto nel db destinazione ho la tabella corrispondente vuota, e rifaccio la procedura, la seconda volta ovviamente non mi ricrea la tabella in quanto esistente, e mi carica tutti i dati incrociando i vari id della altre tabelle, arrivando così al db finale completo e come deve essere.
    Qualcuno ha idea del perché la prima volta l'assegnazione recordset("aaa").field=dato non assegni i valori e la seconda volta tutto funziona correttamente?
    Grazie mille per l'attenzione

  2. #2
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,310
    Blogs
    5
    Non è che si sia capito molto ... a partire dal titolo ... i recordset non si assegnano.
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  3. #3
    camp non è in linea Scolaretto
    Post
    71
    Il titolo potrebbe essere "Assegnazione dati ad un record in un database access in una tabella appena creata".
    Il nocciolo della questione è che se creo una tabella in un database access tramite vb6, al primo colpo se il database esiste già, creo la tabella ma non riesco a riempirla utilizzando dati proveniente da un altro database, e se rifaccio l'operazione quindi con la tabella creata in precedenza l'operazione va a buon fine, il tutto eseguendo sempre lo stesso codice.
    Quello che non funziona, anche se non genera messaggi d'errore è l'istruzione TabellaDati_Generali.Fields(dorsale_atleta) = atleta(H, punta_determina - 1, 4), che dopo un .update non inserisci i dati nel db: come detto alla ripetizione della medesima istruzione, quindi una seconda volta, il tutto funziona!
    Se qualcuno ha qualche idea.
    Sto perdendo un sacco di tempo per una cosa apparentemente senza senso…
    Grazie mille a tutti per l'attenzione

  4. #4
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,310
    Blogs
    5
    Posta tutto il codice, dalla creazione tabella all'inserimento sul forum usandol i tag code
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  5. #5
    camp non è in linea Scolaretto
    Post
    71
    Dove nei vettori yo e atleta sono memorizzati i dati provenienti dal database di origine, mentre dbcorrente è la destinazione




    codice:
    
    Set TabellaDati_Generali = DBCorrente.OpenRecordset(qry6, dbOpenDynaset)
    
    
    
            If yo(H, 38) <> "" Then
                qry2 = qry6 & " WHERE ID=" & yo(H, 1)
                qry7 = qry3 & " WHERE ID=" & yo(H, 1)
                
                Set TabellaEsternadati_generali = DBEsterno.OpenRecordset(qry7, dbOpenDynaset)
                Set TabellaDati_Generali = DBCorrente.OpenRecordset(qry2, dbOpenDynaset)
                TabellaDati_Generali.AddNew
                TabellaDati_Generali.Fields("CodSocieta") = yo(H, 2)
                TabellaDati_Generali.Fields("Tempo") = yo(H, 3)
                TabellaDati_Generali.Fields("Km") = yo(H, 4)
                TabellaDati_Generali.Fields("Societa") = yo(H, 5)
                TabellaDati_Generali.Fields("Posizione") = yo(H, 6)
                TabellaDati_Generali.Fields("Fascia") = yo(H, 37)
                TabellaDati_Generali.Fields("OraPartenza") = yo(H, 39)
                TabellaDati_Generali.Fields("OraArrivo") = yo(H, 40)
                TabellaDati_Generali.Fields("ScartoPartenza") = yo(H, 41)
                
                numerat = 1
                
                For punta_determina = 8 To 36 Step 3
                    If atleta(H, punta_determina, 2) <> "" Then
                        numero_atleta = "Atleta" & numerat
                        dorsale_atleta = "Dorsale" & numerat
                        categoria_atleta = "Categoria" & numerat
                        TabellaDati_Generali.Fields(dorsale_atleta) = atleta(H, punta_determina - 1, 4)
                        TabellaDati_Generali.Fields(numero_atleta) = atleta(H, punta_determina, 1)
                        TabellaDati_Generali.Fields(categoria_atleta) = atleta(H, punta_determina + 1, 5)
                     
                        numerat = numerat + 1
                    End If
               Next punta_determina
                TabellaDati_Generali.Update
                TabellaDati_Generali.Close
                TabellaEsternadati_generali.Close
                
            End If
    Ultima modifica di AntonioG; 23-10-2019 19:45  Motivo: Ti avevi detto di usare i tag code non quote

  6. #6
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,310
    Blogs
    5
    Devi usare i tag Code e non Quote per il codice.

    Cosa è qry6?
    Dove viene creata la tabella?
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  7. #7
    camp non è in linea Scolaretto
    Post
    71
    qry6 è la query che punta alla tabella appena creata

    qry6 = "SELECT * FROM " & nomegara


    codice:
    
    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
    Dim col16 As New ADOX.Column
    Dim col17 As New ADOX.Column
    Dim col18 As New ADOX.Column
    Dim col19 As New ADOX.Column
    Dim col20 As New ADOX.Column
    Dim col21 As New ADOX.Column
    Dim col22 As New ADOX.Column
    Dim col23 As New ADOX.Column
    Dim col24 As New ADOX.Column
    Dim col25 As New ADOX.Column
    Dim col26 As New ADOX.Column
    Dim col27 As New ADOX.Column
    Dim col28 As New ADOX.Column
    Dim col29 As New ADOX.Column
    Dim col30 As New ADOX.Column
    Dim col31 As New ADOX.Column
    Dim col32 As New ADOX.Column
    Dim col33 As New ADOX.Column
    Dim col34 As New ADOX.Column
    Dim col35 As New ADOX.Column
    Dim col36 As New ADOX.Column
    Dim col37 As New ADOX.Column
    Dim col38 As New ADOX.Column
    Dim col39 As New ADOX.Column
    
    On Error GoTo errhandler
    On Error Resume Next
    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
    
    With col6
          .Name = "Dorsale1"
          .Type = adVarWChar
          .DefinedSize = 4
          .Attributes = adColNullable
          End With
    ADOXtable.Columns.Append col6
    Set cat = Nothing
    With col7
          .Name = "Atleta1"
          .Type = adVarWChar
          .DefinedSize = 10
          .Attributes = adColNullable
          End With
    ADOXtable.Columns.Append col7
    Set cat = Nothing
    
    With col8
          .Name = "Categoria1"
          .Type = adVarWChar
          .DefinedSize = 10
          .Attributes = adColNullable
          End With
    ADOXtable.Columns.Append col8
    Set cat = Nothing
    
    
    With col9
          .Name = "Dorsale2"
          .Type = adVarWChar
          .DefinedSize = 4
          .Attributes = adColNullable
          End With
    ADOXtable.Columns.Append col9
    Set cat = Nothing
    With col10
          .Name = "Atleta2"
          .Type = adVarWChar
          .DefinedSize = 10
          .Attributes = adColNullable
          End With
    ADOXtable.Columns.Append col10
    
    Set cat = Nothing
    
    With col11
          .Name = "Categoria2"
          .Type = adVarWChar
          .DefinedSize = 10
          .Attributes = adColNullable
          End With
    ADOXtable.Columns.Append col11
    Set cat = Nothing
    
    With col12
          .Name = "Dorsale3"
          .Type = adVarWChar
          .DefinedSize = 4
          .Attributes = adColNullable
          End With
    ADOXtable.Columns.Append col12
    Set cat = Nothing
    With col13
          .Name = "Atleta3"
          .Type = adVarWChar
          .DefinedSize = 10
          .Attributes = adColNullable
          End With
    ADOXtable.Columns.Append col13
    Set cat = Nothing
    
    With col14
          .Name = "Categoria3"
          .Type = adVarWChar
          .DefinedSize = 10
          .Attributes = adColNullable
          End With
    ADOXtable.Columns.Append col14
    Set cat = Nothing
    
    With col15
          .Name = "Dorsale4"
          .Type = adVarWChar
          .DefinedSize = 4
          .Attributes = adColNullable
          End With
    ADOXtable.Columns.Append col15
    Set cat = Nothing
    With col16
          .Name = "Atleta4"
          .Type = adVarWChar
          .DefinedSize = 10
          .Attributes = adColNullable
          End With
    ADOXtable.Columns.Append col16
    Set cat = Nothing
    
    With col17
          .Name = "Categoria4"
          .Type = adVarWChar
          .DefinedSize = 10
          .Attributes = adColNullable
          End With
    ADOXtable.Columns.Append col17
    Set cat = Nothing
    
    
    With col18
          .Name = "Dorsale5"
          .Type = adVarWChar
          .DefinedSize = 4
          .Attributes = adColNullable
          End With
    ADOXtable.Columns.Append col18
    Set cat = Nothing
    With col19
          .Name = "Atleta5"
          .Type = adVarWChar
          .DefinedSize = 10
          .Attributes = adColNullable
          End With
    ADOXtable.Columns.Append col19
    Set cat = Nothing
    
    With col20
          .Name = "Categoria5"
          .Type = adVarWChar
          .DefinedSize = 10
          .Attributes = adColNullable
          End With
    ADOXtable.Columns.Append col20
    Set cat = Nothing
    
    
    With col21
          .Name = "Dorsale6"
          .Type = adVarWChar
          .DefinedSize = 4
          .Attributes = adColNullable
          End With
    ADOXtable.Columns.Append col21
    Set cat = Nothing
    With col22
          .Name = "Atleta6"
          .Type = adVarWChar
          .DefinedSize = 10
          .Attributes = adColNullable
          End With
    ADOXtable.Columns.Append col22
    Set cat = Nothing
    
    With col23
          .Name = "Categoria6"
          .Type = adVarWChar
          .DefinedSize = 10
          .Attributes = adColNullable
          End With
    ADOXtable.Columns.Append col23
    Set cat = Nothing
    
    With col24
          .Name = "Dorsale7"
          .Type = adVarWChar
          .DefinedSize = 4
          .Attributes = adColNullable
          End With
    ADOXtable.Columns.Append col24
    Set cat = Nothing
    With col25
          .Name = "Atleta7"
          .Type = adVarWChar
          .DefinedSize = 10
          .Attributes = adColNullable
          End With
    ADOXtable.Columns.Append col25
    Set cat = Nothing
    
    
    With col26
          .Name = "Categoria7"
          .Type = adVarWChar
          .DefinedSize = 10
          .Attributes = adColNullable
          End With
    ADOXtable.Columns.Append col26
    Set cat = Nothing
    
    With col27
          .Name = "Dorsale8"
          .Type = adVarWChar
          .DefinedSize = 4
          .Attributes = adColNullable
          End With
    ADOXtable.Columns.Append col27
    Set cat = Nothing
    With col28
          .Name = "Atleta8"
          .Type = adVarWChar
          .DefinedSize = 10
          .Attributes = adColNullable
          End With
    ADOXtable.Columns.Append col28
    Set cat = Nothing
    
    
    With col29
          .Name = "Categoria8"
          .Type = adVarWChar
          .DefinedSize = 10
          .Attributes = adColNullable
          End With
    ADOXtable.Columns.Append col29
    Set cat = Nothing
    
    With col30
          .Name = "Dorsale9"
          .Type = adVarWChar
          .DefinedSize = 4
          .Attributes = adColNullable
          End With
    ADOXtable.Columns.Append col30
    Set cat = Nothing
    With col31
          .Name = "Atleta9"
          .Type = adVarWChar
          .DefinedSize = 10
          .Attributes = adColNullable
          End With
    ADOXtable.Columns.Append col31
    Set cat = Nothing
    
    With col32
          .Name = "Categoria9"
          .Type = adVarWChar
          .DefinedSize = 10
          .Attributes = adColNullable
          End With
    ADOXtable.Columns.Append col32
    Set cat = Nothing
    
    With col33
          .Name = "Dorsale10"
          .Type = adVarWChar
          .DefinedSize = 4
          .Attributes = adColNullable
          End With
    ADOXtable.Columns.Append col33
    Set cat = Nothing
    With col34
          .Name = "Atleta10"
          .Type = adVarWChar
          .DefinedSize = 10
          .Attributes = adColNullable
          End With
    ADOXtable.Columns.Append col34
    Set cat = Nothing
    
    With col35
          .Name = "Categoria10"
          .Type = adVarWChar
          .DefinedSize = 10
          .Attributes = adColNullable
          End With
    ADOXtable.Columns.Append col35
    Set cat = Nothing
    
    
    
    With col36
          .Name = "Fascia"
          .Type = adVarWChar
          .DefinedSize = 80
          .Attributes = adColNullable
          End With
    ADOXtable.Columns.Append col36
    Set cat = Nothing
    
    With col37
          .Name = "OraPartenza"
          .Type = adVarWChar
          .DefinedSize = 30
          .Attributes = adColNullable
    End With
    ADOXtable.Columns.Append col37
    Set cat = Nothing
    With col38
          .Name = "OraArrivo"
          .Type = adVarWChar
          .DefinedSize = 30
          .Attributes = adColNullable
    End With
    ADOXtable.Columns.Append col38
    Set cat = Nothing
    With col39
          .Name = "ScartoPartenza"
          .Type = adVarWChar
          .DefinedSize = 30
          .Attributes = adColNullable
    End With
    ADOXtable.Columns.Append col39
    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

  8. #8
    L'avatar di Brontolo
    Brontolo non è in linea Very Important Person
    Post
    2,851
    L' Update dovresti farlo per ogni record che aggiungi.
    A parte questo, sarebbe molto più semplice usare l' SQL sia per creare la tabella, sia per inserirci i records.
    E poi, questo "stile" di travasare intere tabelle o parte di esse da un database ad un altro non mi convince, ma non conoscendo il contesto non posso dire di più.
    E infine: l' On Error Resume Next certamente non ti aiuta, e non si capisce a cosa servano le variabili che crei all'interno del ciclo For...Next.
    Il regolamento del forum: la prima cosa da leggere.

  9. #9
    camp non è in linea Scolaretto
    Post
    71
    Quote Originariamente inviato da Brontolo Visualizza il messaggio
    L' Update dovresti farlo per ogni record che aggiungi.
    A parte questo, sarebbe molto più semplice usare l' SQL sia per creare la tabella, sia per inserirci i records.
    E poi, questo "stile" di travasare intere tabelle o parte di esse da un database ad un altro non mi convince, ma non conoscendo il contesto non posso dire di più.
    E infine: l' On Error Resume Next certamente non ti aiuta, e non si capisce a cosa servano le variabili che crei all'interno del ciclo For...Next.
    Grazie della risposta Brontolo.
    L'update viene effettivamente fatto per ogni record, il travaso è necessario in quanto su questo software e relative tabelle, ci possono lavorare ance due/tre operatori al giorno in luoghi diversi, ed alla sera deve uscirne una sintesi per tenere traccia del lavoro fatto: spiegare qui perché richiederebbe pagine e pagine…
    Le variabili sono nient'altro che i dati di origine che devono confluire nel db destinazione, ed anche qui spiegarne uno per uno diventerebbe lunga.
    Essendo un vecchio programmatore, apro e crea le tabelle nell'unico modo che conosco, e certamente è un mio limite, ma purtroppo non conosco altro modo.
    Quello che non mi torna è che alla seconda esecuzione dello stesso codice, quindi come già detto con la tabella già creata nel primo passaggio, tutto funziona, idem se faccio girare la routine partendo da un database vuoto, ma se il db è già popolato sorge questo problema, e a tutto ciò non so dare un perché, e quindi risolvere il busillis…

  10. #10
    L'avatar di Brontolo
    Brontolo non è in linea Very Important Person
    Post
    2,851
    Quote Originariamente inviato da camp Visualizza il messaggio
    L'update viene effettivamente fatto per ogni record,
    Non mi sembra, visto che è fuori dal ciclo For...Next
    Quote Originariamente inviato da camp Visualizza il messaggio
    Le variabili sono nient'altro che i dati di origine che devono confluire nel db destinazione, ed anche qui spiegarne uno per uno diventerebbe lunga,
    numero_atleta, dorsale_atleta e categoria_atleta vengono impostate e non vengono riutilizzate.
    Quote Originariamente inviato da camp Visualizza il messaggio
    Essendo un vecchio programmatore
    Questo lo avevo immaginato.
    Quote Originariamente inviato da camp Visualizza il messaggio
    apro e crea le tabelle nell'unico modo che conosco, e certamente è un mio limite, ma purtroppo non conosco altro modo.
    Il linguaggio SQl permette di manipolare i dati contenuti nelle tabelle del db ed anche la struttura delle tabelle stesse. Vale la pena documentarsi su istruzioni come CREATE TABLE.... , ADD FIELD... e compagni
    Il regolamento del forum: la prima cosa da leggere.

+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi