Chester1 0 Newbie Poster

CODE HERE A FOLOWS:

namespace ODBC {

#include <stdio.h>
#include <stdlib.h>
#include <tchar.h>
#include <windows.h>

#include <sql.h>
#include <sqlext.h>

#include <odbcinst.h>
  //--
#pragma comment(lib,"odbc32.lib")
#pragma comment(lib,"odbcbcp.lib")
#pragma comment(lib,"OdbcCP32.Lib")
  //--
#define IS_SQL_ERR !IS_SQL_OK
#define IS_SQL_OK(res) (res==SQL_SUCCESS_WITH_INFO || res==SQL_SUCCESS)
#define SAFE_STR(str) ((str==NULL) ? _T("") : str)
  //--
  enum sqlDataTypes {
    sqlDataTypeUnknown = SQL_UNKNOWN_TYPE, sqlDataTypeChar = SQL_CHAR,
         sqlDataTypeNumeric = SQL_NUMERIC, sqlDataTypeDecimal = SQL_DECIMAL,
         sqlDataTypeInteger = SQL_INTEGER, sqlDataTypeSmallInt = SQL_SMALLINT,
         sqlDataTypeFloat = SQL_FLOAT, sqlDataTypeReal = SQL_REAL,
         sqlDataTypeDouble = SQL_DOUBLE,
     #if (ODBCVER >= 0x0300)
         sqlDataTypeDateTime = SQL_DATETIME,
     #endif
         sqlDataTypeVarChar = SQL_VARCHAR
  };



  //--
  class DSNConnection {
  public:
    bool Connect(LPCTSTR svSource, LPCTSTR szUsername, LPCTSTR szPassword) {
      int nConnect = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, & m_hEnv);
      if(nConnect == SQL_SUCCESS || nConnect == SQL_SUCCESS_WITH_INFO) {
        nConnect = SQLSetEnvAttr(m_hEnv, SQL_ATTR_ODBC_VERSION,
             (void *) SQL_OV_ODBC3, 0);
        if(nConnect == SQL_SUCCESS || nConnect == SQL_SUCCESS_WITH_INFO) {
          nConnect = SQLAllocHandle(SQL_HANDLE_DBC, m_hEnv, & m_hDBC);
          if(nConnect == SQL_SUCCESS || nConnect == SQL_SUCCESS_WITH_INFO) {
            SQLSetConnectOption(m_hDBC, SQL_LOGIN_TIMEOUT, 5);
            nConnect = SQLConnect(m_hDBC, (SQLTCHAR *) svSource, SQL_NTS,
                 (SQLTCHAR *) szUsername, SQL_NTS,
                 (SQLTCHAR *) szPassword, SQL_NTS);
            if(nConnect == SQL_SUCCESS || nConnect == SQL_SUCCESS_WITH_INFO) {
              return 1;
            }
          }
        }
      }
      if(m_hDBC != NULL) {
        m_nReturn = SQLDisconnect(m_hDBC);
        m_nReturn = SQLFreeHandle(SQL_HANDLE_DBC, m_hDBC);
      }
      if(m_hEnv != NULL)
        m_nReturn = SQLFreeHandle(SQL_HANDLE_ENV, m_hEnv);
      m_hDBC = NULL;
      m_hEnv = NULL;
      m_nReturn = SQL_ERROR;
      return 0;
    }

    DSNConnection() {
      m_hDBC = NULL;
      m_hEnv = NULL;
      m_nReturn = SQL_ERROR;
    }

    virtual ~DSNConnection() {
      if(m_hDBC != NULL) {
        m_nReturn = SQLFreeHandle(SQL_HANDLE_DBC, m_hDBC);
      }
      if(m_hEnv != NULL)
        m_nReturn = SQLFreeHandle(SQL_HANDLE_ENV, m_hEnv);
    }

    void Disconnect() {
      if(m_hDBC != NULL) {
        m_nReturn = SQLDisconnect(m_hDBC);
        m_hDBC = NULL;
      }
    }

  public:
    operator HDBC() {
      return m_hDBC;
    }

  private:
    SQLRETURN m_nReturn; // Internal SQL Error code
    HENV m_hEnv; // Handle to environment
    HDBC m_hDBC; // Handle to database connection
  };



  //--
  class ODBCConnection {
  public:
    bool Connect(LPCTSTR svSource) {
      int nConnect = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, & m_hEnv);
      if(nConnect == SQL_SUCCESS || nConnect == SQL_SUCCESS_WITH_INFO) {
        nConnect = SQLSetEnvAttr(m_hEnv, SQL_ATTR_ODBC_VERSION,
             (void *) SQL_OV_ODBC3, 0);
        if(nConnect == SQL_SUCCESS || nConnect == SQL_SUCCESS_WITH_INFO) {
          nConnect = SQLAllocHandle(SQL_HANDLE_DBC, m_hEnv, & m_hDBC);
          if(nConnect == SQL_SUCCESS || nConnect == SQL_SUCCESS_WITH_INFO) {
            SQLSetConnectOption(m_hDBC, SQL_LOGIN_TIMEOUT, 5);
            short shortResult = 0;
            SQLTCHAR szOutConnectString[1024];
            nConnect = SQLDriverConnect(m_hDBC, // Connection Handle
            NULL, // Window Handle
            (SQLTCHAR *) svSource, // InConnectionString
            _tcslen(svSource), // StringLength1
            szOutConnectString, // OutConnectionString
            sizeof(szOutConnectString), // Buffer length
            & shortResult, // StringLength2Ptr
            SQL_DRIVER_NOPROMPT); // no User prompt
            return IS_SQL_OK(nConnect);
          }
        }
      }
      if(m_hDBC != NULL) {
        m_nReturn = SQLDisconnect(m_hDBC);
        m_nReturn = SQLFreeHandle(SQL_HANDLE_DBC, m_hDBC);
      }
      if(m_hEnv != NULL)
        m_nReturn = SQLFreeHandle(SQL_HANDLE_ENV, m_hEnv);
      m_hDBC = NULL;
      m_hEnv = NULL;
      m_nReturn = SQL_ERROR;
      return (IS_SQL_OK(nConnect));
    }

    ODBCConnection() {
      m_hDBC = NULL;
      m_hEnv = NULL;
      m_nReturn = SQL_ERROR;
    }

    virtual ~ODBCConnection() {
      if(m_hDBC != NULL) {
        m_nReturn = SQLFreeHandle(SQL_HANDLE_DBC, m_hDBC);
      }
      if(m_hEnv != NULL)
        m_nReturn = SQLFreeHandle(SQL_HANDLE_ENV, m_hEnv);
    }

    void Disconnect() {
      if(m_hDBC != NULL) {
        m_nReturn = SQLDisconnect(m_hDBC);
        m_hDBC = NULL;
      }
    }

  public:
    operator HDBC() {
      return m_hDBC;
    }

  private:
    SQLRETURN m_nReturn; // Internal SQL Error code
    HENV m_hEnv; // Handle to environment
    HDBC m_hDBC; // Handle to database connection
  };



  //--
  class MSSQLConnection : public ODBCConnection {
  public:
    enum enumProtocols {
      protoNamedPipes, protoWinSock, protoIPX, protoBanyan, protoRPC
    };

  public:
    MSSQLConnection() {
    };

    virtual ~MSSQLConnection() {
    };

    BOOL Connect(LPCTSTR User = _T(""), LPCTSTR Pass = _T(""), LPCTSTR Host = _T("(local)"),
         BOOL Trusted = 1, enumProtocols Proto = protoNamedPipes) {
           TCHAR str[512] = _T("");
           _stprintf(str,
                _T("Driver={SQL Server};Server=%s;Uid=%s;Pwd=%s;Trusted_Connection=%s;Network=%s;"),
                SAFE_STR(Host), SAFE_STR(User), SAFE_STR(Pass),
                (Trusted ? _T("Yes") : _T("No")));
           switch(Proto) {
             case protoNamedPipes:
               _tcscat(str, _T("dbnmpntw"));
               break;
             case protoWinSock:
               _tcscat(str, _T("dbmssocn"));
               break;
             case protoIPX:
               _tcscat(str, _T("dbmsspxn"));
               break;
             case protoBanyan:
               _tcscat(str, _T("dbmsvinn"));
               break;
             case protoRPC:
               _tcscat(str, _T("dbmsrpcn"));
               break;
             default:
               _tcscat(str, _T("dbmssocn"));
               break;
           }
           _tcscat(str, _T(";"));
           return ODBCConnection::Connect(str);
    };
  };



  //--
  class DB2Connection : private ODBCConnection {
  public:
    DB2Connection() {
    };

    virtual ~DB2Connection() {
    };

    int Connect(LPCTSTR DBPath) {
      TCHAR str[512] = _T("");
      _stprintf(str, _T("Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=%s;"),
           SAFE_STR(DBPath));
      return ODBCConnection::Connect(str);
    };
  };



  //--
  class XLSConnection : private ODBCConnection {
  public:
    XLSConnection() {
    };

    virtual ~XLSConnection() {
    };

    int Connect(LPCTSTR XLSPath, LPCTSTR DefDir = _T("")) {
      TCHAR str[512] = _T("");
      _stprintf(str,
           _T("Driver={Microsoft Excel Driver (*.xls)};DriverId=790;bq=%s;DefaultDir=%s;"),
           SAFE_STR(XLSPath), SAFE_STR(DefDir));
      return ODBCConnection::Connect(str);
    };
  };



  //--
  class TXTConnection : private ODBCConnection {
  public:
    TXTConnection() {
    };

    int Connect(LPCTSTR TXTPath) {
      TCHAR str[512] = _T("");
      _stprintf(str,
           _T("Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=%s;Extensions=asc,csv,tab,txt;"),
           SAFE_STR(TXTPath));
      return ODBCConnection::Connect(str);
    };
  };



  //--
  class FOXConnection : public ODBCConnection {
  public:
    FOXConnection() {
    };

    virtual ~FOXConnection() {
    };

    int Connect(LPCTSTR DBPath, LPCTSTR User = _T(""), LPCTSTR Pass = _T(""),
         LPCTSTR Type = _T("DBF"), BOOL Exclusive = 0) {
           TCHAR str[512] = _T("");
           _stprintf(str,
                _T("Driver={Microsoft Visual Foxpro Driver};Uid=%s;Pwd=%s;SourceDB=%s;SourceType=%s;Exclusive=%s;"),
                SAFE_STR(User), SAFE_STR(Pass), SAFE_STR(DBPath), SAFE_STR(Type),
                (Exclusive ? _T("yes") : _T("no")));
           return ODBCConnection::Connect(str);
    };
  };



  //--
  class MDBConnection : public ODBCConnection {
  public:
    MDBConnection() {
    };

    virtual ~MDBConnection() {
    };

    int Connect(LPCTSTR MDBPath, LPCTSTR User = _T(""), LPCTSTR Pass = _T(""),
         BOOL Exclusive = 0) {
           TCHAR str[512] = _T("");
           _stprintf(str,
                _T("Driver={Microsoft Access Driver (*.mdb)};Dbq=%s;Uid=%s;Pwd=%s;Exclusive=%s;"),
                SAFE_STR(MDBPath), SAFE_STR(User), SAFE_STR(Pass),
                (Exclusive ? _T("yes") : _T("no")));
           return ODBCConnection::Connect(str);
    };
  };



  //--
  class mySQLConnection : public ODBCConnection {
  public:
    mySQLConnection() {
    };

    virtual ~mySQLConnection() {
    };

    int Connect(LPCTSTR User = _T(""), LPCTSTR Pass = _T(""), LPCTSTR Host = _T("localhost"),
         UINT Port = 3306, UINT Option = 0) {
           TCHAR str[512] = _T("");
           _stprintf(str,
                _T("Driver={MySQL ODBC 3.51 Driver};Uid=%s;Pwd=%s;Server=%s;Port=%d;"),
                SAFE_STR(User), SAFE_STR(Pass), SAFE_STR(Host), Port);
           return ODBCConnection::Connect(str);
    };

    int ConnectDB(LPCTSTR DB, LPCTSTR User = _T(""), LPCTSTR Pass = _T(""),
         LPCTSTR Host = _T("localhost"), UINT Port = 3306, UINT Option = 0) {
           TCHAR str[512] = _T("");
           _stprintf(str,
                _T("Driver={MySQL ODBC 3.51 Driver};Database=%s;Uid=%s;Pwd=%s;Server=%s;Port=%d;"),
                SAFE_STR(DB), SAFE_STR(User), SAFE_STR(Pass), SAFE_STR(Host), Port);
           return ODBCConnection::Connect(str);
    };
  };



  //--
  class ODBCStmt {
    HSTMT m_hStmt;

  public:
    operator HSTMT() {
      return m_hStmt;
    }

    ODBCStmt(HDBC hDBCLink) {
      SQLRETURN m_nReturn;
      m_nReturn = SQLAllocHandle(SQL_HANDLE_STMT, hDBCLink, & m_hStmt);
      SQLSetStmtAttr(m_hStmt, SQL_ATTR_CONCURRENCY,
           (SQLPOINTER)SQL_CONCUR_ROWVER, 0);
      SQLSetStmtAttr(m_hStmt, SQL_ATTR_CURSOR_TYPE,
           (SQLPOINTER)SQL_CURSOR_KEYSET_DRIVEN, 0);
      if(!IS_SQL_OK(m_nReturn))
        m_hStmt = INVALID_HANDLE_VALUE;
    }

    virtual ~ODBCStmt() {
      if(m_hStmt != INVALID_HANDLE_VALUE)
        SQLFreeHandle(SQL_HANDLE_STMT, m_hStmt);
    }

    BOOL IsValid() {
      return m_hStmt != INVALID_HANDLE_VALUE;
    }

    USHORT GetColumnCount() {
      short nCols = 0;
      if(!IS_SQL_OK(SQLNumResultCols(m_hStmt, & nCols)))
        return 0;
      return nCols;
    }

    DWORD GetChangedRowCount(void) {
      long nRows = 0;
      if(!IS_SQL_OK(SQLRowCount(m_hStmt, & nRows)))
        return 0;
      return nRows;
    }

    BOOL Query(LPCTSTR strSQL) {
      SQLRETURN nRet = SQLExecDirect(m_hStmt, (SQLTCHAR *) strSQL, SQL_NTS);
      return IS_SQL_OK(nRet);
    }

    BOOL Fetch() {
      SQLRETURN nRet = SQLFetch(m_hStmt);
      return IS_SQL_OK(nRet);
    }

    BOOL FecthRow(UINT nRow) {
      return IS_SQL_OK(SQLSetPos(m_hStmt, nRow, SQL_POSITION,
           SQL_LOCK_NO_CHANGE));
    }

    BOOL FetchPrevious() {
      SQLRETURN nRet = SQLFetchScroll(m_hStmt, SQL_FETCH_PRIOR, 0);
      return IS_SQL_OK(nRet);
    }

    BOOL FecthNext() {
      SQLRETURN nRet = SQLFetchScroll(m_hStmt, SQL_FETCH_NEXT, 0);
      return IS_SQL_OK(nRet);
    }

    BOOL FetchRow(ULONG nRow, BOOL Absolute = 1) {
      SQLRETURN nRet =
           SQLFetchScroll(m_hStmt, (Absolute ? SQL_FETCH_ABSOLUTE : SQL_FETCH_RELATIVE), nRow);
      return IS_SQL_OK(nRet);
    }

    BOOL FetchFirst() {
      SQLRETURN nRet = SQLFetchScroll(m_hStmt, SQL_FETCH_FIRST, 0);
      return IS_SQL_OK(nRet);
    }

    BOOL FetchLast() {
      SQLRETURN nRet = SQLFetchScroll(m_hStmt, SQL_FETCH_LAST, 0);
      return IS_SQL_OK(nRet);
    }

    BOOL Cancel() {
      SQLRETURN nRet = SQLCancel(m_hStmt);
      return IS_SQL_OK(nRet);
    }
  };



  //--
  class ODBCRecord {
    HSTMT m_hStmt;

  public:
    ODBCRecord(HSTMT hStmt) {
      m_hStmt = hStmt;
    };

    ~ODBCRecord() {
    };

    USHORT GetColumnCount() {
      short nCols = 0;
      if(!IS_SQL_OK(SQLNumResultCols(m_hStmt, & nCols)))
        return 0;
      return nCols;
    }

    BOOL BindColumn(USHORT Column, LPVOID pBuffer, ULONG pBufferSize,
         LONG * pReturnedBufferSize = NULL, USHORT nType = SQL_C_TCHAR) {
           LONG pReturnedSize = 0;
           SQLRETURN Ret =
                SQLBindCol(m_hStmt, Column, nType, pBuffer, pBufferSize,
                & pReturnedSize);
           if(* pReturnedBufferSize)
             * pReturnedBufferSize = pReturnedSize;
           return IS_SQL_OK(Ret);
    }

    USHORT GetColumnByName(LPCTSTR Column) {
      SHORT nCols = GetColumnCount();
      for(USHORT i = 1; i < (nCols + 1); i++) {
        TCHAR Name[256] = _T("");
        GetColumnName(i, Name, sizeof(Name));
        if(!_tcsicmp(Name, Column))
          return i;
      }
      return 0;
    }

    BOOL GetData(USHORT Column, LPVOID pBuffer, ULONG pBufLen, LONG * dataLen =
         NULL, int Type = SQL_C_DEFAULT) {
           SQLINTEGER od = 0;
           int Err = SQLGetData(m_hStmt, Column, Type, pBuffer, pBufLen, & od);
           if(IS_SQL_ERR(Err)) {
             return 0;
           }
           if(dataLen)
             * dataLen = od;
           return 1;
    }

    int GetColumnType(USHORT Column) {
      int nType = SQL_C_DEFAULT;
      SQLTCHAR svColName[256] = _T("");
      SWORD swCol = 0, swType = 0, swScale = 0, swNull = 0;
      UDWORD pcbColDef;
      SQLDescribeCol(m_hStmt, // Statement handle
      Column, // ColumnNumber
      svColName, // ColumnName
      sizeof(svColName), // BufferLength
      & swCol, // NameLengthPtr
      & swType, // DataTypePtr
      & pcbColDef, // ColumnSizePtr
      & swScale, // DecimalDigitsPtr
      & swNull); // NullablePtr
      nType = (int)swType;
      return (nType);
    }

    DWORD GetColumnSize(USHORT Column) {
      int nType = SQL_C_DEFAULT;
      SQLTCHAR svColName[256] = _T("");
      SWORD swCol = 0, swType = 0, swScale = 0, swNull = 0;
      DWORD pcbColDef = 0;
      SQLDescribeCol(m_hStmt, // Statement handle
      Column, // ColumnNumber
      svColName, // ColumnName
      sizeof(svColName), // BufferLength
      & swCol, // NameLengthPtr
      & swType, // DataTypePtr
      & pcbColDef, // ColumnSizePtr
      & swScale, // DecimalDigitsPtr
      & swNull); // NullablePtr
      return pcbColDef;
    }

    DWORD GetColumnScale(USHORT Column) {
      int nType = SQL_C_DEFAULT;
      SQLTCHAR svColName[256] = _T("");
      SWORD swCol = 0, swType = 0, swScale = 0, swNull = 0;
      DWORD pcbColDef = 0;
      SQLDescribeCol(m_hStmt, // Statement handle
      Column, // ColumnNumber
      svColName, // ColumnName
      sizeof(svColName), // BufferLength
      & swCol, // NameLengthPtr
      & swType, // DataTypePtr
      & pcbColDef, // ColumnSizePtr
      & swScale, // DecimalDigitsPtr
      & swNull); // NullablePtr
      return swScale;
    }

    BOOL GetColumnName(USHORT Column, LPTSTR Name, SHORT NameLen) {
      int nType = SQL_C_DEFAULT;
      SWORD swCol = 0, swType = 0, swScale = 0, swNull = 0;
      DWORD pcbColDef = 0;
      SQLRETURN Ret = SQLDescribeCol(m_hStmt, // Statement handle
      Column, // ColumnNumber
      (SQLTCHAR *) Name, // ColumnName
      NameLen, // BufferLength
      & swCol, // NameLengthPtr
      & swType, // DataTypePtr
      & pcbColDef, // ColumnSizePtr
      & swScale, // DecimalDigitsPtr
      & swNull); // NullablePtr
      if(IS_SQL_ERR(Ret))
        return 0;
      return 1;
    }

    BOOL IsColumnNullable(USHORT Column) {
      int nType = SQL_C_DEFAULT;
      SQLTCHAR svColName[256] = _T("");
      SWORD swCol = 0, swType = 0, swScale = 0, swNull = 0;
      UDWORD pcbColDef;
      SQLDescribeCol(m_hStmt, // Statement handle
      Column, // ColumnNumber
      svColName, // ColumnName
      sizeof(svColName), // BufferLength
      & swCol, // NameLengthPtr
      & swType, // DataTypePtr
      & pcbColDef, // ColumnSizePtr
      & swScale, // DecimalDigitsPtr
      & swNull); // NullablePtr
      return (swNull == SQL_NULLABLE);
    }
  };
};

second PART:

#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <tchar.h>
#include "ODBCWrapper.cpp"
//make sure you include the namespace
using namespace std;
using namespace ODBC;

int main(void) {
  MDBConnection link;
  if(link.Connect("C:\\Documents and Settings\\Chester Mayle\\My Documents\\My Data Sources\\db1.mdb")) {
    ODBCStmt Stmt(link);
    SQLExecDirect(Stmt, (SQLTCHAR *) _T("USE Foo"), SQL_NTS);
    int pos = 1;
   TCHAR strQuery[256] = _T("SELECT [ ID1] FROM [\ID Data Base]\where ID='1234%'");
     //t
     //tl
    //TCHAR strQuery[256] = _T("SELECT * FROM \ID Data Base\"");
    //int nRet =
    Stmt.Query(strQuery);
    printf("%5d:\tColumns\t%d\r\n\r\n", Stmt.GetColumnCount(), 0);
    string cg;
    //SELECT [ID1] FROM [ID Data Base] where ID1='2%'";

    while(Stmt.Fetch()) {
      ODBCRecord rec(Stmt);
      //printf("Row %5d\r\n", pos);

      INT i = 0;
      while(i < Stmt.GetColumnCount()) {
        TCHAR Desc[512] = _T("");
        SQLINTEGER cbDesc = 0;
        rec.GetData(i=0, Desc, sizeof(Desc), & cbDesc);
        //TCHAR Name[256] = _T("");
        TCHAR Name[256] = _T( "WHERE ID1=2%");
        rec.GetColumnName(i=0, Name, sizeof(Name));
        i++;
        printf("\t%15s\t\\>\t%25s\r\n", Name, Desc);

      }
      pos++;
    };
  }
  else {
    printf("Connection failed.");
  }
  link.Disconnect();
  //getch();
  char asd;
  cin>> asd;
  return 0;
}
Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.