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 Solórzano <[EMAIL PROTECTED]>
/_/ /_/\_, /___/\___\_\___/ São 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