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

Reply via email to