27/01/2006

Acesso a dois bancos iguais dependendo da senha

:?:
Olá a todos.
Tenho uma aplicação de controle de pedidos já pronta e funcionando.
O banco de dados é Firebird e o nome do Data module é DMDADOS,
neste datamodule tenho 33 tabelas.
Uso DbExpress e criei variáveis para cada tipo de componente.
===
V_SqlCnctn : TSqlConnection;
V_CliDtSt : TClientDataSet;
V_SqlDtSt : TSqlDataSet;
V_DtStPrv : TDataSetProvider;
V_DtSource : TDataSource;
===
Ao selecionar uma opção no menu faço:
begin
try
V_CliDtSt := DmDados.CliDtStPedidos;
V_SqlDtSt := DmDados.SqlDtStPedidos;
V_DtSource := DmDados.DsPedidos;
FrC1070 := TfrC1070.Create(Application);
FrC1070.ShowModal;
finally
FrC1070 := Nil;
end;
end;
===
O meu problema é, tenho outro banco de dados com o nome DMDADOS_,
com as mesmas 33 tabelas, só que dependendo da senha informada ao
entrar no sistema preciso abrir um banco (DMDADOS) ou o outro (DMDADOS_), DEPENDENDO DA SENHA.
Mas as rotinas de chamada dos programas no menu estão conforme acima.
Uma solução seria:
begin
If senha = 1 then
begin
try
V_CliDtSt := DmDados.CliDtStPedidos;
V_SqlDtSt := DmDados.SqlDtStPedidos;
V_DtSource := DmDados.DsPedidos;
FrC1070 := TfrC1070.Create(Application);
FrC1070.ShowModal;
finally
FrC1070 := Nil;
end;
else // senha 2
begin
try
V_CliDtSt := DmDados_.CliDtStPedidos;
V_SqlDtSt := DmDados_.SqlDtStPedidos;
V_DtSource := DmDados_.DsPedidos;
FrC1070 := TfrC1070.Create(Application);
FrC1070.ShowModal;
finally
FrC1070 := Nil;
end;
end;
===
Ainda não tenho uma solução para este caso mas acredito que não
deva ser esta a melhor.
Penso que deva haver uma forma mais inteligente para resolver este problema.
Caso possam me ajudar agradeço.
Um Abraço a todos e Obrigado
Neto


Neto

Respostas

27/01/2006

Rjun

Por que você não cria duas strings de conexão? Uma para cada senha.


Responder Citar

27/01/2006

Neto

Olá Rjun, obrigado pela força.
Ao informar a senha eu estou fazendo uma validacão assim:
If Senha = 1 then
begin
V_SqlCnctn := DmDados.SQLCnctnConexao;
V_SqlCnctn.Connected := true;
end;
else // abrir a segunda conexão - DMDADOS_
begin
V_SqlCnctn := DmDados_.SQLCnctnConexao;
V_SqlCnctn.Connected := true;
end;
Até ai para abrir uma conexão ou outra tudo bem, mas o problema
é ao chamar abrir as tabela, todos as rotinas se referenciam a
conexão DMDADOS. Será que é possível criar tipo um mesmo ALIAS,
para hora uma conexão e hora outra????
Obrigado
Neto


Responder Citar

27/01/2006

Rjun

Você está usando dois Data Modules? Ainda acho que em vez de utilizar dois objetos de conexão, dois data modules, utilize duas strings de conexão.


Responder Citar

27/01/2006

Neto

Preciso de duas conexões porque um banco fica no servidor dentro da empresa e o outro banco fica num prédio fora da empresa (BEM DISTANTE COM OUTRO IP FIXO).
De qualquer forma se sua dica resolver meu problema tudo bem.
Poderia me dar um exemplo de como fazer duas strings de conexão??
Obrigado novamente
Neto


Responder Citar

27/01/2006

Rjun

Eu nunca trabalhei com FB então vamos por parte. No seu objeto SQLCnctnConexao deve ter uma propriedade chamada ConnectionString ou StringConnection. Nela você terá os parâmetros para se conectar ao banco de dados (nome do banco, servidor, usuario, senha, etc...). Faça com que a atribuição da string de conexão seja em run-time, fazendo com que seja alterado os valores que você deseja, dependendo da senha informada.


Responder Citar

27/01/2006

Neto

Puts é isso mesmo, fazendo assim não preciso de dois datamodules e portanto esta resolvida a questão.
Muito obrigado pelas preciosas dicas.
Vou implementar isso, mas já saquei e não tenho duvidas de que vai funcionar.
T+
Neto


Responder Citar