PDA

Visualizza la versione completa : [FIREBIRD] Creare una tabella con campo autoincrementale


dail
30-10-2007, 16:54
Ciao a tutti
Dovrei creare una tabella su Firebird
tabella composta da due campi

ID <--- Contatore
TESTO <---- varchar(255)

ho un problema...non so come creare la tabella se c'è da inserire un contatore....
mi sapere aiutare?


grazie mille :ciauz:

alka
30-10-2007, 17:15
Il tipo di campo che stai cercando di creare, in realtà, non esiste in quanto tale: per ottenere un campo autoincrementale devi inserire nella tabella, attraverso lo statement DLL CREATE TABLE, un normalissimo campo intero (INT) e, successivamente, creare un generatore usando lo statement SET GENERATOR.

Leggi eventualmente qualche guida online o la documentazione di FireBird/InterBase per saperne di più sui generatori e su come utilizzarli, che altro non sono che registri numerici autoincrementale i cui valori possono essere assegnati al campo intero precedentemente definito.

Ciao! :ciauz:

dail
30-10-2007, 17:39
ok cerco info...
se hai a portata di mano l'sql se me la posti sarebbe meglio cosi ci capisco un pò di più


grazie mille

alka
30-10-2007, 17:44
Leggi questa pagina (http://mc-computing.com/Databases/Firebird/Generators.html).

Ciao! :ciauz:

dail
30-10-2007, 17:46
grazie mille guardo subito...

senti alka tu che ne pensi di firebird? è buono? o meglio il solito mysql?


grazie

dail
30-10-2007, 18:00
mi crea la tabella mi crea il generatore....ma mi da errore la trigger
questo il codice:




CREATE TABLE prova(
id INTEGER NOT NULL,
testo VARCHAR(255),
PRIMARY KEY(id)
);

CREATE GENERATOR GEN_PK_prova;
COMMIT;

CREATE TRIGGER BI_prova FOR prova
ACTIVE BEFORE INSERT
AS
BEGIN
IF(NEW.id IS NULL) THEN
NEW.ID = GEN_ID(GEN_PK_prova, 1);
END


errore:



Starting transaction...
Preparing query: CREATE TRIGGER BI_prova FOR prova
ACTIVE BEFORE INSERT
AS
BEGIN
IF(NEW.id IS NULL) THEN
NEW.ID = GEN_ID(GEN_PK_prova, 1)
*** IBPP::SQLException ***
Context: Statement::Prepare( CREATE TRIGGER BI_prova FOR prova
ACTIVE BEFORE INSERT
AS
BEGIN
IF(NEW.id IS NULL) THEN
NEW.ID = GEN_ID(GEN_PK_prova, 1) )
Message: isc_dsql_prepare failed

SQL Message : -104
Invalid token

Engine Code : 335544569
Engine Message :
Dynamic SQL Error
SQL error code = -104
Unexpected end of command


Execute time: 00:00:00.

alka
30-10-2007, 18:00
Originariamente inviato da dail
senti alka tu che ne pensi di firebird? è buono? o meglio il solito mysql?
Non è possibile fornire un opinione di questo tipo, senza alcun contesto di riferimento.
Dipende sempre da cosa ci si deve fare.

Tutt'al più, in generale, posso dire che lo trovo molto versatile, visto che è completamente OpenSource, facilmente accessibile usando Delphi (che è l'ambiente di sviluppo che adotto io), è di facile installazione e amministrazione, è discretamente performante, disponibile anche nella versione "Embedded" per la creazione di CD demo o per l'utilizzo senza il classico database server.

Insomma, da provare.

Ciao! :ciauz:

dail
30-10-2007, 18:02
Originariamente inviato da alka
Non è possibile fornire un opinione di questo tipo, senza alcun contesto di riferimento.
Dipende sempre da cosa ci si deve fare.

Tutt'al più, in generale, posso dire che lo trovo molto versatile, visto che è completamente OpenSource, facilmente accessibile usando Delphi (che è l'ambiente di sviluppo che adotto io), è di facile installazione e amministrazione, è discretamente performante, disponibile anche nella versione "Embedded" per la creazione di CD demo o per l'utilizzo senza il classico database server.

Insomma, da provare.

Ciao! :ciauz:


si si infatti appunto per questo l'ho installato....ma viene fuori l'errore che ho postato sopra alla creazione della trigger

alka
30-10-2007, 18:06
Originariamente inviato da dail
si si infatti appunto per questo l'ho installato....ma viene fuori l'errore che ho postato sopra alla creazione della trigger
Ad occhio, manca un BEGIN...END per il costrutto IF...THEN.

Comunque sia, la semplicità è sempre un concetto relativo: un database può essere immediato finché si vuole, ma se tu vai a tentoni, difficilmente riuscirai ad ottenere cose che funzionano nel modo corretto. :stordita:

dail
30-10-2007, 18:55
Originariamente inviato da alka
Ad occhio, manca un BEGIN...END per il costrutto IF...THEN.

Comunque sia, la semplicità è sempre un concetto relativo: un database può essere immediato finché si vuole, ma se tu vai a tentoni, difficilmente riuscirai ad ottenere cose che funzionano nel modo corretto. :stordita:


provato ma non cambia nulla

Loading