Fórum Alteração do caminho do banco em runtime #394961
02/02/2011
0
Servercliente.SQLCliente.Connected:=false;ServerCliente.SQLCliente.Params.Values['drivername']:='FIREBIRD';ServerCliente.SQLCliente.Params.Values['blobsize']:='-1';ServerCliente.SQLCliente.Params.Values['commitretain']:='False';ServerCliente.SQLCliente.Params.Values['localecode']:='0000';ServerCliente.SQLCliente.Params.Values['password']:='masterkey';ServerCliente.SQLCliente.Params.Values['rolename']:='RoleName';ServerCliente.SQLCliente.Params.Values['sqldialect']:='3';ServerCliente.SQLCliente.Params.Values['isolationlevel']:='ReadCommitted';ServerCliente.SQLCliente.Params.Values['user_name']:='sysdba';ServerCliente.SQLCliente.Params.Values['waitonlocks']:='True';ServerCliente.SQLCliente.Params.Values['trim char']:='False';ServerCliente.SQLCliente.Params.Values['Database']:='banco1.FDB';
alguem tem alguma ideia?estou usando o delphi2010grato a todos,
Bruno Mendonça
Curtir tópico
+ 0Posts
02/02/2011
Marco Salles
blobsize=-1
commitretain=False
database=C:\zPodeApagar\Alv\db.ini
localecode=0000
Password=masterkey
rolename=RoleName
sqldialect=3
isolationlevel=ReadCommitted
user_name=sysdba
waitonlocks=True
trim char=False
port=3155
communicationprotocol=tcp
Podemos ,utilizando entre outros meios , um TString para ler qq propriedade deste Arquivo INI e tb Modifica-lo Perceba o codigo abaixo e adapte á sua necessidade
var
Lista:TStrings;
begin
Lista:=TStringList.Create;
lista.LoadFromFile('temp.ini');
try
showmessage(Lista.Values['database']); // so a título de demostrativo
if OpenDialog1.Execute then
begin
OpenDialog1.FileName;
Lista.Values['database']:=OpenDialog1.FileName; //com esta propriedade vc alter qq propriedade
Lista.SaveToFile('temp.ini');
end;
finally
lista.Free;
end;
Observação .. Veja que meu arquivo tem o Sinal de Igualdade separando o Campo dp Atributo
Caso necessite um Outro tipo de separação , acredito não ser ocaso , basta definir a property
lista.NameValueSeparator := 'Ao Novo caracter de Separação' *** So para constar
No caso do TStrings o Default é o sinal de Igualdade
Gostei + 0
03/02/2011
Bruno Mendonça
Procedure.botao1
Servercliente.SQLCliente.Connected:=false;ServerCliente.SQLCliente.ConnectionName:='BANCO';ServerConexoes.DSTCPServerTransport1.Port:=235;Servercliente.SQLCliente.Connected:=true;ServerConexoes.DSServer1.Start;
Procedure.botao2
Servercliente.SQLCliente.Connected:=false;ServerCliente.SQLCliente.ConnectionName:='BANCO2';ServerConexoes.DSTCPServerTransport1.Port:=240;Servercliente.SQLCliente.Connected:=true;ServerConexoes.DSServer1.Start;
eu fiz desta maneira em meu computador e deu certo, so que no servidor não.obrigado novamente...
Gostei + 0
03/02/2011
Marco Salles
Gostei + 0
03/02/2011
Bruno Mendonça
mesmo alterando as portas no cliente ele somente conecta-se no banco Mastertech, um é porta 240 e o outro é 235e no server mostra que a porta 240 vai pro mmbom isto acho que é da forma mais explicagrato pela atençao e pela ajuda
Gostei + 0
03/02/2011
Marco Salles
Gostei + 0
03/02/2011
Bruno Mendonça
Gostei + 0
03/02/2011
Marco Salles
Gostei + 0
03/02/2011
Bruno Mendonça
Gostei + 0
03/02/2011
Marco Salles
Gostei + 0
03/02/2011
Bruno Mendonça
Gostei + 0
03/02/2011
Marco Salles
begin
case RadioGroup1.ItemIndex of
0:DmCliente.SqlServerMethod1.Params[0].AsString:='Employee';
1:DmCliente.SqlServerMethod1.Params[0].AsString:='Contatos';
end;
DmCliente.SqlServerMethod1.ExecuteMethod; if DmCliente.SqlServerMethod1.Params[1].AsBoolean then
begin
DmCliente.ClientDataSet1.Close;
DmCliente.ClientDataSet1.Open;
end;
end; Passo para o SqlServerMethod1 ( um método no Servidor ) qual o Banco que eu Quero Este Metodo esta assim No Servidor function TServerMethods1.AternarBanco(NomeBanco: String): Boolean;
const
Caminho = 'C:\Users\Marco Salles\Documents\RAD Studio\Projects\DataSnapServidorComDoisBancos\Servidor\'; {Caminho onde esta meus Arquivos INI .. Tenho dois o Employee.INI e o Contatos.Ini}
var
StrFileName:String;
begin
conexao.Close;
SQLQuery1.SQL.Clear;
case AnsiIndexStr(UpperCase(NomeBanco), ['EMPLOYEE', 'CONTATOS']) of
0:begin
StrFileName:='Employee.Ini'; // Novo Sql para conectar em uma Tabela do Banco EMPLOYEE
SQLQuery1.SQL.Add('Select * From Employee');
end;
1:begin
StrFileName:='Contatos.ini'; // Novo Sql para conectar em uma Tabela do Banco CONTATOS
SQLQuery1.SQL.add('Select * From CONTATOS');
end;
end;
Conexao.Params.Clear; //Carrego o Parametro da conexão
conexao.Params.LoadFromFile(caminho+StrFileName);
try //testo se esta tudo bem
conexao.Open; //se tiver retorna boolean=True , para o Metodo do cliente que envovou este método no servidor
result:=True;
except //se algo der errado , retorno False para o método do Cliente que chamou este método no Servidor
result:=false
end;
end;
Como as tabelas tem a mesma estrutura muita coisa pode ser reaproveitada no servidor , todos os tfields do clientDataSet por exemplo .. Como o meu caso foi so demostrativo , so carrego o clientDataSet do Cliente em um DbGrid , utilizando o DataSouce
Gostei + 0
03/02/2011
Bruno Mendonça
[MASTER]drivername=FIREBIRDblobsize=-1commitretain=Falselocalecode=0000password=masterkeyrolename=RoleNamesqldialect=3isolationlevel=ReadCommitteduser_name=sysdbawaitonlocks=Truetrim char=FalseDatabase=C:\SERVIDOR\MASTERTECH\BANCOMASTERTECH.FDB
so que ele fala que o banco que ele tentou localizar é um chamado cliente.gdbque eu nem sei da onde saiu isto.
Gostei + 0
04/02/2011
Deivison Melo
/**************************************************************************************************************/
/*DataModule Principal - (inicio)*/
No evento OnCreate do DataModule fiz o seguinte: begin
if not FileExists('sga.ini') then
// Se não existe chamo um formulário para gravar o caminho do banco
ChamaForm(TfrmConfiguracao, frmConfiguracao)
else
begin
try
with ConexaoDB do
begin
Connected := False;
connectionname := 'PortoBello';
drivername := 'interbase';
getdriverfunc := 'getSQLDriverINTERBASE';
libraryname := 'dbexpint.dll';
params.clear;
params.add('drivername=interbase');
params.add('database= ' + LerInI('sga.ini', 'DB', 'caminho'));
params.add('rolename=rolename');
params.add('user_name=' + LerInI('sga.ini', 'DB', 'usuario'));
params.add('password=' + LerInI('sga.ini', 'DB', 'senha'));
params.add('servercharset=');
params.add('sqldialect=3');
params.add('blobsize=-1');
params.add('commitretain=false');
params.add('waitonlocks=true');
params.add('errorresourcefile=');
params.add('localecode=0000');
params.add('interbase transisolation=readcommited');
params.add('trim char=false');
vendorlib := 'gds32.dll';
Connected := true;
end;
except
raise Exception.Create('Verifique se as configurações do arquivo "sga.ini" estão corretas!');
end;
end; /*DataModule Principal - (fim)*/ /**************************************************************************************************************/
/*Procedure GravaIni - (inicio)*/ //Procedure para gravar arquivo ini usado no login procedure GravaIni(Arquivo, Sessao, Subsessao, valor: string);
var
ArqIni: TIniFile;
begin
ArqIni := TIniFile.Create(ExtractFilePath(ParamStr(0)) + Arquivo);
try
ArqIni.WriteString(Sessao, Subsessao, valor);
finally
FreeAndNil(ArqIni);
end;
end; /*Procedure GravaIni - (inicio)*/
/**************************************************************************************************************/
/*Function GravaIni - (inicio)*/
//Funcao para ler arquivo ini usado no login function LerIni(Arquivo, Sessao, Subsessao: string): string;
var
ArqIni: TIniFile;
sDirAplicacao: string;
begin
sDirAplicacao := ExtractFilePath(ParamStr(0));
ArqIni := TIniFile.Create(ExtractFilePath(ParamStr(0)) + Arquivo);
try
Result := ArqIni.ReadString(Sessao, Subsessao, '');
finally
FreeAndNil(ArqIni);
end;
end;
/*Procedure GravaIni - (fim)*/
/**************************************************************************************************************/
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)