Newsgroup: it.comp.appl.access
Titolo: Access+MySQL: valore auto_increment da DAO.addnew

Ho MySQL come BE di un client Access, con le tabelle collegate ODBC.
Come faccio a sapere il valore auto incrementante assegnato ad un record
dopo l'applicazione del metodo dao.addnew?
Esempio:
  Dim rs As Recordset, newval as long
  Set rs = CurrentDb.OpenRecordset("miatabella")
  rs.AddNew
  rs!campo1 = "valore1"
  rs.Update
  newval = rs!autoinc_field
  rs.Close
In newval c'è sempre il valore del primo record della miatabella, e non
(come mi aspetterei) l'id assegnato automaticamente dal server.
Eppure dovrebbe essere una grossa banalità, visto che aprendo la tabella in
modalità datagrid il valore auto-incrementante mi viene visualizzato appena
passo ad un altro record (cioè appena il record nuovo viene scritto).
TIA mille.
Sandro.
--------------------------------
Inviato via 
http://usenet.libero.it

 ha scritto nel messaggio
news:212Z210Z230Z116Y...@usenet.libero.it...

Ciao Sandro se MySql ragiona come Ms SqlServer il valore identity viene
aggiornato durante la scrittura del record quindi puoi utilizzare il metodo
LastModified per recuperare il record scritto es..
  Dim rs As Recordset, newval as long
  Set rs = CurrentDb.OpenRecordset("miatabella")
  rs.AddNew
  rs!campo1 = "valore1"
  rs.Update
  rs.Bookmark = Rs.LastModified
  newval = rs!autoinc_field
  rs.Close
Ciao Giorgio.

 aggiornato durante la scrittura del record
Esatto. Vecchia bestia dell'upsize a SQL Server, come da 3d appena sotto.

 newval = rs!autoinc_field
Purtroppo non funge... Nel tentativo di leggere il campo rs!autoinc_field il
runtime di access mi dice che il record è "cancellato".
Che cosa sto sbagliando? Forse il recordset va aperto in modo particolare?
Grazie mille per l'interessamento.
Ciao, Sandro.


 ha scritto nel messaggio
news:212Z210Z230Z116...@usenet.libero.it...

Ciao Sandro
Il recordset lo apro in questo modo
Set rs = CurrentDb.OpenRecordset("miatabella", dbOpenDynaset, dbSeeChanges)
Inoltre tutte le mie tabelle oltre al campo identity (autoincremento)
indicizzato univoco hanno il campo timestamp.
Ciao Giorgio.

 indicizzato univoco hanno il campo timestamp.
Si certo, anche le mie. Del resto, se le tabelle le manipolo in
visualizzazione foglio dati tutto funziona a meraviglia, con il timestamp e
l'autoincrement assegnati "al volo" dal server quando il record viene
scritto.
Boh. Se ti viene in mente qualche cosa ...
Davvero grazie infinite.


 Set rs = CurrentDb.OpenRecordset("miatabella", dbOpenDynaset,
dbSeeChanges)
Cancella tutte le stupidaggini che ho scritto cinque minuti fa.
Funziona, con la OpenRecordset("miatabella", dbOpenDynaset, dbSeeChanges)
che mi hai suggerito.
Grazie infinite. Stanotte riuscirò a dormire più tranquillo. ;-)
Grazie Giorgio, Sandro.


 ha scritto nel messaggio
news:212Z210Z230Z116Y...@usenet.libero.it...

Bene
Se vuoi provare anche con odbcdirect io uso questa istruzione per aprire le
tabelle
Set rs=Conn.OpenRecordset("Miatabella", dbOpenDynamic, 0, dbOptimistic)
Conn è la connessione che apri sul WorkSpace creato con dbUseODBC.
Ciao Giorgio.

   rs.Close
Così facendo non si rischia di beccarsi il contatore generato da un altro
utente?

 ha scritto nel messaggio
news:QEQxa.12451$Ny5.3...@twister2.libero.it...

Ciao Massimiliano
Assolutamente no, Lastmodified è riferito all'ultima variazione del tuo
recordset, se vuoi puoi fare una prova con due recordset separati ad es..
  Sub Prima_Sub()
  Dim rs As Recordset, newval as long
  Set rs = CurrentDb.OpenRecordset("miatabella", dbOpenDynaset,
dbSeeChanges)
  rs.AddNew
  rs!campo1 = "valore1"
  rs.Update
  CALL Seconda_Sub () '----------- Faccio eseguire la seconda sub identica a
questa
  rs.Bookmark = Rs.LastModified  'e recupero il campo identity
 newval = rs!autoinc_field
  rs.Close
 END SUB
Ciao Giorgio.

  END SUB
Verificato: grazie per la precisazione.