BUG: Time Value Converted to Datetime Using Access ODBC DriverLast reviewed: September 9, 1996Article ID: Q119487 |
The information in this article applies to:
BUG# ODBCDBASE: 2128 (1.01.1928)
SYMPTOMSWhen a value of type time is converted and inserted into a column in a Microsoft Access data source, defined as of type datetime, the converted value is incorrectly interpreted by Microsoft Access. For example, consider the following SQL statements, executed using ODBC calls:
SQLAllocEnv(&henv); SQLAllocConnect (henv, &hdbc); SQLDriverConnect (hdbc, hwnd, "", 0, szConnStrOut,cbConnStrOutMax,&cbConnStrOut, SQL_DRIVER_PROMPT); SQLAllocStmt(hdbc, &hstmt);You can use either prepared execution or direct execution.
Prepared Execution
SQLPrepare(hstmt,"insert into test values(?)",SQL_NTS); //Bind the parameter, define rgbValue to be a TIME_STRUCT SQLBindParameter(hstmt,1,SQL_PARAM_INPUT, SQL_C_TIME, SQL_TIMESTAMP,16,rgbValue,cbValueMax, pcbValue); //Set appropriate time values in the rgbValue //Execute the prepared statement SQLExecute(hstmt); Direct Execution
SQLExecDirect(hstmt,"insert into test values({t '10:10:10'})",SQL_NTS); SQLFreeStmt (hstmt, SQL_DROP); SQLDisconnect(hdbc); SQLFreeConnect(hdbc); SQLFreeEnv(henv);When a select is executed on that table, the value returned is as expected, with date part set to 0:
0000-00-00 10:10:10However, if the table is opened in Microsoft Access, the datetime field contains time value as 12 AM with a date value of 12/30/9999.
WORKAROUNDUse the timestamp value with a date part as well as time part when inserting or doing the conversion. For SQLBindParameter, change the fCType to SQL_C_TIMESTAMP and define rgbValue to be TIMESTAMP_STRUCT, and set appropriate values in date and time parts of the structure. For SQLExecDirect, use escape clause for timestamp data instead of the escape clause for time data.
//Bind the parameter, define rgbValue to be a TIMESTAMP_STRUCT SQLBindParameter(hstmt,1,SQL_PARAM_INPUT, SQL_C_TIMESTAMP,SQL_TIMESTAMP,16,rgbValue,cbValueMax,pcbValue); Direct Execution
SQLExecDirect(hstmt, "insert into test values({ts '1990-01-01 10:10:10'}",SQL_NTS)This will set the date and time values correctly.
STATUSMicrosoft has confirmed this to be a problem in the Microsoft Access ODBC driver version 1.01.1928. We are researching this problem and will post new information here in the Microsoft Knowledge Base as it becomes available.
|
KBCategory: kbusage
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |