-- v2: msdasql: Use SQLDriverConnectW to connect to the ODBC driver
From: Alistair Leslie-Hughes leslie_alistair@hotmail.com
--- include/sqlucode.h | 5 +++++ 1 file changed, 5 insertions(+)
diff --git a/include/sqlucode.h b/include/sqlucode.h index f1eaace87c1..2fde3003ece 100644 --- a/include/sqlucode.h +++ b/include/sqlucode.h @@ -43,6 +43,11 @@ SQLRETURN WINAPI SQLDescribeColW(SQLHSTMT StatementHandle, SQLSMALLINT *DataType, SQLULEN *ColumnSize, SQLSMALLINT *DecimalDigits, SQLSMALLINT *Nullable);
+SQLRETURN WINAPI SQLDriverConnectW(SQLHDBC ConnectionHandle, + SQLHWND WindowHandle, WCHAR *InConnectionString, + SQLSMALLINT Length, WCHAR *OutConnectionString, SQLSMALLINT BufferLength, + SQLSMALLINT *Length2, SQLUSMALLINT DriverCompletion); + SQLRETURN WINAPI SQLExecDirectW(SQLHSTMT StatementHandle, SQLWCHAR *StatementText, SQLINTEGER TextLength);
From: Alistair Leslie-Hughes leslie_alistair@hotmail.com
--- dlls/msdasql/msdasql_main.c | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-)
diff --git a/dlls/msdasql/msdasql_main.c b/dlls/msdasql/msdasql_main.c index 017a2517a72..5d9a8a102b3 100644 --- a/dlls/msdasql/msdasql_main.c +++ b/dlls/msdasql/msdasql_main.c @@ -532,24 +532,31 @@ static HRESULT WINAPI dbinit_Initialize(IDBInitialize *iface) struct msdasql *provider = impl_from_IDBInitialize(iface); int i; SQLRETURN ret; + WCHAR connection[1024] = {0}, outstr[1024];
FIXME("%p semi-stub\n", provider);
- for(i=0; i < sizeof(provider->properties); i++) + for(i=0; i < ARRAY_SIZE(provider->properties); i++) { if (provider->properties[i].id == DBPROP_INIT_DATASOURCE) - break; - } - - if (i >= sizeof(provider->properties)) - { - ERR("Datasource not found\n"); - return E_FAIL; + { + wcscat(connection, L"DSN="); + wcscat(connection, V_BSTR(&provider->properties[i].value)); + wcscat(connection, L";"); + } + else if (provider->properties[i].id == DBPROP_INIT_PROVIDERSTRING) + { + if (SysStringLen(V_BSTR(&provider->properties[i].value))) + { + wcscat(connection, V_BSTR(&provider->properties[i].value)); + wcscat(connection, L";"); + } + } }
- ret = SQLConnectW( provider->hdbc, (SQLWCHAR *)V_BSTR(&provider->properties[i].value), - SQL_NTS, NULL, SQL_NTS, NULL, SQL_NTS ); - TRACE("SQLConnectW ret %d\n", ret); + ret = SQLDriverConnectW( provider->hdbc, NULL, connection, wcslen(connection), + outstr, ARRAY_SIZE(outstr), NULL, 0); + TRACE("SQLDriverConnectW ret %d\n", ret); if (ret != SQL_SUCCESS) { dump_sql_diag_records(SQL_HANDLE_DBC, provider->hdbc);