Newsgroup: it.comp.lang.vo-clipper
Titolo: MySql e Autoincrement

Mi sto cimentando all'uso di MySql con il VO con ODBC.
Sto sviluppando un'applicazione in cui ho due archivi uno "testate" e uno
"movimenti".
Nell'archivio testate ho previsto un campo autoincrement come chiave
primaria che vorrei utilizzare per collegare la testata con i relativi
movimenti.
Dopo aver fatto l'APPEND del record testate come faccio a trovare il valore
del campo chiave in questione da utilizzare per fare gli APPEND dei records
movimenti con lo stesso valore ?
Grazie a tutti
Claudio Carletta

 ha scritto nel messaggio
news:QkSkb.317760$R32.10...@news2.tin.it...


 ti restituirą il valore che cerchi
Un possibile problema che mi ha sempre assillato: che succede se tra la
commit() e la SELECT LAST_INSERT_ID() qualche altro utente inserisce un
nuovo record?
EMG
--
EMAG Software Homepage:     
http://www.emagsoftware.it
The EMG's ZX-Spectrum Page: 
http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: 
http://www.emagsoftware.it/tbosg

 nuovo record?
In effetti il rischio c'e', bisognerebbe usare una transazione (ma le 
supporta adesso mysql) ?
Io non uso questo metodo per i codici che legano testata e dettaglio, 
genero io il nuovo codice in modo unico, poi lo uso per scriverlo nel 
record testata e dettagli.
Ciao.Alberto.
-- 
Alberto Rubinelli - A2 SISTEMI               posted with Gravity 2.60b
Via Costantino Perazzi 22 - 28100 NOVARA (NO) - ITALY     ICQ 49872318
E-Mail : 
alb...@retrocomputing.net
  Tel. 0321 640149 
Web    : 
www.retrocomputing.net
      Fax  0321 391669 BBS  0321 392320


Dopo un doveroso grazie al buon Danilo per tutto quello che fa per tutti noi
al caro Enrico Maria vorrei far notare che la SELECT LAST_INSERT_ID() viene
eseguita dopo l'append e il commit, quindi il campo, con le caratteristiche
di autoincrement, è già scritto nel database.
Comunque il dubbio che tu hai manifestato l'ho fatto mio e, anche se con
qualche perplessità, ho fatto la seguente prova:
Ho inserito, tra il commit e la select un InfoBox{...} che mi bloccava il
processo e un secondo InfoBox{...} dopo la select che mi indicava il codice
restituito dalla SELECT LAST_INSERT_ID().
Quindi ho eseguito due copie dello stesso programma, ho fatto bloccare la
prima copia di programma al primo InfoBox ho fatto partire la seconda copia
di programma che si è fermata anch'essa il primo InfoBox, ho fatto
proseguire la seconda copia di programma che mi ha dato come codice 25 nella
seconda InfoBox, quindi ho fatto proseguire la prima copia la quale mi
mostrato nella sua seconda InfoBox il codice 24 che si era già prenotato.
Quindi, se non ho capito male la tua perplessità, il problema no sussiste.
Spero di essere stato chiaro
Buon lavoro a tutti
Claudio

Dal manuale MySql:
The last ID that was generated is maintained in the server on a
per-connection basis. It will not be changed by another client.
Mi pare tutto chiaro, funziona come ogniuno di noi vuole, cioč conserva un
valore per ogni connessione.


 bisognerebbe usare una transazione (ma le supporta adesso mysql) ?
Per quanto ne so le supporta da un bel pezzo, a patto che usi le tabelle
apposite (IDB o BDB, non ISAM).
Ciao.
Davide.

 per-connection basis. It will not be changed by another client.
Chiarissimo. Grazie.
