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: "Lowden, James K" <LowdenJK AT bernstein.com>
  • To: 'FreeTDS Development Group' <freetds AT lists.ibiblio.org>
  • Subject: RE: [freetds] Error: FreeTDS+WINE
  • Date: Tue, 16 Sep 2003 14:04:54 -0400

> 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
-----------------------------------------
The information contained in this transmission may contain privileged and
confidential information and is intended only for the use of the person(s)
named above. If you are not the intended recipient, or an employee or agent
responsible for delivering this message to the intended recipient, any
review, dissemination, distribution or duplication of this communication is
strictly prohibited. If you are not the intended recipient, please contact
the sender immediately by reply e-mail and destroy all copies of the original
message. Please note that we do not accept account orders and/or instructions
by e-mail, and therefore will not be responsible for carrying out such orders
and/or instructions.






Archive powered by MHonArc 2.6.24.

Top of Page