Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    7

    [Delphi] Funzione currval() di postgresql

    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:
    codice:
    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_codice_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_protocollo_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

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    a memoria non esistono campi autoincrementanti in postgres, si simulano con le sequenze.
    Forse, e dico forse, stai cercando di leggere un campo che, semplicemente, non esiste, o meglio che il metodo Open non sia quello adatto [zsqlscript?]

    ---
    sono nello studio\2 e non ho postgres sotto mano, domani potrò essere più preciso; dalle vaghe rimembranze ti tocca normalmente creare una vera e propria transazione
    codice:
    begin
    insert qualcosa
    select currval(qualcosaltro)
    commit
    o usare nextval (approccio superquick e superdirty) PRIMA della insert

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    7
    a memoria non esistono campi autoincrementanti in postgres, si simulano con le sequenze
    Hai ragione uso inappropriato dei termini

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.