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/
>   / /|_/ / // /\ \/ /_/ / /__  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