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
This commit is contained in:
Julian Smart
2003-05-03 15:28:18 +00:00
parent 4b8f491298
commit 5962bdb85a
3 changed files with 59 additions and 4 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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);