[freetds] Are LOBs supported?

Sebastien FLAESCH sf at 4js.com
Tue Jan 8 11:44:03 EST 2008


ZIGLIO, Frediano, VF-IT wrote:
>> Sebastien FLAESCH wrote:
>>>     SQLBindParameter(m_hstmt, 2, SQL_PARAM_INPUT,
>>>                      SQL_C_BINARY,
>>>                      SQL_LONGVARCHAR, 0x10000000, 0, buf2, 0,
>>>                      &vind1);
>>>     CHECK_RCODE(SQL_HANDLE_STMT,m_hstmt,"SQLBindParameter 2");
>> Note that we have to bind the blob params with a large size 
>> for SQL Server
>> drivers, otherwise you can't insert into the database...
>>
>> -> get SQLSTATE 07002 "COUNT field incorrect or syntax error" 
>> ... no idea why.
>>
>> Other APIs like DB2 CLI don't need to pass a size in such case.
>>
>> Don't know if this matters when using SQL_DATA_AT_EXEC with 
>> FreeTDS, but
>> wanted to warn you about this strange thing.
>>
>> Note also that we use column-wise binding to fetch rows with:
>>
>> SQL_ATTR_ROW_BIND_TYPE, SQL_BIND_BY_COLUMN
>>
>> The test does not use this but our driver does, so if you fix 
>> this problem
>> I can continue to test with our driver code.
>>
>> Thanks!
>> Seb
> 
> SQL_DATA_AT_EXEC is not supported. SQLGetInfo report this. Perhaps error
> from our library is not correct but it's not easy to implement (i'll fix
> error report ASAP). You can however use SQL_LEN_AT_EXEC witch require a
> length and which should be even faster.

Ok will try the SQL_LEN_AT_EXEC way...

  I noted also that in many
> examples you bind parameters after SQLPrepare. I would suggest to bind
> before. In many cases (using many drivers) it's faster.

Thanks for the tip, but actually we have to do SQLPrepare() before because
the basic SQL instructions in Informix 4gl are PREPARE, then EXECUTE with
parameter definition and values:

PREPARE s1 FROM "INSERT INTO tab VALUES( ?, ?, ? )"  -- SQLPrepare()
EXECUTE s1 USING var1, var2, var3  -- SQLExecute()

...


  I don't
> understand how your example works... when does SQLPutData return
> "done"??

Yep the sample is not very nice (sorry for that).

I think the while loop stops because rcode is reset by the line calling SQLParamData().

  while (rcode == SQL_NEED_DATA) {

Anyway, thanks a lot for you help.
I really appreciate.

Seb

> 
> freddy77
> _______________________________________________
> FreeTDS mailing list
> FreeTDS at lists.ibiblio.org
> http://lists.ibiblio.org/mailman/listinfo/freetds
> 




More information about the FreeTDS mailing list