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:
@@ -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
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user