Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 10 su 10

Query di comando parzialmente non eseguite

  1. #1
    Sergio Mazza non è in linea Novello
    Post
    18
    Like Inviati  
    1
    Like Ricevuti  
    0
    Ciao Tutti

    mi sto imbattendo in varie stranezze di Access versione 365 (un giorno le riunisco e ve le invio), una di queste è la mancata esecuzione di query di comando.

    Ho una stringa strSQL che compilo e poi la passo alla Currentdb.Execute; con la stessa procedura (variabile stringa compilata passata alla Execute) ne eseguo un'altra di istruzione SQL.
    Entrambi sono Insert Into; su due tabelle differenti; tabelle collegate (dello stesso db); file access in formato accdb; solo che...
    La prima Execute va come una spada; la seconda scrive solo un record, l'ultimo.
    Se blocco il codice ed eseguo il debug; vado passo-passo (F8); la tabella si riempie e quindi i record vengono scritti. Ma se tolgo il blocco e rieseguo il codice nella tabella trovo solo l'ultimo record.

    La "struttura" delle chiamate è questa:
    [routine A]
    do qualcosa
    ...
    Currentdb.Execute strSQL
    ...
    chiamata alla sub [routine B]
    ...
    loop
    [end routine A]

    [routine B]
    do qualcosa
    ...
    Currentdb.Execute strSQL
    ...
    loop
    [end routine B]

    La Execute in routine B è quella incriminata, quella in A funziona benissimo (sgrat! sgrat!).

    Ora ho provato:
    - con la creazione di una query parametrica
    - cambiando la Currentdb con la dichiarazione DAO (https://masterdrive.it/microsoft-acc...0-0-a-95051/);
    - creando un recordset (AddNew/Update)
    - inserendo dopo la Execute un DoEvents
    - inserendo dopo la Execute una pausa di 10sec.
    - chiudendo e riaprendo il db
    - chiudendo e riaprendo il pc
    - chiudendo e riaprendo la porta di casa
    - ...??

    Ad aumentare la già vasta confusione è che TUTTI e sottolineo TUTTI i tentativi sopra effettuati vanno a buon fine in alcune "condizioni" scrivendo 1 o max 3 record!

    Preso dallo sconforto ho risolto con un bel file di testo, ma se possibile vorrei capire dov'è l'errore.

    Grazie.
    ℹ️ Leggi di più su Sergio Mazza ...

  2. #2
    OsvaldoLaviosa non è in linea Topo di biblioteca
    Post
    3,069
    Like Inviati  
    0
    Like Ricevuti  
    0
    Senza vedere il codice completo è impossibile sapere dov'è l'errore. Mi raccomando racchiudilo entro i TAG-CODE.
    ℹ️ Leggi di più su OsvaldoLaviosa ...

  3. #3
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,743
    Like Inviati  
    0
    Like Ricevuti  
    18
    Fatico a seguire nel concreto, mi verrebbe da pensare all'accesso non sincronizzato dei dati...
    Il link che hai inserito non è riconosciuto... ma ovviamente usare CurrentDb in modo ripetuto non è il massimo, dichiara una variabile come DAO.Database ed assegna CurrentDb, poi usa sempre quella...
    Diciamo che le 2 procedure sicuramente agiscono sui dati... ma non si comprende come ed a che livello.

    Valuta, sempre sia il caso, di inglobare tutto in una transazione.
    ℹ️ Leggi di più su @Alex ...

  4. #4
    Post
    1,816
    Like Inviati  
    0
    Like Ricevuti  
    4
    Quote Originariamente inviato da Sergio Mazza Visualizza il messaggio
    ...
    Preso dallo sconforto ho risolto con un bel file di testo, ma se possibile vorrei capire dov'è l'errore.
    Insieme al codice pubblica anche le SQL.
    La stessa cosa che non ti riesce con le query funziona con un file di testo? Ce la spieghi questa?

  5. #5
    Sergio Mazza non è in linea Novello
    Post
    18
    Like Inviati  
    1
    Like Ricevuti  
    0
    Rispondo a tutti

    Il codice non fa nulla di speciale e neanche di segreto; sono due insert into con la prima, che funziona sempre, in [routine A]
    INSERT INTO Cartellino (idTesserino, giorno, entrata, uscita, orelavorate, compenso) VALUES (9,#12/02/2020#,#02/12/2020 14:45:00#,#02/12/2020 21:00:00#,#12/02/2020 06:15:00#,78.125);
    
    la seconda, in [routine B] è:
    INSERT INTO CartellinoDettaglio (idTesserino, entrata, uscita, orelavorate, compenso, costoFascia, orarioFasciaDal, orarioFasciaAl) VALUES (9,'23/12/2020 14:51:48','23/12/2020 20:22:04','5:30:16','68.9583333333333','12.5','08:00:00','23:59:00');
    
    come si può vedere sono, tutti valori stringa (tranne l'id) perché non mi interessa nessuna elaborazione non solo delle informazioni tipo un log.
    Questo poi risponde al quesito del file di testo; essendo delle informazioni "a perdere", ed essendomi stancato di trovare una soluzione al problema, ho ripiegato, sostituendo la query, con la scrittura di file di testo che eventualmente, se servirà, potrà diventare un file excel.

    Come ho scritto ho già tentato l'utilizzo dell'oggetto DAO.Database. Nel link c'è andato a finire qualche carattere di troppo:
    https://masterdrive.it/microsoft-acc...e-0-0-a-95051/

    Sì ho pensato anche alle transazioni; ma non è la prima volta che uso l'Execute in quel modo e per fare delle semplici insert into, che diamine! E sempre con db collegati sia in locale che in rete.

    Ho altri programmi che fanno la stessa cosa (in due versioni di access differenti), con loop più "pesanti" e non ho comportamenti del genere.

    Premetto ora, scusate, che il problema non è da me attualmente considerato bloccante e per quanto mi riguarda c'ho speso pure troppo tempo a cercare di risolverlo.

    Ho cercato su internet situazioni del genere ma non trovandole le ho volute condividere conscio che probabilmente si tratta di una mia singolarità.

    Quello che non ho fatto, ma ritengo veramente estremo, è l'importazione di tutto il db in un nuovo db ma ripetendomi, questa versione mi sta costringendo a fare degli equilibrismi che con le versioni precedenti non facevo ne pensavo.
    ℹ️ Leggi di più su Sergio Mazza ...

  6. #6
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,743
    Like Inviati  
    0
    Like Ricevuti  
    18
    Sergio, prova ad inserire una gestione errori, mettendo il parametro [dbFailOnError] sul metodo Execute, e, introducendo una verifica del numero di Records oggetto di Comando, usando la proprietà [recordsaffected] come indicato sotto:
    https://docs.microsoft.com/en-us/off...d-property-dao

    A prescindere serve fare un po di verifiche sul perchè non funziona su tutti i Records... a maggior ragione che essendo tutto Testo nemmeno problemi di Formato devono esserci...
    ℹ️ Leggi di più su @Alex ...

  7. #7
    Post
    1,816
    Like Inviati  
    0
    Like Ricevuti  
    4
    Non sarai di quelli che disattivano SetWarnings, vero? Con Execute non serve.
    Aggiungo ai suggerimenti di @Alex:
    Quote Originariamente inviato da Sergio Mazza Visualizza il messaggio
    Il codice non fa nulla di speciale e neanche di segreto
    e non te lo chiediamo per scoprire segreti ma solo perché è l'unico modo per poterti aiutare.
    Hai postato le SQL di inserimento, bene, questo ci ha già tolto parecchi aspetti su cui ora possiamo non perderci.
    Serve il codice, quelle che tu chiami Routine A e Routine B. Detto così sembra che per motivi in questo momento non identificabili la seconda Routine B sia chiamata solo all'ultimo giro. Sembra.
    Nel dubbio tra abbondare ed essere tirchio di copia-incolla, vai per la prima. Con giudizio.

  8. #8
    Sergio Mazza non è in linea Novello
    Post
    18
    Like Inviati  
    1
    Like Ricevuti  
    0
    Chiedo scusa a tutti.

    Oggi stampando i listati mi sono accorto che azzeravo la tabella, prima di riempirla, nel punto sbagliato [Routine B]; troppi test commentati e mi sono perso.

    Per @Alex;
    avevo già tentato il controllo dell'errore, ma la segnalazione era di troppi campi per i valori inseriti o viceversa, mentre la stringa SQL presa così come era scritta veniva eseguita tranquillamente nel generatore di query.

    Per Phil_cattivocarattere;
    il setwarnings lo utilizzo, poco, e solo dove lo ritengo necessario.
    Non sono tirchio, anzi c'ho dei listati pure troppo lunghi e questo è una causa del problema sopra descritto.

    Grazie.
    ℹ️ Leggi di più su Sergio Mazza ...

  9. #9
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,743
    Like Inviati  
    0
    Like Ricevuti  
    18
    Quote Originariamente inviato da Sergio Mazza Visualizza il messaggio
    Chiedo scusa a tutti.
    ....
    Per Phil_cattivocarattere;
    il setwarnings lo utilizzo, poco, e solo dove lo ritengo necessario.
    Non sono tirchio, anzi c'ho dei listati pure troppo lunghi e questo è una causa del problema sopra descritto.

    Grazie.
    Solo a chiarimento, usando il metodo EXECUTE membro dell'oggetto Database quindi di JET, il Warning del Client(Access) non ha effetto... ovvero non esce, cosa che invece accade usando RunSQL...
    ℹ️ Leggi di più su @Alex ...

  10. #10
    Sergio Mazza non è in linea Novello
    Post
    18
    Like Inviati  
    1
    Like Ricevuti  
    0
    Quote Originariamente inviato da @Alex Visualizza il messaggio
    Solo a chiarimento, usando il metodo EXECUTE membro dell'oggetto Database quindi di JET, il Warning del Client(Access) non ha effetto... ovvero non esce, cosa che invece accade usando RunSQL...
    Oooo.. Yes!
    ℹ️ Leggi di più su Sergio Mazza ...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. VBA - generare elenco routine eseguite
    Da ArmandoVBA nel forum Microsoft Access
    Risposte: 5
    Ultimo Post: 01-02-2019, 17:00
  2. Listini Multipli (query di comando)
    Da X_Files nel forum Microsoft Access
    Risposte: 4
    Ultimo Post: 28-04-2012, 22:08
  3. Access - Messaggio delle Query di comando
    Da gondoliere nel forum Microsoft Access
    Risposte: 2
    Ultimo Post: 25-11-2008, 10:59
  4. Access query di comando
    Da gondoliere nel forum Microsoft Access
    Risposte: 4
    Ultimo Post: 22-12-2007, 17:33
  5. Tenere traccia delle operazioni eseguite su tutti i file
    Da worldvb nel forum Visual Basic .Net
    Risposte: 3
    Ultimo Post: 21-11-2006, 14:28