[unixODBC-dev] Issue with ODBC on 64 bit machine while using SQLUINTEGER and SQLINTEGER

Martin Evans martin.evans at easysoft.com
Thu Mar 27 11:04:20 GMT 2008


qureshifaizan faiz wrote:
> Hi nick,
> Thanks for the reply.please find the attached sample code
> along with the sample table description to give you a bit
> of more sight.I am very grateful  for your interest in this
> issue. Waiting for your reply,guys because this code
> works in 32 bit machine iam not able to find the problem.
> why it is not working on  a 64 bit machine.
> 
> Regards,
> Faizan

How are you compiling your code? Perhaps your MySQL driver was compiled 
with SIZEOF_LONG = 8 and your code is compiled with SIZEOF_LONG=4 ! Only 
guessing as the unixODBC sql* header files test SIZEOF_LONG but nothing 
is recorded in unixODBC itself to say how it was compiled. That means 
you can compile unixODBC with SIZEOF_LONG = 8, your driver with 
SIZEOF_LONG=4 and your app with SIZEOF_LONG=xx and they won't work together.

Martin
-- 
Martin J. Evans
Easysoft Limited
http://www.easysoft.com


> On Thu, Mar 27, 2008 at 2:58 PM, Nick Gorham <nick at lurcher.org 
> <mailto:nick at lurcher.org>> wrote:
> 
>     qureshifaizan faiz wrote:
> 
>      >Hello Freinds,
>      >Thanks for the reply.Take this simple example
>      >
>      >"select ID from TEST_TABLE where TEST_VALUE = ?"
>      >
>      >This query works fine in CLI using mysql 5.1.
>      >
>      >But in the application when i EXECUTE this query iam unable to
>     fetch the
>      >data using the SQLFetch and it returns DB_NO_DATA with a result
>     code 100 or
>      >some times gives a junk value.
>      >The procedure i have followed is as follows.
>      >
>      >i have used SQLUINTEGER for the input parameter in case of
>     SQLBindParameter.
>      >
>      >SQLUINTEGER value;
>      >SQLBindParameter(sthdl,1,SQL
>      >_PARAM_INPUT,SQL_C_ULONG,SQL_INTEGER,00,0,&value,00,00);
>      >
>      >SQINTEGER indIdValue;
>      >SQLUINTEGER idValue;
>      >retCode =
>      >SQLBindCol(sthdl,1,SQL_C_ULONG,&idValue,sizeof(idValue),&indIdValue);
>      >and same in the case of out put SQLBindCol
>      >
>      >//steps followed are.
>      >SQLPrepare
>      >SQLBindParameter
>      >SQLExecute
>      >SQLBindCol
>      >SQLFetch
>      >
>      >Iam executing this on a 64 bit machine with mysql 5.1.
>      >
>      >But the same code works fine on a 32 bit machine with mysql4.0.
>      >
>      >Iam not getting clue what the problem is.I will be very grateful
>     if you
>      >could help
>      >me solve this problem
>      >
>      >Regards
>      >Faizan.
>      >
>      >
>      >
>     The sample code looks fine, assuming sizeof( SQLUINTEGER ) == 4 as it
>     should. I would check with the MyODBC folk, as none of the values in the
>     SQLBindParameter/SQLBindCol are altered by unixODBC, and are passed onto
>     the driver.
> 
>     Just one thing, the indValue should be a SQLLEN type, and there are two
>     incompatible definitions of that, but again, in this case its between
>     the ap and the driver, the DM doesn't get involved. Even if the size was
>     wrong, as long as it didn;t end up being -1 (SQL_NULL_DATA) the driver
>     should ignore the length for fixed length type like a integer.
> 
>     --
>     Nick



More information about the unixODBC-dev mailing list