Re: Windows, ODBC drivers and strange points ... - Mailing list pgsql-odbc
From | Dave Page |
---|---|
Subject | Re: Windows, ODBC drivers and strange points ... |
Date | |
Msg-id | E7F85A1B5FF8D44C8A1AF6885BC9A0E4CC329F@ratbert.vale-housing.co.uk Whole thread Raw |
In response to | Windows, ODBC drivers and strange points ... (Marten Feldtmann <m.feldtmann@t-online.de>) |
Responses |
Re: Windows, ODBC drivers and strange points ...
|
List | pgsql-odbc |
> -----Original Message----- > From: pgsql-odbc-owner@postgresql.org > [mailto:pgsql-odbc-owner@postgresql.org] On Behalf Of Marten Feldtmann > Sent: 09 October 2005 12:04 > To: pgsql-odbc@postgresql.org > Subject: [ODBC] Windows, ODBC drivers and strange points ... > > Hello, > > I'm trying to use PostgreSQL via ODBC under Windows > and IBM VisualAge Smalltalk. Normally ODBC works > pretty well, but I've found two problems with the > ODBC driver of PostgreSQL, which makes the whole > thing not working: > > > a) All column names are returned from the database > in lowercase and not in the form the client send > then when doing the "create table ..." statement. > > Which leads to the problem, that other frameworks > on top of it do not find their columns do make the > oo-rdbms mapping stuff. No, table names are returns in the correct case: Successfully connected to DSN 'foo'. SQLTables: In: StatementHandle = 0x003B18D8, CatalogName = SQL_NULL_HANDLE, NameLength1 = 0, SchemaName = SQL_NULL_HANDLE, NameLength2 = 0, TableName = SQL_NULL_HANDLE, NameLength3 = 0, TableType = SQL_NULL_HANDLE, NameLength4 = 0 Return: SQL_SUCCESS=0 Get Data All: "TABLE_QUALIFIER", "TABLE_OWNER", "TABLE_NAME", "TABLE_TYPE", "REMARKS" <Null>, "public", "MiXeD_CaSe_TaBlE", "TABLE", "" <Null>, "public", "UPPER_CASE_TABLE", "TABLE", "" <Null>, "public", "lower_case_table", "TABLE", "" 3 rows fetched from 5 columns. Are you sure you quoted the names when you created them? If not, the server will have folded them to lower case. > b) All strings returned by the ODBC driver are defined > in a buffer, which is offered to the ODBC subsystem > as a string doubled in size - though I told the > databaase NOT to create a UNICODE db. > > An example: a column has the result type char(15). The > ODBC drivers put the result of this column into a > memory with a size of 30 characters. > > The ODBC subsystem now thinks: fine - I've a character > column with size 30 and creates a string 30 characters > long and one gets 15 corrects characters and 15 "0" (null) > bytes. With 3 bytes of data, (ie. The word 'foo') I get: SQLGetData: In: Statementhandle = 0x003B18D8, ColumnNumber = 1, TargetType = SQL_C_CHAR=1, TargetValuePtr = 0x000952D0, BufferLength = 600, StrLen_or_IndPtr = 0x00093E58 Return: SQL_SUCCESS=0 Out: *TargetValuePtr = "foo", *StrLen_or_IndPtr = 3 When I request an SQL_C_CHAR, or if I request a SQL_C_WCHAR: SQLGetData: In: Statementhandle = 0x003B18D8, ColumnNumber = 1, TargetType = SQL_C_WCHAR=-8, TargetValuePtr = 0x00097FF8, BufferLength = 600, StrLen_or_IndPtr = 0x0009F2F8 Return: SQL_SUCCESS=0 Out: *TargetValuePtr = "foo", *StrLen_or_IndPtr = 6 Regards, Dave.
pgsql-odbc by date: