X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9c136858af7a37b1ed7d5f036f8d6953f7c8d507..0b49ccf8d66e2568e2b0de85c25b406aad39f3b1:/src/common/dbtable.cpp diff --git a/src/common/dbtable.cpp b/src/common/dbtable.cpp index 384310ce8c..c25f9dc853 100644 --- a/src/common/dbtable.cpp +++ b/src/common/dbtable.cpp @@ -411,7 +411,7 @@ bool wxDbTable::bindParams(bool forUpdate) return(FALSE); SWORD fSqlType = 0; - UDWORD precision = 0; + SDWORD precision = 0; SWORD scale = 0; // Bind each column of the table that should be bound @@ -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);