Skip to Content.
Sympa Menu

freetds - RE: [freetds] Error: FreeTDS+WINE

freetds AT lists.ibiblio.org

Subject: FreeTDS Development Group

List archive

Chronological Thread  
  • From: "Rainer" <sourceforge AT powered.net>
  • To: "FreeTDS Development Group" <freetds AT lists.ibiblio.org>
  • Subject: RE: [freetds] Error: FreeTDS+WINE
  • Date: Tue, 16 Sep 2003 17:05:13 -0300 (BRT)

>> From: Rainer [mailto:sourceforge AT powered.net]
>> Sent: September 16, 2003 12:09 PM
>> >
>> > AFAIK, you're the first person to try FreeTDS with WINE.
>> Big frameworks
>> > like that tend to make a lot of calls and require a fairly complete
>> > implementation. How close we are to what WINE needs, I
>> don't know, but
>> > I'm not surprised some things are missing.
>>
>> I'm probably not the first person to try this combination... AFAIK,
>> FreeTDS is the only free and reliable option to migrate a
>> 'sql2k-enabled' application to *nix/wine.
>
> I didn't know that.
>
>> This particular application is a government system used by
>> thousands of
>> people here in Brazil... if we manage to complete its
>> migration to Linux, that would be great.
>
> Very interesting. I hope we can help.
>
> The log file unfortunately doesn't say anything helpful. There is a line:
>
> SQLFetch: NO_DATA_FOUND
>
> but that's normal (and should say so, IMHO). It just means you read the
> last row.
>
> This area has been completely redone since 0.61.2; we received a giant
> patch
> that Frediano has been applying. That's why the message changed.
>
> So, let's look at the source.
>
>> "Run-time error 40002: 01S02: [FreeTDS][SQL Server] Option value
>> changed"
>
> The message is generated by our _SQLSetStmtAttr(), used by
> SQLSetStmtAttr()
> and SQLSetStmtOption(). According to M$, it means, "The driver did not
> support the value specified in ValuePtr, or the value specified in
> ValuePtr
> was invalid because of implementation working conditions, so the driver
> substituted a similar value." I.e., we don't support it.
>
> However, according to the ODBC spec (documented in Microsoft's MDAC SDK),
> when SQLSetStmtAttr() returns this SQLSTATE, it should return
> SQL_SUCCESS_WITH_INFO. We don't; we return SQL_ERROR. For example, in
> CVS,
> src/obdc/odbc.c:4619:
>
> case SQL_ATTR_CONCURRENCY:
> if (stmt->attr.attr_concurrency != ui) {
> odbc_errs_add(&stmt->errs, "01S02", NULL, NULL);
> ODBC_RETURN(stmt, SQL_ERROR);
> }
> stmt->attr.attr_concurrency = ui;
> break;
>
> A quick fix which (afaict) can't hurt and might help, would be to change
> those 7 cases to return SQL_SUCCESS_WITH_INFO, as they should. At least
> that way, WINE wouldn't see it as an error.
>
> Anyway, I hope this is some use. Let us know how it works out.
>
> --jkl


James,

I've made the changes to the source code (odbc.c) as you suggested, and
the error while running the application with wine has changed to:
"Run-time error 40009: No current row".
I've noticed something interesting in the logs this time... it actually
goes a bit further, and tries to execute a stored procedure called by the
application (EXECUTE dbo.spLicenca).. ('rainer-linux' is my machine's
hostname... 'Licenca' = 'License' in portuguese)
Ok, some additional facts... right at the beginning of the log, it says
"converting 0 bytes of SYBASE"... is freetds assuming that this is a
sybase database? (while in fact its mssql2k).
The new log is here: http://www.powered.net/rainer/freetds-09-16.log

Thanks again for the help,
Rainer





Archive powered by MHonArc 2.6.24.

Top of Page