From d48d22a1961995d2bcee9bcdd05ed1f7381d5ebe Mon Sep 17 00:00:00 2001 From: Alistair Leslie-Hughes Date: Fri, 12 Jul 2024 14:40:32 +1000 Subject: [PATCH] odbc32: SQLBindParameter handle fallback function --- dlls/odbc32/proxyodbc.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/dlls/odbc32/proxyodbc.c b/dlls/odbc32/proxyodbc.c index 7cc31f7a854..335f9ab1a49 100644 --- a/dlls/odbc32/proxyodbc.c +++ b/dlls/odbc32/proxyodbc.c @@ -5721,9 +5721,38 @@ static SQLRETURN bind_parameter_win32( struct statement *stmt, SQLUSMALLINT para SQLSMALLINT value_type, SQLSMALLINT param_type, SQLULEN size, SQLSMALLINT digits, SQLPOINTER value, SQLLEN buflen, SQLLEN *len ) { + struct environment *env = (struct environment *)find_object_type(SQL_HANDLE_ENV, stmt->hdr.parent); + struct connection *conn = (struct connection *)find_object_type(SQL_HANDLE_DBC, stmt->hdr.parent); + + if (env && env->attr_version == SQL_OV_ODBC3 && conn && conn->driver_odbc_ver < 0x300) + { + /* ODBC v2 */ + /* TODO: Make function */ + if (value_type == SQL_C_TYPE_TIME) + value_type = SQL_C_TIME; + else if (value_type == SQL_C_TYPE_DATE) + value_type = SQL_C_DATE; + else if (value_type == SQL_C_TYPE_TIMESTAMP) + value_type = SQL_C_TIMESTAMP; + + /* TODO: Make function */ + if (param_type == SQL_TIME) + param_type = SQL_TYPE_TIME; + else if (param_type == SQL_DATE) + param_type = SQL_TYPE_DATE; + else if (param_type == SQL_TIMESTAMP) + param_type = SQL_TYPE_TIMESTAMP; + } + if (stmt->hdr.win32_funcs->SQLBindParameter) return stmt->hdr.win32_funcs->SQLBindParameter( stmt->hdr.win32_handle, param, io_type, value_type, param_type, size, digits, value, buflen, len ); + else if(stmt->hdr.win32_funcs->SQLBindParam) + { + return stmt->hdr.win32_funcs->SQLBindParam( stmt->hdr.win32_handle, param, value_type, param_type, + size, digits, value, len); + } + return SQL_ERROR; } -- 2.51.0