Error 3167 DAO rst.bookmark = rst.lastmodified su MySQL

di il
10 risposte

Error 3167 DAO rst.bookmark = rst.lastmodified su MySQL

Buongiorno,
ho il seguente errore sull'inserimento di una riga.
Me lo fa su un accdb e non sull'altro che fanno la stessa cosa, stesso codice, che è:

Set rstAFASDest = CurrentDb.OpenRecordset("modelli", dbOpenDynaset, dbSeeChanges)
rstAFASDest.AddNew
rstAFASDest.Update
rstAFASDest.Bookmark = rstAFASDest.LastModified
AfasNewID = rstAFASDest!id

Un acddb funziona, l'altro no. Non riesco proprio a capire come facciano due codici identici su due file diversi e sulla stessa tabella a darmi questi problemi.
Possno essere riferimenti o qualcosa del genere? Non ne vengo fuori è tutto il giorno che provo.

10 Risposte

  • Re: Error 3167 DAO rst.bookmark = rst.lastmodified su MySQL

    Scuste, l'errore me lo da tentando l'esecuzione sull'ultima riga.
  • Re: Error 3167 DAO rst.bookmark = rst.lastmodified su MySQL

    Rilevo adesso che da una parte non mi scrive il campo created_at (dove non funziona) che è un campo datetime con valori predefinito pari a CURRENT_TIMESTAMP, mentre il campo timestamp update_at me lo scrive correttamente ed ha valore predefinito pari a CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP.
    Rimango di nuovo basito. Forse per questo mi dà errore, ma perchè da una parte non mi scrive?
  • Re: Error 3167 DAO rst.bookmark = rst.lastmodified su MySQL

    Ok, in realtà il codice che mi da errore non assegna nessun campo, l'altro li assegna (ho omesso nel codice postato). Strano perchè non esiste nessun vincolo, come un not null.
  • Re: Error 3167 DAO rst.bookmark = rst.lastmodified su MySQL

    Interessante, funziona solo se scrivo su un campo. Ho risolto, ma qualcuno lo sa il perchè?
  • Re: Error 3167 DAO rst.bookmark = rst.lastmodified su MySQL

    DrugOne ha scritto:


    Ok, in realtà il codice che mi da errore non assegna nessun campo, l'altro li assegna (ho omesso nel codice postato). Strano perchè non esiste nessun vincolo, come un not null.
    Difficile rispondere quando la descrizione del problema è quantomeno vaga : parli di codice che funziona, di stesso codice che non funziona, di campi che solo tu conosci. E' persino difficile capire la riga dell'errore (sull'update, sul bookmark, sull'assegnazione). Di per sé, addnew seguito immediatamente da update non ha molto senso ... magari hai omesso del codice.

    Se ci indichi almeno i campi chiave e gli indici delle tabelle, gli eventuali trigger ... insomma affinché non sia solo un monologo (tra te e te) aggiungi più info.
  • Re: Error 3167 DAO rst.bookmark = rst.lastmodified su MySQL

    Ho omesso solo codice del tipo
    rstAFASDest!prova1 = 1
    prima dell'update.
    In pratica non mi da errore solo se su un campo metto un valore.
    A parte il senso di fare un'update dopo l'addnew, scopro che non funziona solo se non scrivo in alcun campo.
    I due codici "identici" (tranne nel fatto che nel primo scrivo su qualche campo prima dell'update come nell'esempio sopra) sono in due db diversi linkati sulla stessa tabella.
    Chiave primaria e indice sono nel primo campo, id, che è autoincrement, unique e not null.
    Il resto son campi vari, text, varchar e int, a parte il created_at e l'update_at.
  • Re: Error 3167 DAO rst.bookmark = rst.lastmodified su MySQL

    Ah, grazie dell'interessamento . Come si allega un immagine?
  • Re: Error 3167 DAO rst.bookmark = rst.lastmodified su MySQL

    DrugOne ha scritto:


    ...
    A parte il senso di fare un'update dopo l'addnew, scopro che non funziona solo se non scrivo in alcun (qualche) campo. (detesto le doppie negazioni).
    Scomponi il problema :
    1) - problema lato mySQL
    2) - problema lato OBDC/Access

    1) - prova ad eseguire, tramite phpmyadmin, una query di inserimento senza specificare alcun campo : se NON funziona ti fermi perché non c sono soluzioni.
    2) - invece di far costruire ad Access la query (tramite Addnew e Update), fallo tu con una query di comando : se funziona sai che il problema è di Access e probabilmente non di ODBC.

    Risposta veloce, senza neanche provare : io credo che Access, quando deve costruire la query da inviare al DB, non trovando alcun campo da inserire nella query probabilmente non prepara la query (e quindi semplicemente NON viene inviato alcunché al DB). Il fatto che prevedendo un campo tra Addnew e Update la query viene eseguita avvalora il mio pensiero.
  • Re: Error 3167 DAO rst.bookmark = rst.lastmodified su MySQL

    Scusa ma ti sei chiesto cosa dovrebbe servire un addnew senza alcun inserimento...?
    Non rispondere "ad inserire un record vuoto...!"
    L'update si può attivare se viene rilevato l'inserimento o modifica di uno dei campi, questa non è una cosa strana, lo strano e fare quelloce hai fatto.

    P.s. per Max... ottima osservazione, aggiungo che si potrebbe valutare una Q_Pass_Trough, che di fatto delega l'interpretazione server side, o meglio ancora una SP sempre usando la EXEC con una PT.
  • Re: Error 3167 DAO rst.bookmark = rst.lastmodified su MySQL

    In efetti mi da errore lanciando la query direttamente in workbench (semplice "insert into modelli;").
    Per il fatto che stavo inserendo senza campi, stavo costruendo del codice e avrei inserito dopo i vari valori; mi sono incaponito sul fatto in sè perchè mi ha completamente spiazzato. Un po di confusione mi ha creato il fatto che l'errore non lo da sull'update, ma successivamente. Probabile alllora che anche access non invii nulla al server, in effetti.
    Comunque grazie!! sempre disponibili, siete una sicurezza!!!
Devi accedere o registrarti per scrivere nel forum
10 risposte