Newsgroup: it.comp.lang.delphi
Titolo: Nuovo indice di ricerca

supponiamo di avere una tabella di un database Firebird cosě:
ID: integer (si incrementa ad ogni inserimento)
Nome: string
Come faccio subito dopo un insert (senza aver dato il commit) a sapere il
nuovo id generato dall'ultimo insert??
Grazie
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

nuovo id generato dall'ultimo insert??
Ciao,
non credo che si possa leggere l'id senza prima effettuare il commit dato 
che č il server ad effettuare tale operazione, eventualmente anche se fai 
il commit l'id non c'e' l'hai a disposizione finchč non rileggi subito il 
record relativo. Io di solito richiamo un store procedure che mi ricava 
l'id incrementato cosě da potermelo gestire lato client.
Ciao da Enrico Giudici
ico...@tiscali.it
--- posted by geoForum on 
http://www.delphiedintorni.it

 Inviato via 
http://arianna.libero.it/usenet/
-- 
Ciao, Anto', [37, 143, AQ] 
MB C SC 220 CDI Magma Rot
"Di sempre cio' che senti e fai cio' che pensi."
    G.G. Màrquez


 


La pappa pronta:
CREATE GENERATOR GEN_MYTABLENAME;
SET TERM !!
CREATE PROCEDURE GETMYTABLEID RETURNS (AID INTEGER) AS BEGIN
   AID = GEN_ID(GEN_MYTABLENAME,1);
END!!
set term ;
nella guida sql di ib e fb sono spiegati i seguenti argomenti:
1) generators/create generator
2) funzione gen_id
3) comando set term
4) comando sql create procedure
$spotmode ON
Cerca anche su 
www.devspy.com
$spotmode OFF
Per usare la stored procedure da delphi vedi la guida in linea del 
relativo componente della tecnologia di accesso ai dati che utilizzi.
-- 
Alberto Salvati
A *Neapolitan* delphi developer who is studing c# & .Net

Grazie.. ciao
Ciao,
cercando...cercando con google... 
http://www.fingerbird.de/generatorguide_body.htm



Ti ringrazio per la disponibilità ma voglio dirti che non serve che metti
commenti poco oppurtuni come pappa pronta... primo perchè nessuno ti obbliga
a rispondermi, secondo perchè mi sento un pò portato per il culo da queste
stupidaggini. In futuro ti prego cortesemente di omettere queste
stupidaggini, o magari non rispondere ai miei post.
grazie


 nuovo id generato dall'ultimo insert??
Generalmente, preferisco acquisire il valore dell'ID (presumibilmente 
generato da un...generatore) lato client e attribuirlo io stesso al 
record che sto per inserire; in questo modo, senza fare una Commit, non 
è comunque necessario ottenere di nuovo l'elenco dei record per avere l'ID.
Ciao! :-)
-- 
Marco «Alka» Breveglieri
  ABLS Team S.n.c. - Software & Web
  Via De Gasperi, 14
  42019 Scandiano (Reggio Emilia)
 
http://www.abls.it

 grazie
prego



di niente


 GOAL!!!!!
Sarebbe interessante sapere se questo "goal" è stato messo a segno prima 
o dopo  che facessi copia&incolla della soluzione che ti ho suggerito.....
Vedi la differenza?
Si, lo so, il tuo pensiero è oggettivo e non va messo in discussione, 
altrimenti l'universo crolla, ma per una volta commetto un sacrilegio
C'è chi, avuta una dritta inizia a cercare, a pensare,  a provare...
Altri chiedono la pappa pronta e poi si alterano se qualcuno fa notare 
'sta cosa....
Comodo il ng, eh?
Xche sbattersi, xche cercare, xche studiare?
Tanto sui ng un proFESSOre che risponde lo trovo, e se poi non mi 
rispondono + dopo un po, cambio nick e buonanotte....
Bhe, questo fesso ti ha risposto per l'ultima volta su questo nick.
AS

 Ciao! :-)
Ciao,
Andrea

 specifici.
Stavo pensando a questa soluzione che hai postato...non causa problemi 
quando entra in gioco la multiutenza e le transazioni?
Adottando i generatori, è possibile ottenere un valore numerico 
incrementale che sia per certo univoco per tutti gli utenti.
Con la tua soluzione, non può accadere che due utenti ottengano lo 
stesso valore per il campo ID?


 specifici.
questo è vero.

 stesso valore per il campo ID?
Certo che puň accadere, ma se succede ed hai tutto in transazione,
puoi sempre rigenerarlo. Vado a memoria, ma mi pare che con IB/Firebird
puoi avere delle transazioni nidificate. Metti tutto in piů blocchi
transazionali racchiusi da una transazione e sei a posto. Se sei proprio
sfigato( ma devi essere proprio sfigato ), ti basta fare un RollBack
alla fine.
Ciao,
Andrea

 alla fine.
Se so che posso essere sfigato, preferisco scegliere una soluzione che 
eviti i "casi sfortunati", però. :-)
Poi, per ottenere il valore massimo da usare come ID suppongo che il 
database dovrà scandirsi tutti i record per individuarlo...le 
performance non sarebbero delle migliori... :-)


 performance non sarebbero delle migliori... :-)
Certo, perché gli indici li ho inventati io, vero? :-)
Andrea

 Certo, perché gli indici li ho inventati io, vero? :-)
Scusa ma non credo di aver compreso il messaggio. :-)
