From 5962bdb85a0cf6accba5623b85af7cd44b499806 Mon Sep 17 00:00:00 2001 From: Julian Smart Date: Sat, 3 May 2003 15:28:18 +0000 Subject: [PATCH] Applied patch [ 701238 ] Added BLOB support to dbtable. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@20458 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- samples/db/dbtest.cpp | 2 +- samples/db/dbtest.h | 2 +- src/common/dbtable.cpp | 59 ++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 59 insertions(+), 4 deletions(-) diff --git a/samples/db/dbtest.cpp b/samples/db/dbtest.cpp index 0c91b117d8..def03f519a 100644 --- a/samples/db/dbtest.cpp +++ b/samples/db/dbtest.cpp @@ -1068,7 +1068,7 @@ void Ccontact::SetupColumns() SetColDefs (10,wxT("LINE_CNT"), DB_DATA_TYPE_INTEGER, &LinesOfCode, SQL_C_ULONG, sizeof(LinesOfCode), FALSE,TRUE); SetColDefs (11,wxT("LANGUAGE"), DB_DATA_TYPE_INTEGER, &NativeLanguage, SQL_C_ENUM, sizeof(NativeLanguage), FALSE,TRUE); #if wxODBC_BLOB_EXPERIMENT > 0 - SetColDefs (12,wxT("PICTURE"), DB_DATA_TYPE_BLOB, Picture, SQL_LONGVARBINARY, sizeof(Picture), FALSE,TRUE); + SetColDefs (12,wxT("PICTURE"), DB_DATA_TYPE_BLOB, Picture, SQL_C_BINARY, sizeof(Picture), FALSE,TRUE); #endif } // Ccontact::SetupColumns diff --git a/samples/db/dbtest.h b/samples/db/dbtest.h index 780a58e27e..e7b5749c84 100644 --- a/samples/db/dbtest.h +++ b/samples/db/dbtest.h @@ -42,7 +42,7 @@ enum DialogModes {mView,mCreate,mEdit,mSearch}; const wxChar CONTACT_TABLE_NAME[] = "contacts"; -#define wxODBC_BLOB_EXPERIMENT 0 +#define wxODBC_BLOB_EXPERIMENT 1 // Number of columns in the CONTACT table #if wxODBC_BLOB_EXPERIMENT > 0 diff --git a/src/common/dbtable.cpp b/src/common/dbtable.cpp index 384310ce8c..8588f72fe7 100644 --- a/src/common/dbtable.cpp +++ b/src/common/dbtable.cpp @@ -477,7 +477,7 @@ bool wxDbTable::bindParams(bool forUpdate) break; case DB_DATA_TYPE_BLOB: fSqlType = pDb->GetTypeInfBlob().FsqlType; - precision = 50000; + precision = -1; scale = 0; if (colDefs[i].Null) colDefs[i].CbValue = SQL_NULL_DATA; @@ -638,6 +638,36 @@ bool wxDbTable::execUpdate(const wxString &pSqlStmt) // Record updated successfully return(TRUE); } + else if (retcode == SQL_NEED_DATA) + { + PTR pParmID; + while ((retcode = SQLParamData(hstmtUpdate, &pParmID) == SQL_NEED_DATA)) + { + // Find the parameter + int i; + for (i=0; i < noCols; i++) + { + if (colDefs[i].PtrDataObj == pParmID) + { + // We found it. Store the parameter. + retcode = SQLPutData(hstmtUpdate, pParmID, colDefs[i].SzDataObj); + if (retcode != SQL_SUCCESS) + { + pDb->DispNextError(); + return pDb->DispAllErrors(henv, hdbc, hstmtUpdate); + } + break; + } + } + } + if (retcode == SQL_SUCCESS || + retcode == SQL_NO_DATA_FOUND || + retcode == SQL_SUCCESS_WITH_INFO) + { + // Record updated successfully + return(TRUE); + } + } // Problem updating record return(pDb->DispAllErrors(henv, hdbc, hstmtUpdate)); @@ -1831,7 +1861,8 @@ int wxDbTable::Insert(void) // Insert the record by executing the already prepared insert statement RETCODE retcode; retcode=SQLExecute(hstmtInsert); - if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO) + if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO && + retcode != SQL_NEED_DATA) { // Check to see if integrity constraint was violated pDb->GetNextError(henv, hdbc, hstmtInsert); @@ -1844,6 +1875,30 @@ int wxDbTable::Insert(void) return(DB_FAILURE); } } + if (retcode == SQL_NEED_DATA) + { + PTR pParmID; + while ((retcode = SQLParamData(hstmtInsert, &pParmID) == SQL_NEED_DATA)) + { + // Find the parameter + int i; + for (i=0; i < noCols; i++) + { + if (colDefs[i].PtrDataObj == pParmID) + { + // We found it. Store the parameter. + retcode = SQLPutData(hstmtInsert, pParmID, colDefs[i].SzDataObj); + if (retcode != SQL_SUCCESS) + { + pDb->DispNextError(); + pDb->DispAllErrors(henv, hdbc, hstmtInsert); + return(DB_FAILURE); + } + break; + } + } + } + } // Record inserted into the datasource successfully return(DB_SUCCESS); -- 2.45.2