Biblioteca de Conexão ODBC em C++

No desenvolvimento desktop nos deparamos com um ponto importante que é a conexão com o banco de dados para o armazenamento dos dados.

Nesse artigo mostrarei a utilização de uma biblioteca pessoal que desenvolvi para fazer o processo de conexão usando os Drivers ODBC.

-----

Para nosso exemplo iremos considerar que a configuração da alias DSN já está configurada no sistema, tanto unixODBC ou odbcad32 com os devidos drivers e já testado a conexão nativa.

[teste.C]

#include <bancoodbc.h>

int main (int argc, char **argv)
    {
    char *query;
    int i, j;
    vector<vector<string> >::iterator it;
    vector<string>::iterator jt;
    vector<string> linha;
    string coluna;
    BANCOODBC ("protestofdb","SYSDBA","masterkey");
    cout << banco.mensagem << endl;
    if (argc == 2)
        {
        query = new char[strlen(argv[1])+1];
        strcpy(query,argv[1]);
        banco.executar(query);
        cout << banco.query_result << endl;
        switch(banco.query_result)
            {
            case 1:
                {
                cout << query << endl;
                cout << "Executado com sucesso!" << endl;
                cout << banco.registros << " - " << banco.colunas << endl;
                break;
                }
            case 2:
                {
                cout << "Registros: " << banco.registros << endl;
                cout << "Colunas: " << banco.colunas << endl;
                for (jt=banco.nome_colunas.begin(); jt < banco.nome_colunas.end(); jt++)
                    {
                    coluna.clear();
                    coluna = *jt;
                    cout << coluna << "\t";
                    }
                cout << endl;
                for (it= banco.resultados.begin(); it < banco.resultados.end(); it++)
                    {
                    linha = *it;
                    for (j=0; j < banco.colunas; j++)
                        {
                        cout << linha.at(j) << "\t";
                        }
                    cout << endl;
                    }
                break;
                }
            case 3:
                {
                cout << banco.mensagem << endl;
                break;
                }
            }
        }
    return 0;
    }

O código acima faz todo o processo necessário e é um exemplo de como simplifiquei a execução de consultas (querys) em qualquer conexão.

[construtor]

BANCOODBC banco("protestofdb","SYSDBA","masterkey");

De uma forma simples passamos o alias DSN, usuário do banco e senha, pode ser feito de forma estática, exemplo acima, ou de forma dinâmica:

BANCOODBC *conn;

conn = new BANCOODBC("protestofdb","SYSDBA","masterkey");

O atributo mensagem sempre é carregado com um log que podemos exibir para verificar o estado da execução e depurar o código.

O segundo passo é carregar a consulta (query) que precisamos executar na conexão. Para isso precisamos utilizar o tipo char, no exemplo acima fiz a alocação dinâmica da consulta passada por argumento na linha de execução (argv), e chamar o método executar passando a consulta como parâmetro e aguardar o resultado.

[resultado]

$ ./teste/TesteODBC "select * from BANCOS"
Conectado com sucesso!

2
Registros: 120
Colunas: 3
IDBANCO    CODIGOBANCO    NOMEBANCO    
1    246    Banco ABC Brasil S.A.    
2    025    Banco Alfa S.A.    
3    641    Banco Alvorada S.A.    
4    029    Banco Banerj S.A.    
5    000    Banco Bankpar S.A.    
6    740    Banco Barclays S.A.    
7    107    Banco BBM S.A.    
8    031    Banco Beg S.A.

Conforme o resultado da consulta o atributo query_result com os valores 1, 2 ou 3, sendo 3 erro de execução 1 e 2 para identificar se a consulta tem ou não retorno de dados. Quando existe o retorno de informação no caso de consulta usando SELECT ou INSERT com retorno, os dados são retornados em uma matriz bi-dimensional utilizando a classe vector da linguagem C++ no atributo resultados que podemos manipular usando o conceito da classe vector, além desse atributo os atributos registros, colunas e nome_colunas também são carregados com, respectivamente, quantidade de registros, quantidade de colunas e um vetor com os nomes das colunas do resultado da consulta.

-----

De forma simples e fácil, usando essa biblioteca, podemos conectar, consultar, alterar e inserir dados em qualquer base de dados que tenha suporte a drivers ODBC.

fontes: http://www.unixodbc.org/ http://www.cplusplus.com/

código fonte da biblioteca: libbancoodbc-1.0.0.tar.xz

 

 

Share this content: