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