If you want to execute a query you will need to specify
a handle (SQL_HANDLE_STMT ) for a SQL-statement. In order to get one
you have to allocate one with SQLAllocHandle .
Then you have to think about the SQL statement you want to execute. As I mentioned in the introduction
I assume that we have a table tkeyuser which contains the following
data:
iduser |
dtname |
dtmaxSize |
1 |
Christa |
10000 |
2 |
Nicole |
9000 |
In this example, we want to execute a query which returns all the rows for the
fields iduser and dtname in this table ordered
by iduser . So the SQL statement would be:
SELECT iduser,dtname FROM tkeydata ORDER BY iduser
If you execute this statement you would get two rows each with two columns of data.
This data has to be stored somewhere so that your programm can actually use it, so you need to define a variable
for each of the columns. So you need to bind a column to variable in your program. Binding a variable automatically
stores the data of the column in the variable when you retrieve a result row from the
connection. It is important that your variables match the type of the column in the table
within the database.
So we need to bin column #1 to a variable of type SQLINTEGER and the second column to
a variable of type char . This is done by SQLBindCol .
Therefore we add the variables:
SQLHSTMT V_OD_hstmt; // Handle for a statement
SQLINTEGER V_OD_err,V_OD_id;
char V_OD_buffer[200];
Now we can bind the variables:
SQLBindCol(V_OD_hstmt,1,SQL_C_CHAR, &V_OD_buffer,200,&V_OD_err);
SQLBindCol(V_OD_hstmt,2,SQL_C_ULONG,&V_OD_id,sizeof(V_OD_id),&V_OD_err);
Yes you should check for the return code of the function call. I'm to lazy to
code it here once again :(
Now we can execute the query by calling SQLExecDirect :
V_OD_erg=SQLExecDirect(V_OD_hstmt,
"SELECT dtname,iduser FROM tkeyuser order by iduser",SQL_NTS);
if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
{
printf("Error Select %d\n",V_OD_erg);
SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, V_OD_stat, &V_OD_err,
V_OD_msg,100,&V_OD_mlen);
printf("%s (%d)\n",V_OD_msg,V_OD_err);
SQLFreeHandle(SQL_HANDLE_DBC,V_OD_hdbc);
SQLFreeHandle(SQL_HANDLE_STMT,V_OD_hstmt);
SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
exit(0);
}
|