MUGPERU
  Search 
Monday, January 05, 2009 ..:: Foros de Discusión ::.. Register  Login
Foros MUGPERU Minimize
Subject: Clase para coneccion ODBC
Prev Next
You are not authorized to post a reply.

Author Messages
ospochu
Posts:33

01/07/2005 04:15 PM  

Aqui una clase cuando no tengan otra alternativa que conectarse via ODBC a una base de datos. La parte de manejo de excepciones y escribir el tracing en algun archivo los dejo a su criterio.

#include <afx.h>
#include <stdio.h>
#include <sql.h>
#include <sqlext.h>
#include "CManODBC.h"
#include "dberr.h"
#include "clogmessage.h"

CBasODBC::CBasODBC()
{
}

CBasODBC::~CBasODBC()
{
 mFinalizar();
}


BOOL    CBasODBC::mInitODBC()
{
    RETCODE nRetCode;   

    nRetCode = SQLSetEnvAttr(
                m_henv,
                SQL_ATTR_ODBC_VERSION,
                (SQLPOINTER) SQL_OV_ODBC3,
                SQL_IS_INTEGER);


    if (nRetCode != SQL_SUCCESS && nRetCode == SQL_SUCCESS_WITH_INFO)
    {    

        return  FALSE;
    }

    return  TRUE;
}

BOOL CBasODBC::mErrorODBC(
            LPSTR lpszODBCApiCmd,
            RETCODE rc,
            HENV    henv,
            HDBC    hdbc,
            HSTMT   hstmt)
{
    UCHAR   szSQLStateΔ], szErrorMsg[SQL_MAX_MESSAGE_LENGTH]
 CHAR szMsg[SQL_MAX_MESSAGE_LENGTH]
    SDWORD  NativeError;
    SWORD   cbErrorMsg;
    RETCODE nRetCode;
    INT     nError = 0;
 CLogMessage LogMessage;

    ZeroMemory(szSQLState, sizeof(szSQLState));
    ZeroMemory(szErrorMsg, sizeof(szErrorMsg));
 ZeroMemory(szMsg, sizeof(szMsg));

    nRetCode = SQLError(henv,
                       ≈nbsp;    hdbc,
                            hstmt,
                            szSQLState,
                            &NativeError,
                            szErrorMsg,
                            SQL_MAX_MESSAGE_LENGTH - 1,
                            &cbErrorMsg);

    sprintf(szMsg,"[Error al Ejecutar : %s] [Ret %d] [SQLError :%s] [State %s]\n",
                      lpszODBCApiCmd, rc, szErrorMsg, szSQLState);

 LogMessage.Grabar(szMsg);
 return TRUE;
}

BOOL CBasODBC::mInicializar(LPSTR DSN, LPSTR User, LPSTR Passwd)
{
 
 RETCODE retcode;

 __try {

  retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE ,&m_henv);// Allocate environment handle

  if (retcode == SQL_SUCCESS)
  {
   if (mInitODBC() == TRUE)
   {
    retcode = SQLAllocHandle(SQL_HANDLE_DBC, m_henv, &m_hdbc); // Allocate connection handle

    if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
    {
     retcode = SQLSetConnectAttr(m_hdbc, SQL_LOGIN_TIMEOUT, (void *)10, 0);
     
     retcode = SQLConnect(m_hdbc, (SQLCHAR*) DSN   , SQL_NTS,
             (SQLCHAR*) User  , SQL_NTS,
             (SQLCHAR*) Passwd, SQL_NTS);

     if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INF)
     {
      // Process data after successful connection
       return TRUE;   
     }
    }   
   }  
  }

  return FALSE;
 }

 __except ( ExceptionFilter(GetExceptionCode( ),GetExceptionInformation()))
 {
  return FALSE;
 }
}

BOOL CBasODBC::mFinalizar(void)
{
 __try { 
  SQLDisconnect(m_hdbc);        
  SQLFreeHandle(SQL_HANDLE_DBC, m_hdbc);
  SQLFreeHandle(SQL_HANDLE_ENV, m_henv);
  return TRUE;
 }
 __except ( ExceptionFilter( GetExceptionCode( ),GetExceptionInformation()))
 {
  return FALSE;
 }
}

BOOL CBasODBC::mInicioTransaccion()
{

 char sStm𖑷]

 ZeroMemory(sStm, sizeof(sStm));
 strcpy(sStm, " BEGIN TRANSACTION ");
 return mEjecutarSQL(sStm);
}

BOOL CBasODBC::mRollBackTransaccion()
{
 char sStm𖑷]

 ZeroMemory(sStm, sizeof(sStm));
 strcpy(sStm, " ROLLBACK TRANSACTION ");
 return mEjecutarSQL(sStm);
}

BOOL CBasODBC::mFinTransaccion()
{
 char sStm𖑷]

 ZeroMemory(sStm, sizeof(sStm));
 strcpy(sStm, " COMMIT TRANSACTION ");
 return mEjecutarSQL(sStm);
}

You are not authorized to post a reply.
Forums > Lenguajes de Programación > C++ > Clase para coneccion ODBC



ActiveForums 3.7
        
Copyright 2001-2008 MUGPERU   Terms Of Use  Privacy Statement