Newsgroup: it.comp.lang.delphi
Titolo: problema con memorizzazione dei valori di un trigger in una variabile

Salve a tutti.
Il titolo dice quasi tutto.
Ho un problema con la memorizzazione di un trigger in una variabile del
programma.Il db +č stato fato con interbase.Il mio problema consiste nel non
poter assegnare il valore dell'id di una tabella (che viene incrementato da un
trigger in modo automatico nel momento dell' inserimento di una nuova riga di
dati nella tabella) ad una variabile nel programmma.Mi avevano detto che lo si
poteva fare dopo aver fatto il post della tabella e quindi assegnando in
quell'istante il valore,ma il metodo funziona con tutti i tipi di campi tranne
che con i campi gestiti da triggers.Ho fatto diverse prove ma non sono riuscito
a venirne a capo.Siccome sono un nuovo (ed inesperto utente) volevo sapere se
qualcuno di voi sapeva come risolvere il problema.
Altra cosa. Ho prblemi a trovare dei buoni manuali su delphi.Ho visto a casa di
un mio amico il manuale su delphi 5 scritto da Marco Cantů ma sinceramente non
lo trovo adatto ai miei scopi (mi serve una guida un po' piů chiara e semplice
da seguire) mentre i manuali di Cantů mi sembrano orientati a chi ha gia una
buona(o discreta conoscenza del linguaggio).Sapete indicarmi dei buoni manuali
o anche dei corsi presenti su siti internet che facciano al caso mio ?
Grazie molte
 Costanzo.
-- 
Posted from 
ppp-62-11-148-69.dialup.tiscali.it
 [62.11.148.69] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

dati nella tabella) ad una variabile nel programmma.
Perche' non utilizzi i generatori ?
-- 
The Follet

 wrote in message
news:3c12ece2...@news.tin.it...

In che senso perchè non usi i generatori ?
I generatori li hp gia usati per la creazione del trigger.
Vuoi dire che è possibile leggere i generatori da delphi ed assegnare ad una
variabile
il valore raggiunto dal generatore ?
-- 
Posted from 
h213-22-72.rm1.albacom.net
 [213.213.22.72] 


 variabile il valore raggiunto dal generatore ?
Se crei una stored procedure per l'inserimento dei nuovi record,
secondo il modello seguente:
set term !! ;
create procedure NEW_MESSAGE
returns (NEW_ID integer)
as
begin
  NEW_ID = gen_id(NEW_MSG_GEN, 1);
  insert into MESSAGGI 
  (RECID, MITTENTE, DESTINATARIO)
  values
  (:NEW_ID, 'fisso', 'fisso');  
end !!
set term ; !!
puoi utilizzare dal tuo programma un componente TIBStoredProc e
leggere il valore di NEW_ID generato con un semplice:
procedure TForm1.Button1Click(Sender: TObject);
var
  NewValue: Integer;
begin
  IBStoredProc1.ExecProc;
  NewValue := IBStoredProc1.ParamByName('NEW_ID').AsInteger;
  ShowMessage(IntToStr(NewValue));
end;
-- 
Posted from  [80.105.34.80] 


Molla il trigger.
Crea una stored procedure che ti restituisce l'id che viene 
normalmente calcolato dal trigger.
Poi, nella OnNewRecord della tua query assegni al campo chiave il
valore restituito dalla chiamata alla store procedure.
Se usi un trigger per l'assegnazione della chiave primaria il tutto
viene fatto lato server ed il client non ha la visibilità di questo dato.
Quindi:
1) cambia il trigger in una store procedure che restitusice il valore della PK
2) metti una TStoredProc sul tuo datamodule e collegala alla sudetta procedura
3) Nell'evento  OnNewRecord:
...
MiaQuery.FieldByname('Pk').AsQualcosa := GetPk;
...
function GetPk: qualcosa;
begin
  With spPk do
  begin
    ExecProc;
    Result := ParamByName('Pk').AsQualcosa
  end;
end;
Bye
AS
-- 
Posted from  [212.17.220.41] 


  Costanzo.
Ciao, Antň.

Puoi scrivere una procedure che restituisce un valore
generato da un generatore.
Io lo faccio gia'
Bye
AS
-- 
Posted from  [212.17.220.41] 


Grazie a tutti per l'aiuto .
Sono finalmente riuscito a risolvere il problema.
Vi ringrazio anche per i link .
Costanzo
-- 
Posted from  [195.110.113.99] 


Sono finalmente riuscito a risolvere il problema.
ciao, aggiungo una cosina, il modo + corretto è fare un triggere come
segue:
 if (new.CAMPOID is null)
 then new.CAMPOID = gen_id(GENERATORE, 1);
in questo modo se hai già messo il valore dell'id dalla tua
applicazione client, il valore non viene generato altrimenti sì (vedi
nel caso di un inserimento tramite query, ... tramite altri client "+
stupidi" che non si preoccupano di mettere l'id (vedi ibconsole),
ecc...
Ciao,
Alan Solo