[firebase-br] [C + SQL] Usando 2 bancos ao mesmo tempo.

Euler Jr. euler em siginformatica.com.br
Ter Ago 2 09:26:28 -03 2005


Vc pode criar um identificador unico, dependendo do tipo do argumento de 
entrada. Por ex. SET DATABASE DB1 e SET DATABASE DB2. Depois vc utiliza 
o handle para estabelecer a conexao CONNECT DB1 ou CONNECT DB2, 
dependendo da situacao (IN ou OUT).


[]s
Euler Jr.

Jonis Demamann escreveu:
> Olá pessoal.
> 
> Sou novo no mundo de programação em SQL com C/C++. Eu estou fazendo um
> programa em C++ que usa uma biblioteca dinâmica para acessar o banco
> de dados do Firebird. Tenho um banco de entrada e um de saída e a
> biblioteca dinâmica foi feita em C. O programa principal é feito em
> C++, e criei uma classe Banco para acesso as bases de dados.
> 
> class Banco
> {
>     public:
>         /* Construtor e Destrutor */
>         Banco(void);
>         ~Banco(void);
> 
>         /* Métodos públicos que podem ser usados pelo usuário */
>         int conectaBanco(int);
>         int desconectaBanco(void);
>         int procuraResultado(int);
>         stResultado_t *pegaResultado(int, stStatus_t *);
>         int gravaResultado(void *, int);
>         int apagaResultado(int);
> 
> 
>     private:
>         /* Métodos para o banco */
>         int (*Connect)(const char *, const char *, const char *);
>         int (*Disconnect)(void);
>         int (*Commit)(void);
>         int (*RollBack)(void);
> 
>         /* Métodos para pegar/gravas dados do banco */
>         int (*SelectMinIdMaxTerm)(int *, char *, int);
>         stResultadoLws_t *(*SelectResultadosLws)(int);
>         int (*ApagaResultados)(int);
>         int (*GravaResultados)(int);
> 
>         /* Métodos para quebrar o Resultado em uma Estrutura */
>         stResultado_t *quebraResultado(const char *, int, stStatus_t *);
> 
>         /* Métodos auxiliares (geração log, ler configuração...) */
>         int leConfiguracaoDat(stConfigBanco_t &);
>         void printL(const char *fmt, ...);
> 
> };
> 
> Para fazer a conexão com os Bancos, passo para a classe o parâmetro 0,
> se for o banco de entrada, e 1 se for o banco de saída. A classe lê um
> arquivo de configuração .dat que contém o caminho, senha e usuário de
> cada base de dados.
> 
> O problema é que não sei como fazer para diferenciar os bancos de
> entrada/saída na biblioteca dinâmica. O código pode ser visto a
> seguir:
> 
> #include <stdio.h>
> #include <stdarg.h>
> #include "../includes/utils.h"
> #include "../includes/gerenciador.h"
> 
> #define LOGSIZE 50
> #define LOGFILE "firebird.log"
> 
> EXEC SQL SET SQL DIALECT 3;
> 
> int ConnectFire(const char *pszUser, const char *pszPass, const char *pszDb) {
>     printLFire("Connect <FIREBIRD> BEGIN");
> 
>     EXEC SQL WHENEVER SQLERROR GO TO SqlError;
>     EXEC SQL CONNECT :pszDb USER :pszUser PASSWORD :pszPass;
>     printLFire("Connect <FIREBIRD> END");
>     return (1);
> 
> SqlError:
>     printLFire("Connect <FIREBIRD> ERROR");
>     return (0);
> }
> 
> int DisconnectFire(void) {
>     printLFire("Disconnect <FIREBIRD> BEGIN");
>     EXEC SQL WHENEVER SQLERROR GO TO SqlError;
>     EXEC SQL DISCONNECT;
>     printLFire("Disconnect <FIREBIRD> END");
>     return (1);
> 
> SqlError:
>     printLFire("Disconnect <FIREBIRD> ERROR");
>     return (0);
> }
> 
> 
> Sei que vou ter que usar o comando  EXEC SQL SET DATABASE, mas não sei
> exatamente como usar.
> No meu programa, eu instâncio 2 objetos do tipo Base (dbIn e dbOut) e
> inicializo eles:
> 
> dbIn.conectaBanco(0); // para conectar no bando de entrada.
> dbIn.conectaBanco(1); // para conectar no banco de saída
> 
> Quando tento conectar no banco de saída, ocorre um erro dizendo que
> não foi possível conectar ao banco (isso porque não estou usando SET
> DATABASE...). Se alguém puder me dar uma luz.
> 
> Não sei se fui bem claro, mas posso passar os códigos em C++.
> 
> Obrigado.
> --
> Jonis Alves Demamann.
> ICQ 53207119
> MSN morppheu em hotmail.com
> 
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> 






Mais detalhes sobre a lista de discussão lista