Newsgroup: it.comp.lang.delphi
Titolo: D6+Generatori+IB

Ciao... scusate per il messaggio precedente... "e' sfuggito" ;-D
Sono nuovo nell'utilizzo di Interbase con Delphi  (tra l'altro ho da poco
pure Delphi 6).... c'e' qualche persona gentile che mi spiega (magari con un
esempio) come utilizzare i Generatori di Interbase in Delphi?
Ho bisogno di avere dei campi che siano simili agli autoinc che usavo con
Paradox.
Grazie
 Roberto

Ciao.

 Paradox.
premetto che sono circa 6 mesi che non metto mano ad un codice di DB, quindi
potrei anche commettere errori! :-)
La pseudosintassi è qualcosa di simile ...
Create Generator Incrementa;
Create Trigger AutoInc for NomeTabella Before Insert as
Begin
  NomeCampo := GEN_ID(Incrementa,1)
end;
cmq sull'help di IB trovi la sintassi esatta ...
Ciao! :-)
--
- Carlo -
c.b...@libero.it

Carlo,

Ti ringrazio... ma il mio problema continua! :(
Ti spiego... ho crato con IBExpert un db e IBExpert mi ha creato anche i
vari Trigget etc... il mio problema e' che quando da Delphi cerco di fare un
Append ad una tabella (sono costretto ad usare le IBTable invece delle
query....) quando esegui l'istruzione di POST mi appare l'errore: "Il campo
ID (il mio autoinc con tanto di trigger etc) non puo' essere non assegnato"
o qualcosa del genere....
Dove sbaglio?
Ecco i trigger che mi crea IBExpert:
CREATE TRIGGER "EMails_BI" FOR "EMails"
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (
NEW.ID
 IS NULL) THEN 
NEW.ID
 = GEN_ID("GEN_EMails_ID",1);
END
Io vorrei fare una cosa del genere (da Delphi):
With Dati.IBEmail do
 Begin
   Append;
   FieldByName('Dominio').asString:=edtDominio.text;
   FieldByName('Account').asString:=edtAccount.text;
   FieldByName('Password').asString:=edtPassword.text;
   FieldByName('Email').asString:=edtEmail.text;
   Post;
end;
A questo punto se mando in RUN il tutto Delphi mi dice:
"Field ID must have a value" :(((
Help! ;-D
 Roberto


wrote:

Premesso che non ho MAI usato IB (ma ho una discreta esperienza in
generale sui DB) potresti fare un paio di prove che con altri DB
funzionano:
visto il trigger, potresti provare a fregarlo con
FieldByName('ID').Value := null oppure (con MSSQL funziona) prova a
passargli un valore qualsiasi che verrà poi ignorato. 
Massimo.

Allora....
Ho usato questa stessa tecnica facendo alcuni esperimenti con
Interbase.
Solo che io ho creato tutto da IBConsole, senza fare uso di wizard
e roba simile.
Pero' questa tecnica ha un grosso problema: se lavori su un contesto
di masterdetail ed il valore creato usando il generatore fa parte
della chiave primaria del record della tabella master, tu da codice
non ne hai la visibilità.
Magari in questo contesto non te ne frega, PER ORA.
Ma se poi, a meta' del progetto ti rendi conto che questa cosa ti 
serve, ti 6 legato le mani.
Inoltre, se vieni da paradox, prima ancora di creare database, 
trigger, etc, datti prima una occhiata veloce alla documentazione
di interbase: tra i 2 ci sono notevoli differenze.
Tornando al bomba al tuo problema, ti consiglio di:
1) creare una store procedure che restituisca come risultato
il valore creato dal generatore;
2) nel tuo datamodule, metti un oggetti stored procedure che 
punti alla procedura del punto 1
3) nella afterinsert, metti la assegnazione del campo.
In questo modo, da codice sai che valore viene assegnato per 
il campo al nuovo record.
Infine.....
Gia' su paradox usare TTable non va, ma su un client/server è
una FOLLIA. Quindi, se ti va, scrivimi in privato così mi spieghi
cosa fai con le tabelle che non si possa fare con le query
Saluti e buon lavoro
AS
-- 
Posted from 
ammi.mclink.it
 [195.110.128.1] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 cosa fai con le tabelle che non si possa fare con le query
ehehehe! E' che sto iniziando ora a guardare un po' tutto... SQL compreso
tutto qui! ;-D
Grazie
 Roberto

E' che sto iniziando ora a guardare un po' tutto... SQL compreso
percio', vedi di iniziare bene e molla subito le tabelle.... :))
Te lo consiglio non per scopi strani, ma solo xche io sono il
primo che mi sono fatto male.
Un prg che usa le tabelle funziona in modo molto diverso rispetto
ad uno che usa le query, senza contare che le applicazione sono
diverse sopratutto sulla LOGICA con cui funzionano...!
Saluti


 "Field ID must have a value" :(((
Controlla che Dati.IBEmail.FieldByName('ID').Required sia False.
-- 
Roberto Lupi
http://www.lupi.ws/

 ha scritto nel messaggio
news:MPG.15ae797ec...@News.CIS.DFN.DE...

Effettivamente e' TRUE. :(
Devo dunque impostare il campo come non richiesto se lo utilizzo come
autoinc?
Roberto.

 autoinc?
Si'. Se Required e' true, il Post del record e' impedito prima ancora di 
passare i dati al DB, a livello di TDataset.


 ha scritto nel messaggio
news:MPG.15af9e5fe...@News.CIS.DFN.DE...
