Re: Windows, ODBC drivers and strange points ... - Mailing list pgsql-odbc

From Marten Feldtmann
Subject Re: Windows, ODBC drivers and strange points ...
Date
Msg-id 434A4C48.7030101@t-online.de
Whole thread Raw
In response to Re: Windows, ODBC drivers and strange points ...  ("Dave Page" <dpage@vale-housing.co.uk>)
Responses Re: Windows, ODBC drivers and strange points ...
List pgsql-odbc
Dave Page schrieb:

>>
>>
>>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.
>
>
>
This means, that under PostgreSQL one should in general quote
the column names when creating them ? Do I also have to quote
them in the SELECT statements ???

>>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.
>
 Ok, this is true - but this is not my problem. How do I get to know, that
the source type is either SQL_C_CHAR or SQL_C_WCHAR - this is the problem.

I thought this would be possible with the COlumnDesc function - but this
seems not to be the case.

 By the way: what happens if you have UNICODE values in the buffer and
you want the target type SQL_C_CHAR ??? Is this allowed ? What code page
is then used ? The system code page or the application code page ?

 Marten



pgsql-odbc by date:

Previous
From: Marten Feldtmann
Date:
Subject: Re: Windows, ODBC drivers and strange points ...
Next
From: Cleber Nardelli
Date:
Subject: Problem with psqlODBC on "Cache Size"