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 (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);
|
SetColDefs (11,wxT("LANGUAGE"), DB_DATA_TYPE_INTEGER, &NativeLanguage, SQL_C_ENUM, sizeof(NativeLanguage), FALSE,TRUE);
|
||||||
#if wxODBC_BLOB_EXPERIMENT > 0
|
#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
|
#endif
|
||||||
} // Ccontact::SetupColumns
|
} // Ccontact::SetupColumns
|
||||||
|
|
||||||
|
@@ -42,7 +42,7 @@ enum DialogModes {mView,mCreate,mEdit,mSearch};
|
|||||||
const wxChar CONTACT_TABLE_NAME[] = "contacts";
|
const wxChar CONTACT_TABLE_NAME[] = "contacts";
|
||||||
|
|
||||||
|
|
||||||
#define wxODBC_BLOB_EXPERIMENT 0
|
#define wxODBC_BLOB_EXPERIMENT 1
|
||||||
|
|
||||||
// Number of columns in the CONTACT table
|
// Number of columns in the CONTACT table
|
||||||
#if wxODBC_BLOB_EXPERIMENT > 0
|
#if wxODBC_BLOB_EXPERIMENT > 0
|
||||||
|
@@ -477,7 +477,7 @@ bool wxDbTable::bindParams(bool forUpdate)
|
|||||||
break;
|
break;
|
||||||
case DB_DATA_TYPE_BLOB:
|
case DB_DATA_TYPE_BLOB:
|
||||||
fSqlType = pDb->GetTypeInfBlob().FsqlType;
|
fSqlType = pDb->GetTypeInfBlob().FsqlType;
|
||||||
precision = 50000;
|
precision = -1;
|
||||||
scale = 0;
|
scale = 0;
|
||||||
if (colDefs[i].Null)
|
if (colDefs[i].Null)
|
||||||
colDefs[i].CbValue = SQL_NULL_DATA;
|
colDefs[i].CbValue = SQL_NULL_DATA;
|
||||||
@@ -638,6 +638,36 @@ bool wxDbTable::execUpdate(const wxString &pSqlStmt)
|
|||||||
// Record updated successfully
|
// Record updated successfully
|
||||||
return(TRUE);
|
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
|
// Problem updating record
|
||||||
return(pDb->DispAllErrors(henv, hdbc, hstmtUpdate));
|
return(pDb->DispAllErrors(henv, hdbc, hstmtUpdate));
|
||||||
@@ -1831,7 +1861,8 @@ int wxDbTable::Insert(void)
|
|||||||
// Insert the record by executing the already prepared insert statement
|
// Insert the record by executing the already prepared insert statement
|
||||||
RETCODE retcode;
|
RETCODE retcode;
|
||||||
retcode=SQLExecute(hstmtInsert);
|
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
|
// Check to see if integrity constraint was violated
|
||||||
pDb->GetNextError(henv, hdbc, hstmtInsert);
|
pDb->GetNextError(henv, hdbc, hstmtInsert);
|
||||||
@@ -1844,6 +1875,30 @@ int wxDbTable::Insert(void)
|
|||||||
return(DB_FAILURE);
|
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
|
// Record inserted into the datasource successfully
|
||||||
return(DB_SUCCESS);
|
return(DB_SUCCESS);
|
||||||
|
Reference in New Issue
Block a user