Help - SQLBindParameter not used for all parameters error
I have trouble writing a character into the database (the column is declared as char(2) not null) because I figured that if it appends a null at the end of the character data I want to insert (i.e.'A\0'), it would still fit. I bound the parameters first before assigning the data and executing a statement to write into the database. This is how I bind it: --- g_rc = SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 2, 0, (SQLPOINTER)chDataPart, 1, NULL); -if I put NULL in the last parameter in the SQLBindParameter function, I get the following error for the SQLParamData function call, Error code: HY090 Error message: SQLBindParameter not used for all parameters. However, I see many working examples that sets the last parameter to NULL when it is a string. I'm not sure if it works for a character. I've checked the manual and list archives and found out that the above error message means [there is an error in the number of parameters in an insert statement]. What does this mean? --- g_rc = SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 2, 0, (SQLPOINTER)chDataPart, 1, 0); -the funny thing is, if I put 0 in the last parameter in the SQLBindParameter function I don't get any error but the character data (i.e. 'A') that I assigned to the bound parameter would not be written into the database. Am I missing out something here? Please advise. Thanks in advance, lisze
Re: Help - SQLBindParameter not used for all parameters error
At 17:05 08/02/2001 +0800, Li Sze wrote: Hi! If you only need room for 1 character you don't need a column with size 2. The last parameter of SQLBindParameter is a pointer to a buffer for the parameter's length. Then error HY090 means: (DM) The argument ParameterValuePtr was a null pointer, the argument StrLen_or_IndPtr was a null pointer, and the argument InputOutputType was not SQL_PARAM_OUTPUT. (DM) SQL_PARAM_OUTPUT, where the argument ParameterValuePtr was a null pointer, the C type was char or binary, and the BufferLength (cbValueMax) was greater than 0. Take a look in the sample from Microsoft Documentation: #define SALES_PERSON_LEN 10 #define STATUS_LEN 6 SQLSMALLINT sOrderID; SQLSMALLINT sCustID; DATE_STRUCT dsOpenDate; SQLCHAR szSalesPerson[SALES_PERSON_LEN]; SQLCHAR szStatus[STATUS_LEN); SQLINTEGER cbOrderID = 0, cbCustID = 0, cbOpenDate = 0, cbSalesPerson = SQL_NTS, cbStatus = SQL_NTS; SQLRETURN retcode; SQLHSTMT hstmt; /* Prepare the SQL statement with parameter markers. */ retcode = SQLPrepare(hstmt, "INSERT INTO ORDERS (ORDERID, CUSTID, OPENDATE, SALESPERSON, STATUS) VALUES (?, ?, ?, ?, ?)", SQL_NTS); if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { /* Specify data types and buffers for OrderID, CustID, OpenDate, SalesPerson, */ /* Status parameter data. */ SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, sOrderID, 0, cbOrderID); SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, sCustID, 0, cbCustID); SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_TYPE_DATE, SQL_TYPE_DATE, 0, 0, dsOpenDate, 0, cbOpenDate); SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, SALES_PERSON_LEN, 0, szSalesPerson, 0, cbSalesPerson); SQLBindParameter(hstmt, 5, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, STATUS_LEN, 0, szStatus, 0, cbStatus); /* Specify first row of parameter data. */ sOrderID = 1001; sCustID = 298; dsOpenDate.year = 1996; dsOpenDate.month = 3; dsOpenDate.day = 8; strcpy(szSalesPerson, "Johnson"); strcpy(szStatus, "Closed"); /* Execute statement with first row. */ retcode = SQLExecute(hstmt); /* Specify second row of parameter data. */ sOrderID = 1002; sCustID = 501; dsOpenDate.year = 1996; dsOpenDate.month = 3; dsOpenDate.day = 9; strcpy(szSalesPerson, "Bailey"); strcpy(szStatus, "Open"); /* Execute statement with second row. */ retcode = SQLExecute(hstmt); } Regards, Miguel I have trouble writing a character into the database (the column is declared as char(2) not null) because I figured that if it appends a null at the end of the character data I want to insert (i.e.'A\0'), it would still fit. I bound the parameters first before assigning the data and executing a statement to write into the database. This is how I bind it: --- g_rc = SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 2, 0, (SQLPOINTER)chDataPart, 1, NULL); -if I put NULL in the last parameter in the SQLBindParameter function, I get the following error for the SQLParamData function call, Error code: HY090 Error message: SQLBindParameter not used for all parameters. However, I see many working examples that sets the last parameter to NULL when it is a string. I'm not sure if it works for a character. I've checked the manual and list archives and found out that the above error message means [there is an error in the number of parameters in an insert statement]. What does this mean? --- g_rc = SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 2, 0, (SQLPOINTER)chDataPart, 1, 0); -the funny thing is, if I put 0 in the last parameter in the SQLBindParameter function I don't get any error but the character data (i.e. 'A') that I assigned to the bound parameter would not be written into the database. Am I missing out something here? Please advise. Thanks in advance, lisze __ ___ __ / |/ /_ __/ __/ __ \/ / http://www.mysql.com/ / /|_/ / // /\ \/ /_/ / /__ Miguel Solrzano [EMAIL PROTECTED] /_/ /_/\_, /___/\___\_\___/ So Paulo, Brazil ___/ Development Team - 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
Re: Help - SQLBindParameter not used for all parameters error
Thanks for responding. I've changed the column back to size 1. However, if I follow the example from the Microsoft Documentation, that is setting the last parameter to cbValue where cbValue = SQL_NTS, and BufferLength to 0, I get a handling exception error when the last SQLParamData is called. The SQLParamData is used for my last column where I insert binary data using SQLPutData. The example is for a string of length more than 1 and as such I do not know if there is a different workaround to this for single character entries. I have tried applying all the working examples that I have come arcross to my program but to no avail. I really have no idea what is going on here. Are there any other approaches that I may try out? Thanks, lisze At 17:05 08/02/2001 +0800, Li Sze wrote: Hi! If you only need room for 1 character you don't need a column with size 2. The last parameter of SQLBindParameter is a pointer to a buffer for the parameter's length. Then error HY090 means: (DM) The argument ParameterValuePtr was a null pointer, the argument StrLen_or_IndPtr was a null pointer, and the argument InputOutputType was not SQL_PARAM_OUTPUT. (DM) SQL_PARAM_OUTPUT, where the argument ParameterValuePtr was a null pointer, the C type was char or binary, and the BufferLength (cbValueMax) was greater than 0. Take a look in the sample from Microsoft Documentation: #define SALES_PERSON_LEN 10 #define STATUS_LEN 6 SQLSMALLINT sOrderID; SQLSMALLINT sCustID; DATE_STRUCT dsOpenDate; SQLCHAR szSalesPerson[SALES_PERSON_LEN]; SQLCHAR szStatus[STATUS_LEN); SQLINTEGER cbOrderID = 0, cbCustID = 0, cbOpenDate = 0, cbSalesPerson = SQL_NTS, cbStatus = SQL_NTS; SQLRETURN retcode; SQLHSTMT hstmt; /* Prepare the SQL statement with parameter markers. */ retcode = SQLPrepare(hstmt, "INSERT INTO ORDERS (ORDERID, CUSTID, OPENDATE, SALESPERSON, STATUS) VALUES (?, ?, ?, ?, ?)", SQL_NTS); if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { /* Specify data types and buffers for OrderID, CustID, OpenDate, SalesPerson, */ /* Status parameter data. */ SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, sOrderID, 0, cbOrderID); SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, sCustID, 0, cbCustID); SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_TYPE_DATE, SQL_TYPE_DATE, 0, 0, dsOpenDate, 0, cbOpenDate); SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, SALES_PERSON_LEN, 0, szSalesPerson, 0, cbSalesPerson); SQLBindParameter(hstmt, 5, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, STATUS_LEN, 0, szStatus, 0, cbStatus); /* Specify first row of parameter data. */ sOrderID = 1001; sCustID = 298; dsOpenDate.year = 1996; dsOpenDate.month = 3; dsOpenDate.day = 8; strcpy(szSalesPerson, "Johnson"); strcpy(szStatus, "Closed"); /* Execute statement with first row. */ retcode = SQLExecute(hstmt); /* Specify second row of parameter data. */ sOrderID = 1002; sCustID = 501; dsOpenDate.year = 1996; dsOpenDate.month = 3; dsOpenDate.day = 9; strcpy(szSalesPerson, "Bailey"); strcpy(szStatus, "Open"); /* Execute statement with second row. */ retcode = SQLExecute(hstmt); } Regards, Miguel I have trouble writing a character into the database (the column is declared as char(2) not null) because I figured that if it appends a null at the end of the character data I want to insert (i.e.'A\0'), it would still fit. I bound the parameters first before assigning the data and executing a statement to write into the database. This is how I bind it: --- g_rc = SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 2, 0, (SQLPOINTER)chDataPart, 1, NULL); -if I put NULL in the last parameter in the SQLBindParameter function, I get the following error for the SQLParamData function call, Error code: HY090 Error message: SQLBindParameter not used for all parameters. However, I see many working examples that sets the last parameter to NULL when it is a string. I'm not sure if it works for a character. I've checked the manual and list archives and found out that the above error message means [there is an error in the number of parameters in an insert statement]. What does this mean? --- g_rc = SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 2, 0, (SQLPOINTER)chDataPart, 1, 0); -the funny thing is, if I put 0 in the last parameter in the SQLBindParameter function I don't get any error but the character data (i.e. 'A') that I assigned to the bound parameter would not be written into the database. Am I missing out something here? Please advise. Thanks in advance, lisze __ ___ __ / |/ /_ __/ __/ __ \/ / http://www.mysql.com/ /
Re: Help - SQLBindParameter not used for all parameters error
At 10:10 09/02/2001 +0800, Li Sze wrote: Hi Li, I will take a look in MyODBC code about the SQLBindParameter and when I will have a reasonable answer I will send you the reply. Regards, Miguel Thanks for responding. I've changed the column back to size 1. However, if I follow the example from the Microsoft Documentation, that is setting the last parameter to cbValue where cbValue = SQL_NTS, and BufferLength to 0, I get a handling exception error when the last SQLParamData is called. The SQLParamData is used for my last column where I insert binary data using SQLPutData. The example is for a string of length more than 1 and as such I do not know if there is a different workaround to this for single character entries. I have tried applying all the working examples that I have come arcross to my program but to no avail. I really have no idea what is going on here. Are there any other approaches that I may try out? Thanks, lisze At 17:05 08/02/2001 +0800, Li Sze wrote: Hi! If you only need room for 1 character you don't need a column with size 2. The last parameter of SQLBindParameter is a pointer to a buffer for the parameter's length. Then error HY090 means: (DM) The argument ParameterValuePtr was a null pointer, the argument StrLen_or_IndPtr was a null pointer, and the argument InputOutputType was not SQL_PARAM_OUTPUT. (DM) SQL_PARAM_OUTPUT, where the argument ParameterValuePtr was a null pointer, the C type was char or binary, and the BufferLength (cbValueMax) was greater than 0. Take a look in the sample from Microsoft Documentation: #define SALES_PERSON_LEN 10 #define STATUS_LEN 6 SQLSMALLINT sOrderID; SQLSMALLINT sCustID; DATE_STRUCT dsOpenDate; SQLCHAR szSalesPerson[SALES_PERSON_LEN]; SQLCHAR szStatus[STATUS_LEN); SQLINTEGER cbOrderID = 0, cbCustID = 0, cbOpenDate = 0, cbSalesPerson = SQL_NTS, cbStatus = SQL_NTS; SQLRETURN retcode; SQLHSTMT hstmt; /* Prepare the SQL statement with parameter markers. */ retcode = SQLPrepare(hstmt, "INSERT INTO ORDERS (ORDERID, CUSTID, OPENDATE, SALESPERSON, STATUS) VALUES (?, ?, ?, ?, ?)", SQL_NTS); if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { /* Specify data types and buffers for OrderID, CustID, OpenDate, SalesPerson, */ /* Status parameter data. */ SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, sOrderID, 0, cbOrderID); SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, sCustID, 0, cbCustID); SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_TYPE_DATE, SQL_TYPE_DATE, 0, 0, dsOpenDate, 0, cbOpenDate); SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, SALES_PERSON_LEN, 0, szSalesPerson, 0, cbSalesPerson); SQLBindParameter(hstmt, 5, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, STATUS_LEN, 0, szStatus, 0, cbStatus); /* Specify first row of parameter data. */ sOrderID = 1001; sCustID = 298; dsOpenDate.year = 1996; dsOpenDate.month = 3; dsOpenDate.day = 8; strcpy(szSalesPerson, "Johnson"); strcpy(szStatus, "Closed"); /* Execute statement with first row. */ retcode = SQLExecute(hstmt); /* Specify second row of parameter data. */ sOrderID = 1002; sCustID = 501; dsOpenDate.year = 1996; dsOpenDate.month = 3; dsOpenDate.day = 9; strcpy(szSalesPerson, "Bailey"); strcpy(szStatus, "Open"); /* Execute statement with second row. */ retcode = SQLExecute(hstmt); } Regards, Miguel I have trouble writing a character into the database (the column is declared as char(2) not null) because I figured that if it appends a null at the end of the character data I want to insert (i.e.'A\0'), it would still fit. I bound the parameters first before assigning the data and executing a statement to write into the database. This is how I bind it: --- g_rc = SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 2, 0, (SQLPOINTER)chDataPart, 1, NULL); -if I put NULL in the last parameter in the SQLBindParameter function, I get the following error for the SQLParamData function call, Error code: HY090 Error message: SQLBindParameter not used for all parameters. However, I see many working examples that sets the last parameter to NULL when it is a string. I'm not sure if it works for a character. I've checked the manual and list archives and found out that the above error message means [there is an error in the number of parameters in an insert statement]. What does this mean? --- g_rc = SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 2, 0, (SQLPOINTER)chDataPart, 1, 0); -the funny thing is, if I put 0 in the last parameter in the SQLBindParameter function I