Re: int8 becames string in BDE :-(

From: Laszlo Tibor <ltibor(at)mail(dot)tiszanet(dot)hu>
To: pgsql-odbc(at)postgresql(dot)org
Subject: Re: int8 becames string in BDE :-(
Date: 2002-05-29 15:41:12
Message-ID: NDELKOGEMPNIBNDBEANMMEDICDAA.ltibor@mail.tiszanet.hu
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-odbc

Signed as Tibor, I am Gabor, co-worker of Zoltan.
(sorry to use this confusing way, but I'm not a member of this list just
popped in to help them)

Further experiments I did today: downloaded Hiroshi's 7.2.0.2 driver from a
page mentioned earlier and found the following:

----------------

1a with psqlodbc.dll (ODBC ver 2.5) BDE found count() to be a non-numeric
value (deducted from the fact that BDE aligned it to the left in the grid
and that OE complained about Integer<->String incompatibility)
1b with psqlodbc30.dll (ODBC ver 3) BDE found count() to be numeric (found
out that it's Largeint by setting a fake TIntegerField type to a "count() as
xxx" field. Changing field type to TLargeintField, it worked.)

2a using int4(count()), managed to work around the problem with ODBC 2.5,
but it is inconvenient and ugly since there are hundreds of source files in
our projects.
2b with psqlodbcl30 we could use a Largeint field type instead, which is
good, but at the first try, a certain action caused Access Violation within
psqlodbc30.dll itself. I can send the structure of this query if it helps.

3b Turned off "(Trial) Updatable Cursors" (it was checked in this new
installation of psqlodbc30.dll while it was unchecked in all the other
DSN's) in DataSource options, and now the EXEcutable sends a different
error, _earlier_, stating

[Microsoft][ODBC driver manager] Fetch type out of range

My current driver settings:
Driver. Disable GenOpt, KSQO, CommLog; Unknown Sizes=Maximum; Text As
LongVarChar
DataSource: LF-CRLF convert; protocol=7.X/6.4. As I mentioned in 2b, this
error wasn't an issue but a different error occured later with "Updatable
Cursors" checked.

The code that caused the Fetch error is a Borland code, if you are
interested in Delphi...

if not VarIsNull(FKeyValue) and FListLink.DataSet.Active and
FListLink.DataSet.Locate(FKeyFieldName, FKeyValue, []) then

... where FKeyValue is indeed an integer value, DataSet is indeed an open
dataset, (Active is true), and FKeyFieldName is indeed a key field of the
dataset. Again, with the old drivers (Updatable Cursors UNchecked), this
wasn't a problem, neither with the new driver (Updatable Cursors checked) .
If it helps, I can send you the query causing this problem, too.

-------------

Searching the web, I found two tips, will check them out:
(i) http://archives.postgresql.org/pgsql-interfaces/1998-10/msg00170.php :
Well, my previous problem ('[Microsoft][ODBC driver manager] Fetch type out
of range') dissappear when I changed the option hStmt -> CursorType from
Keyset Driven to Static.
... but it mentions other problems and reveals that it's Borland C++Builder
3 while we use BCB5

(ii) http://support.microsoft.com/default.aspx?scid=kb;EN-US;q141171 :
PRB: RDO Forward-Only Cursor Doesn't Allow MoveLast (Q141171)
... but this applies to MS Visual Basic Enterprise 4.0 only.

BTW, I found MS Jet to be a DLL. Call me a lamer but how can you invoke this
DLL? (if it is what you used to change the return value) Shall I install MS
Access?

Yours,
Gabor

> -----Original Message-----
> From: Kovacs Zoltan
> Sent: Wednesday, May 29, 2002 9:02 AM
>
> On Wed, 29 May 2002, Hiroshi Inoue wrote:
>
> > Kovacs Zoltan wrote:
> > >
> > > Dear Hiroshi and Tom,
> > >
> > > I downloaded the latest psqlodbc.dll for PostgreSQL 7.2.1.
> > > My problem is I
> > > should migrate from 7.1.3 to 7.2.1 because I need "CREATE OR REPLACE
> > > FUNCTION", but COUNT(*) returns int8 now. Unfortunately,
> > > Borland Database
> > > Engine and/or ODBCExpress (from Korbitec Pty.) understands
> > > int8 as string.
> >
> > Is it the true cause ?
> > Isn't it because of the current driver's behavior that
> > returns SQL_VARCHAR for int8 ? OTOH certainly there are
> > some applications which can't handle SQL_BIGINT.
> > Recently I changed the driver to return SQL_NUMERIC
> > for int8 with Microsoft-jet and it seems to work.
>
> Where can I check for the setting? Can I adjust it in the "Driver" menu?
> I'm using version 07_02_0001, announced on 15th April.
>
> Thanks, Zoltan

In response to

Responses

Browse pgsql-odbc by date

  From Date Subject
Next Message Antti Toivanen 2002-05-29 16:19:09 PostgreSQL serials in MS-Access are writable, but they are supposed to be read-only
Previous Message Kovacs Zoltan 2002-05-29 07:01:54 Re: int8 becames string in BDE :-(