mirror of
https://github.com/mdbtools/mdbtools.git
synced 2025-06-28 15:39:02 +08:00
parent
16b2970931
commit
a0e72c5dfa
@ -78,6 +78,18 @@ struct _sql_bind_info {
|
|||||||
struct _sql_bind_info *next;
|
struct _sql_bind_info *next;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef SQLRETURN (*_mdb_odbc_sql_data_callback)
|
||||||
|
(SQLHSTMT hstmt,
|
||||||
|
SQLUSMALLINT icol,
|
||||||
|
SQLSMALLINT fCType,
|
||||||
|
SQLPOINTER rgbValue,
|
||||||
|
SQLLEN cbValueMax,
|
||||||
|
SQLLEN *pcbValue);
|
||||||
|
|
||||||
|
SQLRETURN _mdb_SQLFetch(
|
||||||
|
SQLHSTMT hstmt,
|
||||||
|
_mdb_odbc_sql_data_callback DataCallback);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -835,13 +835,13 @@ unbind_columns(struct _hstmt *stmt)
|
|||||||
stmt->bind_head = NULL;
|
stmt->bind_head = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
SQLRETURN SQL_API SQLFetch(
|
SQLRETURN _mdb_SQLFetch(
|
||||||
SQLHSTMT hstmt)
|
SQLHSTMT hstmt,
|
||||||
|
_mdb_odbc_sql_data_callback DataCallback)
|
||||||
{
|
{
|
||||||
struct _hstmt *stmt = (struct _hstmt *) hstmt;
|
struct _hstmt *stmt = (struct _hstmt *) hstmt;
|
||||||
struct _sql_bind_info *cur = stmt->bind_head;
|
struct _sql_bind_info *cur = stmt->bind_head;
|
||||||
|
|
||||||
TRACE("SQLFetch");
|
|
||||||
if ( stmt->sql->limit >= 0 && stmt->rows_affected == stmt->sql->limit ) {
|
if ( stmt->sql->limit >= 0 && stmt->rows_affected == stmt->sql->limit ) {
|
||||||
return SQL_NO_DATA_FOUND;
|
return SQL_NO_DATA_FOUND;
|
||||||
}
|
}
|
||||||
@ -850,7 +850,7 @@ SQLRETURN SQL_API SQLFetch(
|
|||||||
while (cur && (final_retval == SQL_SUCCESS || final_retval == SQL_SUCCESS_WITH_INFO)) {
|
while (cur && (final_retval == SQL_SUCCESS || final_retval == SQL_SUCCESS_WITH_INFO)) {
|
||||||
/* log error ? */
|
/* log error ? */
|
||||||
SQLLEN lenbind = 0;
|
SQLLEN lenbind = 0;
|
||||||
SQLRETURN this_retval = SQLGetData(hstmt, cur->column_number, cur->column_bindtype,
|
SQLRETURN this_retval = DataCallback(hstmt, cur->column_number, cur->column_bindtype,
|
||||||
cur->varaddr, cur->column_bindlen, &lenbind);
|
cur->varaddr, cur->column_bindlen, &lenbind);
|
||||||
if (cur->column_lenbind)
|
if (cur->column_lenbind)
|
||||||
*(cur->column_lenbind) = lenbind;
|
*(cur->column_lenbind) = lenbind;
|
||||||
@ -866,6 +866,12 @@ SQLRETURN SQL_API SQLFetch(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SQLRETURN SQL_API SQLFetch(
|
||||||
|
SQLHSTMT hstmt) {
|
||||||
|
TRACE("SQLFetch");
|
||||||
|
return _mdb_SQLFetch(hstmt, SQLGetData);
|
||||||
|
}
|
||||||
|
|
||||||
SQLRETURN SQL_API SQLFreeConnect(
|
SQLRETURN SQL_API SQLFreeConnect(
|
||||||
SQLHDBC hdbc)
|
SQLHDBC hdbc)
|
||||||
{
|
{
|
||||||
|
@ -267,7 +267,8 @@ SQLRETURN SQL_API SQLGetDataW(
|
|||||||
SQLLEN cbValueMax,
|
SQLLEN cbValueMax,
|
||||||
SQLLEN *pcbValue)
|
SQLLEN *pcbValue)
|
||||||
{
|
{
|
||||||
//todo: treat numbers correctly
|
if (fCType != SQL_C_CHAR)
|
||||||
|
return SQLGetData(hstmt, icol, fCType, rgbValue, cbValueMax, pcbValue);
|
||||||
|
|
||||||
size_t l=cbValueMax*4+1;
|
size_t l=cbValueMax*4+1;
|
||||||
SQLCHAR *tmp=calloc(l,1);
|
SQLCHAR *tmp=calloc(l,1);
|
||||||
@ -277,6 +278,12 @@ SQLRETURN SQL_API SQLGetDataW(
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SQLRETURN SQL_API SQLFetchW(
|
||||||
|
SQLHSTMT hstmt) {
|
||||||
|
TRACE("SQLFetchW");
|
||||||
|
return _mdb_SQLFetch(hstmt, SQLGetDataW);
|
||||||
|
}
|
||||||
|
|
||||||
SQLRETURN SQL_API SQLGetInfoW(
|
SQLRETURN SQL_API SQLGetInfoW(
|
||||||
SQLHDBC hdbc,
|
SQLHDBC hdbc,
|
||||||
SQLUSMALLINT fInfoType,
|
SQLUSMALLINT fInfoType,
|
||||||
|
Loading…
Reference in New Issue
Block a user