Recent

Author Topic: [Solved] INSERT RETURNING an_id  (Read 2041 times)

ig

  • New Member
  • *
  • Posts: 10
[Solved] 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 16, 2022, 12:06:26 pm by ig »

Zvoni

  • Hero Member
  • *****
  • Posts: 2319
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 Code to find them,
One IDE to bring them all, and to the Framework bind them,
in the Land of Redmond, where the Windows lie
---------------------------------------------------------------------
Code is like a joke: If you have to explain it, it's bad

egsuh

  • Hero Member
  • *****
  • Posts: 1273
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

  • New Member
  • *
  • Posts: 10
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

  • New Member
  • *
  • Posts: 10
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