mfc1708
19-07-2011, 11:14
Ciao a tutti, spero possiate aiutarmi
Delphi 7 en
Zeos lib 6.6.6-stable
Postgresql 8.4.7
In una tabella tbl_protocollo_categoria ho un campo auto incrementante codice_protocollo_categoria di tipo SERIAL, in altri progetti per recuperare il valore assegnato dal DB al campo serial, utilizzavo un campo di appoggio nella tabelle in cui inserivo l’ip della postazione che aveva effettuato l’inserimento e poi con una select con clausola where = ip_macchina recuperavo il valore inserito e con un update aggiornano il campo ip_macchina = ‘’.
Volendo utilizzare la funzione currval() di postgresql non riesco a recuperare l’ultimo valore serial inserito dalla sessione corrente il pezzo di codice è questo:
with sqlProtocolloCategorie do
begin
SQL.Clear();
SQL.Add( insertProtocolloCategoria ); // insertProtocolloCategoria contiene il codice sql per l’inserimento
ExecSQL();
// fino qui tutto ok
Active := false;
SQL.Clear();
SQL.Add('SELECT pg_catalog.currval(''tbl_protocollo_categoria_codi ce_protocollo_categoria_seq'')' );
SQL.Open();
// qui mi da il seguente errore:
EDatabaseError ‘sqlProtocolloCategorie: Filed ‘codice_protocollo_categorie’ not found
Il campo codice_protocollo_categorie è il campo auto incrementante di tipo serial
Ho provato anche a modificare la query in questo modo:
('SELECT currval(''SELECT currval(''tbl_protocollo_categoria_codice_protocol lo_categoria_seq'') from tbl_protocollo_categoria' );
mettendo il nome della tabella … from tbl_protocollo_categoria, ma l’errore è sempre quello.
PS Nel Field Editor del componente query sqlProtocolloCategoria sono enumerati tutti i campi della tabella
end;
Grazie per l’aiuto
Delphi 7 en
Zeos lib 6.6.6-stable
Postgresql 8.4.7
In una tabella tbl_protocollo_categoria ho un campo auto incrementante codice_protocollo_categoria di tipo SERIAL, in altri progetti per recuperare il valore assegnato dal DB al campo serial, utilizzavo un campo di appoggio nella tabelle in cui inserivo l’ip della postazione che aveva effettuato l’inserimento e poi con una select con clausola where = ip_macchina recuperavo il valore inserito e con un update aggiornano il campo ip_macchina = ‘’.
Volendo utilizzare la funzione currval() di postgresql non riesco a recuperare l’ultimo valore serial inserito dalla sessione corrente il pezzo di codice è questo:
with sqlProtocolloCategorie do
begin
SQL.Clear();
SQL.Add( insertProtocolloCategoria ); // insertProtocolloCategoria contiene il codice sql per l’inserimento
ExecSQL();
// fino qui tutto ok
Active := false;
SQL.Clear();
SQL.Add('SELECT pg_catalog.currval(''tbl_protocollo_categoria_codi ce_protocollo_categoria_seq'')' );
SQL.Open();
// qui mi da il seguente errore:
EDatabaseError ‘sqlProtocolloCategorie: Filed ‘codice_protocollo_categorie’ not found
Il campo codice_protocollo_categorie è il campo auto incrementante di tipo serial
Ho provato anche a modificare la query in questo modo:
('SELECT currval(''SELECT currval(''tbl_protocollo_categoria_codice_protocol lo_categoria_seq'') from tbl_protocollo_categoria' );
mettendo il nome della tabella … from tbl_protocollo_categoria, ma l’errore è sempre quello.
PS Nel Field Editor del componente query sqlProtocolloCategoria sono enumerati tutti i campi della tabella
end;
Grazie per l’aiuto