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: