Recent

Author Topic: INSERT RETURNING an_id  (Read 760 times)

ig

  • Newbie
  • Posts: 4
INSERT RETURNING an_id
« on: March 11, 2020, 10:05:15 pm »
I've followed the wiki https://wiki.lazarus.freepascal.org/postgres#How_To hoping to get this working:

Query.SQL.Text:= 'INSERT INTO myschema.films(film_name)' +
                 'VALUES(:film_name) RETURNING film_id;';
Query.Params.ParamByName('film_name').AsString:='Mission Impossible';
Query.Open;
ID:= Query.FieldByName('film_id').AsInteger;

However I always get the error message: SQLQuery: field not found "film_id".

What am I missing here?

Lazarus 2.0.6
Database: PostGreSQL 12.1
OS: Windows 10
« Last Edit: March 11, 2020, 10:16:49 pm by ig »

Zvoni

  • Sr. Member
  • ****
  • Posts: 423
Re: INSERT RETURNING an_id
« Reply #1 on: March 12, 2020, 09:10:01 am »
What am I missing here?
You don't have a column called 'film_id' which is integer primary key with autoincrement/autovalue?
One System to rule them all, One IDE to find them,
One Code to bring them all, and to the Framework bind them,
in the Land of Redmond, where the Windows lie
---------------------------------------------------------------------
People call me crazy, because i'm jumping out of perfectly fine aircraft

egsuh

  • Sr. Member
  • ****
  • Posts: 498
Re: INSERT RETURNING an_id
« Reply #2 on: March 12, 2020, 09:38:23 am »
Try using quotations...  i.e.

  Returning "film_id";       

I do not know exactly, but I experienced similar problem.  PostgreSQL seems to require " "   when the name contains _.   Also it may be case-sensitive. 

If this still do not work, try films."film_id".


ig

  • Newbie
  • Posts: 4
Re: INSERT RETURNING an_id
« Reply #3 on: March 12, 2020, 10:50:51 am »
I isolated the case and got it working. Need to figure out why it's not working in a more complicated world.

Txs,
ig

ig

  • Newbie
  • Posts: 4
Re: INSERT RETURNING an_id
« Reply #4 on: March 12, 2020, 11:08:39 am »
Some clarification

  • Before assigning the SQL.Text, make sure the query is closed. When this is not the case, subsequent calls to the insert query will result in the same id.
  • The insert sql needs to be self standing, i.e. in case a datasource is associated with it,  will not work


 

TinyPortal © 2005-2018