From: "Thomas Løcke" <tl@ada-dk.org>
Subject: Re: Problem in GNATColl when using prepared queries: GNATCOLL.SQL.POSTGRES.GNADE.POSTGRESQL_ERROR is raised
Date: Fri, 25 Feb 2011 19:24:27 +0100
Date: 2011-02-25T19:24:27+01:00 [thread overview]
Message-ID: <4d67f3db$0$23762$14726298@news.sunsite.dk> (raw)
In-Reply-To: <1on2yzc25jxpr.1offs3nb41fqk$.dlg@40tude.net>
On 2011-02-25 17:05, Dmitry A. Kazakov wrote:
> I don't understand your code, in particular where the statement prepared is
> actually executed?
Cur.Fetch (Connection => Connection,
Stmt => P,
Params => (1 => +Some_Name'Access));
> Where the cursor gets closed? DBMS does not appreciate
> cursors left unclosed. Does GNATColl maintain cursor states internally?
Yes.
> Why
> fetch is not called within a loop?
while Cur.Has_Row loop
Put_Line ("id=" & Cur.Integer_Value (0)'Img);
Put_Line ("name=" & Cur.Value (1));
Cur.Next;
end loop;
This loop executes as long as there are more rows available from the
Cur.Fetch call.
> You prepare the statement, but do not
> bind parameters, Ludovic mentioned this.
First we declare the query:
Q : constant SQL_Query := SQL_Select
(Fields => Tmp.Id & Tmp.Name,
From => Tmp,
Where => Tmp.Name = Text_Param (1));
Where "Text_Param (1)" setup the parameter and then:
Cur.Fetch (Connection => Connection,
Stmt => P,
Params => (1 => +Some_Name'Access));
The parameter is bound in the "Params => (1 => +Some_Name'Access));"
line.
The actual content of "Some_Name" doesn't matter, but in this case it is
a string. The "+" function takes an Access to string and return an
SQL_Parameter.
> I can only stress that you will
> never get it working with literal values. I've been there. It isn't worth
> to try.
I don't want it to work with literal values. I want it to work with
prepared and parameterized queries. I simple show an example with
literal values because that actually works. :o)
The problem is that GNATColl dumps an exception when I try to use
prepared and parameterized queries.
> ... and why don't you use GNADE ODBC?
I like GNATColl's interface.
>
> [ At least ODBC has tracing mode, which sometimes with some drivers indeed
> traces. So that you could see the actual statement. ]
>
GNATColl has that too. There's nothing wrong with the actual statement.
The problem occurs when I try to extract the data in the loop using
these two calls:
Cur.Integer_Value (0)
Cur.Value (1)
https://www.adacore.com/wp-content/files/auto_update/gnatcoll-docs/gnatcoll.html#Database-interface
:o)
--
Thomas L�cke
Email: tl at ada-dk.org
Web: http//:ada-dk.org
http://identi.ca/thomaslocke
next prev parent reply other threads:[~2011-02-25 18:24 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-02-25 15:45 Problem in GNATColl when using prepared queries: GNATCOLL.SQL.POSTGRES.GNADE.POSTGRESQL_ERROR is raised Thomas Løcke
2011-02-25 16:05 ` Dmitry A. Kazakov
2011-02-25 18:24 ` Thomas Løcke [this message]
2011-02-25 20:08 ` Dmitry A. Kazakov
2011-02-25 21:50 ` Thomas Løcke
2011-02-26 19:33 ` Dmitry A. Kazakov
2011-02-27 14:53 ` Thomas Løcke
2011-02-27 15:36 ` Dmitry A. Kazakov
2011-02-27 15:49 ` Thomas Løcke
2011-02-27 20:15 ` Dmitry A. Kazakov
2011-02-27 21:53 ` Thomas Løcke
2011-02-28 13:49 ` Emmanuel Briot
2011-03-01 8:34 ` Thomas Løcke
2011-03-01 10:28 ` Emmanuel Briot
2011-03-01 20:33 ` Thomas Løcke
2011-03-01 20:54 ` Dmitry A. Kazakov
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox