+ Responder ao Tópico



  1. #1
    Noia
    Visitante

    Padrão C++ Classe e Banco de Dados

    Alguém poderia postar ou indicar um link de uma classe em C que acessa um banco de dados?

    Pode ser algo bem simplea apenas para eu ver um exemplo de como seria feito dentro de uma classe

    Obrigado,

    Marcelo Gomes

  2. #2
    Visitante

    Padrão C++ Classe e Banco de Dados

    Cara... isso depende do DB q vc esta usando.

    A Oracle possui um precompilador chamado Pro*C:
    vc escreve o comando SQL dentro do fonte em C (com nome, por exemplo, fonte.pc).
    Passa pelo precompilador e esse gera o arquivo fonte.c
    Esse fonte.c vc pode compilar normalmente no gcc (adicionando libs da oracle).

    Um exemplo de uma classe usando Oracle Pro*C:
    int ccccc::fffff(int &drhact, int &vcheck)
    {
    EXEC SQL BEGIN DECLARE SECTION;
    int hdrhact;
    int hvcheck;
    EXEC SQL END DECLARE SECTION;

    drhact = 0;
    vcheck = 0;

    EXEC SQL
    SELECT DECODE(VCHECK_B, 'X', 1, 0), DECODE(DRHACT, 'X', 1, 0)
    INTO :hvcheck, :hdrhact /* <-- aqui vc captura o retorno da query */
    FROM TABLE;

    drhact = hdrhact;
    vcheck = hvcheck;

    return 0;
    }

    Após precompilado, o Pro*C gera o fonte.c, e essa classe aparece com um monte de variaveis estranhas, com um monte de funcoes estranhas... compreendidos(as) pela LIB da Oracle na linkedicao (a edicao do programador deve ser sempre em cima do fonte.pc).

    O Informix tb é igual a Oracle (precompiladores sao mais rapidos e mais fechados).

    Já o mySQL funciona com base em APIs: funcoes que vc passa uma string com o comando SQL desejado.
    Nao me lembro de cabeça a API, mas é algo como:
    mySQL_do_query("select * from table");

    http://dev.mysql.com/doc/mysql/en/cplusplus.html

    Por isso que existem "drivers" de bancos de dados (ate mesmo em linguagem de mais alto nivel como Perl). Nao tem como fugir, O acesso a eles são diferentes.
    Uma dica: aproveite que vc esta usando OO e isole a parte de acesso ao DB. As funcoes que vc realemnte acessa o DB (connect, querys e etc) vc faz uma lib (e adiciona no projeto em tempo de compilacao). Se vc estiver afim de fazer algo muito mais profissional/elite: use dlopen() e faça sua lib de acesso a DB como se fossem plug-ins! Fica muito mais gerenciavel: tanto para quem usa o programa quanto para o desenvolvedor.