Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Pagina 2 di 2 primaprima 12
Visualizzazione dei risultati da 11 a 18 su 18

Riempire campi vuoti

  1. #11
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Post
    16,802
    Like Inviati  
    0
    Like Ricevuti  
    23
    Non ho capito... impiega 1 ora per processare 8000 C.F. ....?
    Mostra il codice... in meno di 1 minuto dovrebbe farli tutti.
    ℹ️ Leggi di più su @Alex ...

  2. #12
    Found non è in linea Novello
    Post
    9
    Like Inviati  
    0
    Like Ricevuti  
    0
    Quote Originariamente inviato da @Alex Visualizza il messaggio
    Non ho capito... impiega 1 ora per processare 8000 C.F. ....?
    Mostra il codice... in meno di 1 minuto dovrebbe farli tutti.
    Option Compare Database
    
    Private Sub Comando0_Click()
    Dim db As DAO.database
    Set db = CurrentDb
    Dim rs As Recordset, ps As Recordset, n As String
    
    Set rs = db.OpenRecordset("TB1")
    Set ps = db.OpenRecordset("TB2")
    
    rs.MoveFirst
    Do Until rs.EOF
    
    If IsNull(rs!DataPren) Then
    rs.MoveNext
    End if
    
    
        ps.MoveFirst
        Do Until ps.EOF
            If ps!CodFisc = rs!CodFisc And IsNull(ps!CodFisc) Then
            ps.Edit
            ps!DataInizio = rs!DataInizio
            ps!Categoria = rs!Categoria
            ps.Update
            End If
        
        ps.MoveNext
            'If ps!CodFisc <> rs!CodFisc Then Exit Do
            
        Loop
        
    rs.MoveNext
    Loop
    
    ps.Close
    rs.Close
    
    Set ps = Nothing
    Set rs = Nothing
    
    
    End Sub
    

  3. #13
    L'avatar di gibra
    gibra non è in linea Very Important Person
    Post
    6,232
    Like Inviati  
    19
    Like Ricevuti  
    11
    Quote Originariamente inviato da Found Visualizza il messaggio
    A questo punto si manifesta il problema della velocità ....
    Non si fanno cicli per fare aggiornamenti in massa. Pensa se tu avessi milioni di record!!!

    Come dice @Alex, si fa una query di UPDATE.
    Se vi sono più tabelle interessate si usa un query di UPDATE con JOIN:
    SQL Server UPDATE JOIN Explained By Practical Examples
    https://www.sqlservertutorial.net/sq...r-update-join/

    Quote Originariamente inviato da Found Visualizza il messaggio
    sono oltre 10 anni che non mi avvicino al vba, e sono fortemente arruginito!
    Il VBA non c'entra nulla, è una questione da risolvere SQL.

    Quote Originariamente inviato da Found Visualizza il messaggio
    In pratica se il campo è vuoto deve essere valorizzato con il valore del corrispondente record ‘Fine’.
    In tal modo sarà possibile calcolare i giorni lavorati.
    Scusa, ma non capisco; in quale modo se hai solo la data di Fine?


    Riesci ad esportare la/le tabella/e su dei fogli Excel e linkarli per il download?
    Ultima modifica di gibra; 09-02-2021 10:04 
    ℹ️ Leggi di più su gibra ...

  4. #14
    L'avatar di dragone bianco
    dragone bianco non è in linea Amanuense
    Post
    7,753
    Like Inviati  
    0
    Like Ricevuti  
    2
    Ciao

    Errore e nella secondo LOOP

    o usi un find per cercare i record interessati

    o crei una query filtrata in base al CF

    Dim SQL_Code as string
    sql_Code="Select * "
    sql_Code= sql_Code & " From TB2"
    sql_Code= sql_Code & " Where TB2.cf='" & rs.fileds(CF) & "'"
    
    Set ps = db.OpenRecordset("sql_Code")
        Do Until ps.EOF
            If ps!CodFisc = rs!CodFisc And IsNull(ps!CodFisc) Then
            ps.Edit
            ps!DataInizio = rs!DataInizio
            ps!Categoria = rs!Categoria
            ps.Update
            End If
         
        ps.MoveNext
        Loop
    
    Questo è da inserire al posto del secondo LOOP
    Così facendo
    per ogni CF esegui una 2° query solo con i campi necessari e non i tuoi 2200
    ℹ️ Leggi di più su dragone bianco ...

  5. #15
    Found non è in linea Novello
    Post
    9
    Like Inviati  
    0
    Like Ricevuti  
    0
    Quote Originariamente inviato da dragone bianco Visualizza il messaggio
    Ciao

    Errore e nella secondo LOOP

    o usi un find per cercare i record interessati

    o crei una query filtrata in base al CF

    Dim SQL_Code as string
    sql_Code="Select * "
    sql_Code= sql_Code & " From TB2"
    sql_Code= sql_Code & " Where TB2.cf='" & rs.fileds(CF) & "'"
    
    Set ps = db.OpenRecordset("sql_Code")
        Do Until ps.EOF
            If ps!CodFisc = rs!CodFisc And IsNull(ps!CodFisc) Then
            ps.Edit
            ps!DataInizio = rs!DataInizio
            ps!Categoria = rs!Categoria
            ps.Update
            End If
         
        ps.MoveNext
        Loop
    
    Questo è da inserire al posto del secondo LOOP
    Così facendo
    per ogni CF esegui una 2° query solo con i campi necessari e non i tuoi 2200
    Grazie Dragone Bianco.
    La proverò senz’altro ...studiandola al tempo stesso.

    Preciso di essere partito da un file contenente 8.500.000 records.
    Mi Potevo sparare se non avessi filtrato per sottogruppi di circa 100.000 records ciascuno.
    Questo ad esempio ne raggiungeva 77000 che su suggerimento di Alex ho scomposto in 22000 e 55000.

    Grazie davvero. Ho tribolato parecchio, anche se a detta di molti era da considerare quasi una banalità.

    Domani, tenterò di mettere in essere anche la tua soluzione.
    Buona serata

  6. #16
    Found non è in linea Novello
    Post
    9
    Like Inviati  
    0
    Like Ricevuti  
    0
    Non mi permetterei di correggere un maestro, ma chiedere chiarimenti si.
    C’è forse una svista nel tuo codice?
    Lo riscrivo ...
     Dim SQL_Code as string
    sql_Code="Select * "
    sql_Code= sql_Code & " From TB2"
    sql_Code= sql_Code & " Where TB2.CodFisc='" & rs.fields(CodFisc) & "'"
     
    Set ps = db.OpenRecordset("sql_Code")
        Do Until ps.EOF
            If ps!CodFisc = rs!CodFisc And IsNull(ps!DataInizio) Then
            ps.Edit
            ps!DataInizio = rs!DataInizio
            ps!Categoria = rs!Categoria
            ps.Update
            End If
          
        ps.MoveNext
        Loop
    

  7. #17
    L'avatar di Max.Riservo
    Max.Riservo non è in linea Scribacchino
    Post
    744
    Like Inviati  
    1
    Like Ricevuti  
    2
    Se vuoi ulteriormente velocizzare l'esecuzione utilizza una transazione e subordina il commit della stessa ogni x update (p.e. ogni 100 update) : vedrai la drastica riduzione del tempo di esecuzione.
    PS - prevedi anche il DoEvents()

  8. #18
    L'avatar di dragone bianco
    dragone bianco non è in linea Amanuense
    Post
    7,753
    Like Inviati  
    0
    Like Ricevuti  
    2
    Quote Originariamente inviato da Found Visualizza il messaggio
    Set ps = db.OpenRecordset("sql_Code")
    Hai Ragione
    sql_Code non è tra virgolette, è una variabile
    rs.fields(CodFisc)
    
    Codfisc è da mettere tra virgolette (è il nome del Campo)
    Mea Culpa

    Ciao
    ℹ️ Leggi di più su dragone bianco ...

+ Rispondi al messaggio
Pagina 2 di 2 primaprima 12

Potrebbero interessarti anche ...

  1. Campi Vuoti
    Da leondoro nel forum Microsoft Access
    Risposte: 14
    Ultimo Post: 10-11-2015, 14:18
  2. Cerca campi vuoti
    Da Archimed3 nel forum Microsoft Access
    Risposte: 1
    Ultimo Post: 04-05-2013, 13:56
  3. Riempire campi pagine Web
    Da panatronic nel forum Visual Basic .Net
    Risposte: 1
    Ultimo Post: 12-01-2010, 02:05
  4. riempire variabili da campi di un solo record
    Da panatronic nel forum Visual Basic .Net
    Risposte: 16
    Ultimo Post: 15-05-2008, 19:28
  5. campi vuoti
    Da marinaio nel forum Visual Basic 6
    Risposte: 7
    Ultimo Post: 13-06-2005, 12:31