On Mon, 2003-03-10 at 09:40, Naumann, Frank wrote: > Hi all, Hi !!
> > I found a problem (bug?) when updating a blob column via MyODBC. The > statement i run is like that: > > UPDATE blob_table SET blob_col = ? where id = ? > > when i do NOT bind the restriction as input parameter, but write it directly > in the string, it works perfectly. > > but when i want to bind the restriction directly, the following happens: > > 1. I bind the blob_col with SQL_LEN_DATA_AT_EXEC(length) as indikator > (SQLBindParameter returns SQL_SUCCESS) > 2. I bind the id restriction directly to a program variable > (SQLBindParameter returns SQL_SUCCESS) > 3. I call SQLExecute, it returns SQL_NEED_DATA as expected. > 4. I call SQLParamData to access the blob_col, it returns also SQL_NEED_DATA > as expected. > 5. I call several times SQLPutData to fill the blob_col, each returns with > SQL_SUCCESS > 6. I call SQLParamData to indicate that the blob_col is populated with data > completely and would expect SQL_SUCCESS. I just tested it, and it returns SQL_SUCCESS unless if you have more parameters data to be supplied during the run-time. Possible reason could be, you might have specified the same pcbLength buffer to all parameters in SQLBindParameter. Here is a simple snippet from the test suite for the similar case: .. .. rc = SQLPrepare(hstmt,"update t_putdata set c2= ? where c1 = ?",SQL_NTS); mystmt(hstmt,rc); rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR, SQL_LONGVARCHAR,0,0, (SQLPOINTER)1,0,&pcbLength); rc = SQLBindParameter(hstmt,2,SQL_PARAM_INPUT,SQL_C_LONG, SQL_INTEGER,0,0,&c1,0,NULL); pcbLength = SQL_LEN_DATA_AT_EXEC(0); c1 = 10; rc = SQLExecute(hstmt); myassert(rc == SQL_NEED_DATA); rc = SQLParamData(hstmt, &token); myassert(rc == SQL_NEED_DATA); strcpy(data,"mysql ab"); rc = SQLPutData(hstmt,data,6); mystmt(hstmt,rc); strcpy(data,"- the open source database company"); rc = SQLPutData(hstmt,data,strlen(data)); mystmt(hstmt,rc); rc = SQLParamData(hstmt, &token); mystmt(hstmt,rc); SQLFreeStmt(hstmt, SQL_RESET_PARAMS); SQLFreeStmt(hstmt, SQL_CLOSE); .. .. The data updated is: data: mysql - the open source database company(40) Thanks -- Regards, Venu For technical support contracts, go to https://order.mysql.com __ ___ ___ ____ __ / |/ /_ __/ __/ __ \/ / Mr. Venu <[EMAIL PROTECTED]> / /|_/ / // /\ \/ /_/ / /__ MySQL AB, Developer /_/ /_/\_, /___/\___\_\___/ Palo Alto, CA-94306, USA <___/ www.mysql.com Join MySQL Users Conference and Expo: http://www.mysql.com/events/uc2003/ --------------------------------------------------------------------- Before posting, please check: http://www.mysql.com/manual.php (the manual) http://lists.mysql.com/ (the list archive) To request this thread, e-mail <[EMAIL PROTECTED]> To unsubscribe, e-mail <[EMAIL PROTECTED]> Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php