comp.lang.ada
 help / color / mirror / Atom feed
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



  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