Newsgroup: it.comp.software.database
Titolo: Come realizzare un campo autoincrementante in Firebird ?

Sto usando Firebird versione 1.5 versione Windows e non riesco ad ottenere
il campo autoincrementante all'interno della tabella di prova.
Credo sia possibile ottenerlo usando i 'generators' ma non riesco a capire
come.
Dove posso trovare qualche esempio ?
Grazie e ciao
RobertoA



devi creare un generator
una volta fatto devi creare un trigger sul campo before_insert e li dentro
inserisci il codice necessario.
CREATE TRIGGER get_unique_value FOR my_table
BEFORE INSERT
AS
BEGIN
NEW.field_x = GEN_ID(my_gen_id, 1);
END
ti consiglio di guardare su 
www.ibphoenix.com
ciao fabrizio 
-- 
Coltiva linux, che tanto windows si pianta da solo!
Linux registered user: 364664 (
http://counter.li.org
)

 ha scritto nel messaggio
news:pan.2004.11.16...@ostialido.it...


 nell'inserimento di FattureRighe???
se non ho capito male devi fare un inserimento in cascata giusto? con lo
stesso valore generato dal trigger.
allora puoi fare una cosa del genere
adesso non so come deve andare il tuo workflow, ma ti puoi adattare una
cosa del genere.
ti fai una procedura, dove crei una variabile a cui assegni il valore
generato dal generator, lanci la procedura di inserimento per le prime
fatture_testate, poi lanci la sequenza di inserimento per le fatture
righe passandogli usando sempre la stessa variabile che contiene il
valore del generator.
ciao f


 valore del generator.
E no che non posso fare cosi per il semplice fatto che il sistema deve
essere multiutente !
Non posso 'leggere' il valore di un generator, assegnarlo ad una variabile
del mio applicativo e poi usare tale variabile per creare il record di
TestataFatture e poi i record di RigheFatture, perche' dal momento della
lettura al momento della scrittura record TestataFatture e quindi anche
dell'aggiornamento del generator qualche altro utente potrebbe aver gia'
usato proprio quel valore del generator.
In pratica (credo) potrebbe avvenire cosi:
1 client 1 legge generator ID_FATTURA
2 client 2 legge generator ID_FATTURA
3 il client 1 usa il valore letto per scrivere sul campo ID_FATTURA di un
nuovo record della tabella FattureTestate
4 il client 1 aggiorna il valore del generator al suo successivo
5 il client 2 usa il valore letto per scrivere sul campo ID_FATTURA di un
nuovo record della tabella FattureTestate, valore che e' ga' stato usato !!!
6  il client 2 aggiorna il valore del generator al suo successivo
In questo modo il client 1 ed il client 2 leggerebbero lo stesso valore di
generator ed utilizzerebbero tale valore per creare due distinte fatture
nella tabella FattureTestate, ed ovviamente questo e' sbagliato, non deve
poter avvenire.
Ai fini della creazione testata fattura il valore ID_FATTURA non mi
servirebbe, il fatto e' che dopo aver creato la testata, vorrei usare tale
valore anche nelle righe fattura per poter cosi'  identificare facilmente
quali righe appartengono ad una fattura.
Potrei anche usare altri sistemi, ad esempio usare la data/numero/serie/tipo
del documento, ma non intendo procedere in quel modo perche' devo portare un
applicativo esistente che e' gia' strutturato in un certo modo.
La possibilita' di usare un unico generator per tutte le tabelle mi sembra a
prima vista davvero importante, in pratica conoscendo un solo numero si
potrebbe recuperare quel record sia che sia un'anagrafica sia che sia una
fattura che un preventivo o una distinta base.
Mi puoi dire se voi avete gia' sfruttato questa possibilita' oppure se e'
impraticabile per qualche motivo particolare?
Ciao e grazie
RobertoA

 generator.
Il generator quando lo chiami ti genera il numero e si aggiorna subito 
automaticamente. Non lo devi salvare tu. Se arriva un'altra chiamata genera 
il numero successivo.
Quindi è univoco.
Giulio 

"GiulioC" <giulio.c...@SPAMunisoft-net.it> ha scritto nel messaggio
news:BLhod.201093$b5.10...@news3.tin.it...

Allora avevo capito male io il funzionamento del generator.
Se l'aggiornamento del generator e' contestuale alla sua lettura allora e'
proprio quello che mi serve per risolvere il problema.
Grazie mille a Giulio ed a Fabrizio.
RobertoA