Help - SQLBindParameter not used for all parameters error

2001-02-08 Thread Li Sze


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



Re: Help - SQLBindParameter not used for all parameters error

2001-02-08 Thread Miguel Angel Solórzano

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 Solrzano [EMAIL PROTECTED]
/_/  /_/\_, /___/\___\_\___/  So 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




Re: Help - SQLBindParameter not used for all parameters error

2001-02-08 Thread Li Sze

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/
   / 

Re: Help - SQLBindParameter not used for all parameters error

2001-02-08 Thread Miguel Angel Solórzano

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