]> git.saurik.com Git - wxWidgets.git/commitdiff
Applied patch [ 701238 ] Added BLOB support to dbtable.
authorJulian Smart <julian@anthemion.co.uk>
Sat, 3 May 2003 15:28:18 +0000 (15:28 +0000)
committerJulian Smart <julian@anthemion.co.uk>
Sat, 3 May 2003 15:28:18 +0000 (15:28 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@20458 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

samples/db/dbtest.cpp
samples/db/dbtest.h
src/common/dbtable.cpp

index 0c91b117d894001462e5db875ca7dd516bf91f36..def03f519a91c013cf92c523888de46186365559 100644 (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
 
index 780a58e27e0e499c79f935efe7f1f1f7caf0438f..e7b5749c84cd013106ec9f1e2fe01952365d806e 100644 (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
index 384310ce8c49da69c8b04fc7c3073671d7921a2b..8588f72fe799309adc9c0a13ff7bf4a39d09fc45 100644 (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);