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

Reply via email to