Adam Gibson
2005-Nov-15 09:04 UTC
[Wine] builtin odbc32 connection does not strip { } chars from client specified driver name
I finally figured out why my ODBC connections would fail even though I was following the directions on every odbc32 wine help site that I could find. Some client apps specify the SQL connection string with { } chars surrounding the driver name. Windows strips those when matching an ODBC driver so the {SQL Server} driver name specified by the client would match SQL Server . Because I could not change the application I changed the odbcinst.ini and DSNs in odbc.ini to reference a driver called {SQL Server} and then the connection worked. If anyone knows the odbc32 code that sounds like it would be an easy thing to filter out when the client specifies { } chars inside a connection string. Put simpley... On a real Windows2000 system the connection string with {SQL Server} matches a driver called SQL Server . In wine it will not. ---- Failure driver is SQL Server, client requesting {SQL Server} ---- 0009:Call advapi32.RegQueryValueExA(00000080,7fcbeec0 "SQL Server",00000000,00000000,00000000,00000000) ret=4ca61cbc ... cut ... 0009:Call odbc32.SQLDriverConnect(7d2d1760,00010024,7e36163c "driver={SQL Server};server=10.1.1.1;database=somedatabase;uid=someuserid;pwd=somepassword;",0000004f,7fcbf53c "",000000ff,7fcbf6cc "<\x136~\x03",00000003) ret=236756c9 0009:Ret odbc32.SQLDriverConnect() retval=ffffffff ret=236756c9 0009:Call odbc32.SQLError(7d2cbe90,7d2d1760,00000000,7fcbf4f4 "",7fcbf508,7fcbf2a0 "",000001ff,7fcbf4ea) ret=23675188 0009:Ret odbc32.SQLError() retval=00000000 ret=23675188 0009:Call odbc32.SQLError(7d2cbe90,7d2d1760,00000000,7fcbf4f4 "IM002",7fcbf508,7fcbf2a0 "[unixODBC][Driver Manager]Data source name not found, and no default driver specified",000001ff,7fcbf4ea) ret=23675188 ---- END ---- ---- Success driver is {SQL Server}, client requesting {SQL Server} ---- 0009:Call advapi32.RegQueryValueExA(00000080,7fcbeec0 "{SQL Server}",00000000,00000000,00000000,00000000) ret=2150bcbc ... cut ... 0009:Call odbc32.SQLDriverConnect(7c74a770,00010024,7e36163c "driver={SQL Server};server=10.10.10.110;database=pa_lack_01;uid=sa;pwd=badguys;",0000004f,7fcbf53c "",000000ff,7fcbf6cc "<\x136~\x03",00000003) ret=236756c9 0009:Ret odbc32.SQLDriverConnect() retval=00000000 ret=236756c9 ---- END ---- The app still doesnt quite work yet but I am getting closer. It starts up at least now.
Bill Medland
2005-Nov-15 10:10 UTC
[Wine] builtin odbc32 connection does not strip { } chars from client specified driver name
On November 15, 2005 07:04 am, Adam Gibson wrote:> I finally figured out why my ODBC connections would fail even > though I was following the directions on every odbc32 wine > help site that I could find. > > Some client apps specify the SQL connection string with { } > chars surrounding the driver name. Windows strips those when > matching an ODBC driver so the {SQL Server} driver name > specified by the client would match SQL Server . Because > I could not change the application I changed the odbcinst.ini > and DSNs in odbc.ini to reference a driver called {SQL Server} > and then the connection worked. If anyone knows the odbc32 > code that sounds like it would be an easy thing to filter out > when the client specifies { } chars inside a connection > string.Surely it should be changed in the unix ODBC layer; the wine builtin odbc32.dll is merely (almost) a proxy.> > Put simpley... On a real Windows2000 system the connection > string with {SQL Server} matches a driver called SQL Server > . In wine it will not. > > ---- Failure driver is SQL Server, client requesting {SQL > Server} ---- 0009:Call > advapi32.RegQueryValueExA(00000080,7fcbeec0 "SQL > Server",00000000,00000000,00000000,00000000) ret=4ca61cbc ... > cut ... > 0009:Call odbc32.SQLDriverConnect(7d2d1760,00010024,7e36163c > "driver={SQL > Server};server=10.1.1.1;database=somedatabase;uid=someuserid;p >wd=somepassword;",0000004f,7fcbf53c "",000000ff,7fcbf6cc > "<\x136~\x03",00000003) ret=236756c9 > > 0009:Ret odbc32.SQLDriverConnect() retval=ffffffff > ret=236756c9 0009:Call > odbc32.SQLError(7d2cbe90,7d2d1760,00000000,7fcbf4f4 > "",7fcbf508,7fcbf2a0 "",000001ff,7fcbf4ea) ret=23675188 > 0009:Ret odbc32.SQLError() retval=00000000 ret=23675188 > 0009:Call odbc32.SQLError(7d2cbe90,7d2d1760,00000000,7fcbf4f4 > "IM002",7fcbf508,7fcbf2a0 "[unixODBC][Driver Manager]Data > source name not found, and no default driver > specified",000001ff,7fcbf4ea) ret=23675188 ---- END ---- > > > ---- Success driver is {SQL Server}, client requesting {SQL > Server} ---- 0009:Call > advapi32.RegQueryValueExA(00000080,7fcbeec0 "{SQL > Server}",00000000,00000000,00000000,00000000) ret=2150bcbc ... > cut ... > 0009:Call odbc32.SQLDriverConnect(7c74a770,00010024,7e36163c > "driver={SQL > Server};server=10.10.10.110;database=pa_lack_01;uid=sa;pwd=bad >guys;",0000004f,7fcbf53c "",000000ff,7fcbf6cc > "<\x136~\x03",00000003) ret=236756c9 0009:Ret > odbc32.SQLDriverConnect() retval=00000000 ret=236756c9 ---- > END ---- > > The app still doesnt quite work yet but I am getting closer. > It starts up at least now. > > _______________________________________________ > wine-users mailing list > wine-users@winehq.org > http://www.winehq.org/mailman/listinfo/wine-users-- Bill Medland mailto:billmedland@mercuryspeed.com http://webhome.idirect.com/~kbmed