You probably meant ODBC, as your example is an ODBC program?

Alexander Schr�der
SAP DB, SAP Labs Berlin 

> -----Original Message-----
> From: Sean Mollet [mailto:[EMAIL PROTECTED]
> Sent: Wednesday, April 28, 2004 2:53 PM
> To: [EMAIL PROTECTED]
> Subject: SQLDBC example
> 
> 
> All:
>    After perusing the archives for a while, I was unable to find where
> anyone had posted a working example for SQLDBC usage. I also 
> had trouble
> finding anything useful in the docs. As follows is a simple 
> class that works
> like a charm.
> 
> Sean
> 
> sapdb.h
> ___________________
> 
> //Header file for SAPDB Access
> 
> //(c) 2004 Sean Mollet
> 
> //You are free to use these as you like
> 
> //Just please give me some credit
> 
> #include "WINDOWS.H"
> 
> #include "sql.h"
> 
> #include "sqlext.h"
> 
> class dbaccess{
> 
> public:
> 
> dbaccess();
> 
> ~dbaccess();
> 
> int connect();
> 
> int execute(const char *statement,...);
> 
> int checkerror();
> 
> int fetchrow();
> 
> UCHAR DSN[SQL_MAX_DSN_LENGTH]; // Data Source Name buffer
> 
> UCHAR UID[10]; // User ID buffer
> 
> UCHAR Passwd[10]; // Password buffer
> 
> HENV hEnv; // Env Handle from SQLAllocEnv()
> 
> HDBC hDBC; // Connection handle
> 
> HSTMT hStmt; // Statement handle
> 
> char **resultset; //result set
> 
> int currentrow; //currently active row
> 
> int columncount; //number of columbs in result set
> 
> RETCODE retcode; // Return code
> 
> SQLCHAR *error; // Buffer to hold error text
> 
> SQLCHAR *sql;
> 
> };
> 
> 
> 
> sapdb.cpp
> 
> _____________________
> 
> //Class file for SapDB access
> 
> //(c) 2004 Sean Mollet
> 
> #include "sapdb.h"
> 
> #include "stdio.h"
> 
> #include "stdlib.h"
> 
> #include "stdarg.h"
> 
> //Constructor
> 
> dbaccess::dbaccess(){
> 
> // Allocate memory for ODBC Environment handle
> 
> SQLAllocEnv (&hEnv);
> 
> // Allocate memory for the connection handle
> 
> SQLAllocConnect (hEnv, &hDBC);
> 
> //Allocate memory for our error string
> 
> error = (SQLCHAR *)malloc(255);
> 
> //clear these variables
> 
> currentrow=0;
> 
> columncount=0;
> 
> }
> 
> //Destructor
> 
> dbaccess::~dbaccess(){
> 
> // Free the allocated statement handle
> 
> if(hStmt != NULL){
> 
> SQLFreeStmt (hStmt, SQL_DROP);
> 
> }
> 
> // Disconnect from datasource
> 
> SQLDisconnect (hDBC);
> 
> // Free the allocated connection handle
> 
> SQLFreeConnect (hDBC);
> 
> // Free the allocated ODBC environment handle
> 
> SQLFreeEnv (hEnv);
> 
> //Free our error buffer
> 
> free(error);
> 
> //free the resultset
> 
> for(int a=1;a<=columncount;a++){
> 
> free(resultset[a]);
> 
> }
> 
> free(resultset);
> 
> }
> 
> // Connect to the data source
> 
> int dbaccess::connect(){
> 
> retcode = SQLConnect (hDBC, DSN,SQL_NTS, UID, SQL_NTS, 
> Passwd, SQL_NTS);
> 
> return(retcode);
> 
> };
> 
> //Execute a SQL statement
> 
> int dbaccess::execute(const char *statement,...){
> 
> va_list ap;
> 
> va_start(ap,statement);
> 
> 
> sql = (SQLCHAR *) malloc(5000);
> 
> vsprintf((char *)sql,statement,ap);
> 
> // Allocate memory for the statement handle
> 
> retcode = SQLAllocStmt (hDBC, &hStmt);
> 
> // Prepare the SQL statement by assigning it to the statement handle
> 
> retcode = SQLPrepare (hStmt,sql, SQL_NTS);
> 
> free(sql); // we don't need this anymore
> 
> if(retcode!=0){
> 
> return retcode;
> 
> }
> 
> // Execute the resulting handle
> 
> retcode = SQLExecute (hStmt);
> 
> if(retcode==0){//statement executed properly
> 
> SQLNumResultCols(hStmt,(SQLSMALLINT *) &columncount);
> 
> }
> 
> //create the results array
> 
> resultset = (char **) malloc(sizeof(char *)*columncount);
> 
> for(int a=1;a<=columncount;a++){
> 
> resultset[a]=(char *) malloc(sizeof(char *)*255);
> 
> retcode = SQLBindCol (hStmt, a, SQL_C_CHAR, resultset[a], 255,NULL);
> 
> }
> 
> return retcode;
> 
> }
> 
> int dbaccess::fetchrow(){
> 
> return SQLFetch(hStmt);
> 
> }
> 
> 
> 
> //Handle any errors that might come along
> 
> int dbaccess::checkerror(){
> 
> if(retcode!=0){//there was an error
> 
> SQLError(hEnv,hDBC,hStmt,NULL,NULL,error,255,NULL);
> 
> return 1;
> 
> }
> 
> return 0;
> 
> }
> 
> 
> 
> 
> 
> -- 
> MaxDB Discussion Mailing List
> For list archives: http://lists.mysql.com/maxdb
> To unsubscribe:    
http://lists.mysql.com/[EMAIL PROTECTED]

--
MaxDB Discussion Mailing List
For list archives: http://lists.mysql.com/maxdb
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to