Duvidas sobre sistema Multicamada Criado em Delphi + Firebird

03/04/2016

2

Tenho uma duvida, estou criando um sistema com Delphi Xe 6 + DatSnap + Firebird só que quando rodo o Servidor em um Outro PC o Cliente não Funciona só funciona quando o cliente esta na mesma maquina do Servidor ai o Cliente funciona como posso resolver Isso
Responder

Post mais votado

06/04/2016

Verifique se o Firewall da máquina Servidora está ativado, a primeiro momento tente desativar e ver se consegue fazer a conexão da máquina cliente.

Funcionando, libere no Firewall a porta de conexão do Firebird, essa se você não tiver alterado nos arquivos de configuração do FB será 3050.
Responder

Mais Posts

04/04/2016

P2

Faça a conexão com arquivo INI.
Responder

06/04/2016

Aislan Sousa

Em Primeiro Lugar Obrigado por procurar ajuda um amigo Fico Muito Grato por Isso



Sim Já fiz, mais porem o Servidor Funciona mais o Cliente dar erro de socket como se o Servidor não tivesse funcionando

Veja no Servidor to Criando o Seguinte :

Para Gravar o Arquivo INI Foi Criado :

procedure TF_Servidor.GravarExecute(Sender: TObject);
begin
Iniconf.WriteString('Servidor','Porta', Edit_Nova_Porta.Text);
Iniconf.WriteString('Servidor','Caminho', Edit_Novo_Caminho.Text);
Iniconf.WriteString('Servidor','IP', Edit_Novo_IP.Text);
Iniconf.WriteString('Servidor', 'Transporte', IntToStr(SC.Transporte.Port));
Iniconf.WriteString('Servidor','Caminho1', SC.Servidor.Params.Values['Database']);
Iniconf.WriteString('Servidor','Senha', SC.Servidor.Params.Values['Password']);
Iniconf.WriteString('Servidor','Login', SC.Servidor.Params.Values['UserName']);
Iniconf.WriteString('Servidor','Protocolo', SC.Servidor.Params.Values['Protocol']);
Iniconf.WriteString('Servidor','IP', SC.Servidor.Params.Values['Server']);
Iniconf.WriteString('Servidor','Dialeto', SC.Servidor.Params.Values['SQLDialect']);
Iniconf.WriteString('Servidor','CaracterSet', SC.Servidor.Params.Values['CharacterSet']);
Iniconf.WriteString('Servidor','DriverID', SC.Servidor.Params.Values['DriverID']);
Iniconf.WriteString('Servidor','Name', SC.Servidor.Params.Values['Name']);
Iniconf.WriteString('Servidor','DriverName', SC.Servidor.Params.Values['DriverName']);
Iniconf.WriteString('Servidor','DriverID', SC.Servidor.Params.Values['DriverID']);
end;

//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Para Buscar os dados do Arquivo INI foi criado


procedure TF_Servidor.AltenticarExecute(Sender: TObject);
begin
SC.Transporte . Port := StrToInt(Iniconf.ReadString('Servidor','Porta',''));
SC.Servidor . Params.Values['Database'] := Iniconf.ReadString('Servidor','Caminho','');
SC.Servidor . Params.Values['Server'] := Iniconf.ReadString('Servidor','IP','');
SpeedConectar.Enabled := True;
//--------------------------------------------------------------------------

// Código feito para testar se realmente o endereço do banco e o IP tava correto e esta

Edit_Caminho_Atual .Text := SC.Servidor.Params.Values['Database'];
Edit_IP_Atual .Text := SC.Servidor.Params.Values['Server'];
Edit_Porta_Atual.Text := IntToStr(SC.Transporte.Port);

end;



Conexão do Cliente Gravar o arquivo INI no Cliente


procedure TF_Configuracao.SpeedConectarClick(Sender: TObject);
begin
DM.Cliente.Close; // Aqui eu Limpo a Conexão
DM.Cliente.Connected := False; // Disconecto a Conexão
Iniconf.WriteString('Cliente','Porta', Edit_Porta.Text); // Aqui eu Gravo a Porta que esta sendo executada no Servidor
Iniconf.WriteString('Cliente','Hostname', Edit_HostName.Text); // Aqui eu Gravo o IP do Servidor
DM.Cliente.Connected := True; // Aqui eu Conecto a Conexão
DM.CDS_Unidades.Open; // Aqui eu Abro A Tabela de Unidade para testa a Conexão
end;


Código para Buscar os Dados que foi Gravado no Cliente


procedure TF_Configuracao.FormActivate(Sender: TObject);
begin


DM.Cliente.Params.Values['Port'] := Iniconf.ReadString('Cliente','Porta','');
DM.Cliente.Params.Values['HostName'] := Iniconf.ReadString('Cliente','HostName','');
DM.Cliente.Connected := True; // Aqui eu Conecto a Conexão
DM.CDS_Unidades.Open;// Aqui eu Abro A Tabela de Unidade para testa a Conexão
end;


Se o amigo tem um código melhor por favor posta ai eu a gradeço muito e fico muito grato

Espero resposta do amigo
Responder

06/04/2016

Raylan Zibel

Verifique se o Firewall da máquina Servidora está ativado, a primeiro momento tente desativar e ver se consegue fazer a conexão da máquina cliente.

Funcionando, libere no Firewall a porta de conexão do Firebird, essa se você não tiver alterado nos arquivos de configuração do FB será 3050.


Se estiver usando conexão socket, libere so a porta do socket no servidor. Se é DataSnap não deve precisar liberar a porta do firebird, pois essa conexão deverá ser feita localmente no servidor.
Responder

07/04/2016

Aislan Sousa

Ola a migo Boa noite desculpe-me incomodar mais uma vez

Veja:

Eu Coloquei este Código citado no link mais não consegui acessa o Banco remotamente

SC.Servidor.Params.Clear;
SC.Servidor.Connected:= False;
SC.Servidor.Params.Add('ConnectionDef:=Servidor');
SC.Servidor.Params.Add('Database:=C:\Program Files\SysBanco\SYSCOMER.FDB ');
SC.Servidor.Params.Add('Password:= masterkey ');
SC.Servidor.Params.Add('User_Name:= sysdba ');
SC.Servidor.Params.Add('MonitorBy:=Remote');
SC.Servidor.Params.Add('Protocol:=TCPIP');
SC.Servidor.Params.Add('DatasnapContext:=datasnap/');
SC.Servidor.Params.Add('CharacterSet=ISO8859_1');
SC.Servidor.Params.Add('Server:= Aqui eu Coloquei o IP do Servidor');
SC.Servidor.Params.Add('DriverID:=FB');
SC.Servidor.Params.Add('Name:=Servidor');
SC.Transporte.Port := 211;

então fiz esse código deu certo o servidor

Com esse código eu consigo ligar o Servidor ao Banco

//-----------------------------------------------------------------------------
// Buscando os dados do Arquivo INI
//-----------------------------------------------------------------------------
Edit_Porta_Atual.Text := Iniconf.ReadString('Servidor','Porta','');
Edit_IP_Atual.Text := Iniconf.ReadString('Servidor','IP','');
Edit_Caminho_Atual.Text := Iniconf.ReadString('Servidor','Caminho','');


//-----------------------------------------------------------------------------
// Recebendo dados
//-----------------------------------------------------------------------------
SC.Transporte.Port := StrToInt(Iniconf.ReadString('Servidor','Porta','')); // DSTCPServerTransport1 Recebe a Porta
SC.Servidor.Params.Values['Database'] := Iniconf.ReadString('Servidor','Caminho',''); // FDConnection1 Recebe o Caminho do Banco
SC.Servidor.Params.Values['Server'] := Iniconf.ReadString('Servidor','IP',''); // FDConnection1 Recebe o IP

//-----------------------------------------------------------------------------
// Conferir se a Porta o IP e o Caminho do Banco esta Correto
//-----------------------------------------------------------------------------

Edit_Porta_Atual . Text := IntToStr(SC . Transporte . Port);
Edit_IP_Atual . Text := SC.Servidor . Params . Values['Server'];
Edit_Caminho_Atual . Text := SC.Servidor . Params . Values['Database'];


Em tão eu coloquei esse código no cliente que foi o sugerido no link mais não funcionou

DM.Cliente.Params.Clear;
DM.Cliente.Params.Add('DriverUnit:=Data.DBXDataSnap');
DM.Cliente.Params.Add('ServerConnection:= IP do Servidor ');
DM.Cliente.Params.Add('Password:= masterkey ');
DM.Cliente.Params.Add('User_Name:= sysdba ');
DM.Cliente.Params.Add('Port:= Edit_Porta.Text');
DM.Cliente.Params.Add('CommunicationProtocol:=tcp/ip');
DM.Cliente.Params.Add('DatasnapContext:=datasnap/');
DM.Cliente.Params.Add('DriverAssemblyLoader:=Borland.Data.TDBXClientDriverLoader,Borland.Data.DbxClientDriver,Version=20.0.0.0,Culture=neutral,PublicKeyToken=91d62ebb5b0d1b1b');
DM.Cliente.Params.Add('HostName:= Edit_Caminho_ou_IP.Text');

try
DM.Cliente.Connected:= True;
except
on E: Exception do
begin
ShowMessage('Erro ao tentar conexão com o Banco..');
//Application.Terminate;
end;
end;

Não sei o que fazer mais
Responder

08/04/2016

P2

Bom dia, esta pasta tem que está compartilhada
C:\Program Files\SysBanco


Para que funcione no Servidor e Cliente tente
SC.Servidor.Params.Add('Database:=IP:\Program Files\SysBanco\SYSCOMER.FDB ');
Ou
SC.Servidor.Params.Add('Database:=Nome_do_Server:\Program Files\SysBanco\SYSCOMER.FDB ');

Um exemplo de arquivo INI e Firedac com BD Firebird

Meu CONF.

[CNX_BD]
DATABASE=10.0.0.5:\Aplic\TI\GXML\BD\SYSGEX.FDB
USERNAME=SYSDBA
PASSWORD=masterkey
[PARAM]
CAMINHO_BANCO=\\10.0.0.5\Aplic\TI\GXML\BD\SYSGEX.FDB



Lendo CONF e Conectando

var vArquivo:TIniFile;
Caminho_CONF:string;
begin
Caminho_CONF:=(ExtractFilePath(Application.ExeName) +'CNX.Ini');
if not (FileExists(Caminho_CONF)) then
begin
ShowMessage('Arquivo de conexão com o banco de dados não localizado.');
Application.Terminate;
end
else
begin
vArquivo:=TiniFile.Create(ExtractFilePath(Application.ExeName) +'CNX.Ini');
DM.CNX_PRINCIPAL.Connected:=FALSE;
DM.CNX_PRINCIPAL.Params.Values['Database']:=vArquivo.ReadString('CNX_BD','DATABASE','');
DM.CNX_PRINCIPAL.Params.Values['VedorLib']:=vArquivo.ReadString('CNX_BD','VENDOR_LIB','');
DM.CNX_PRINCIPAL.Params.Values['UserName']:=vArquivo.ReadString('CNX_BD','USERNAME','');
DM.CNX_PRINCIPAL.Params.Values['Password']:=vArquivo.ReadString('CNX_BD','PASSWORD','');
CAMINHO_BANCO:=vArquivo.ReadString('PARAM','CAMINHO_BANCO','');


IF NOT FileExists(CAMINHO_BANCO) then
BEGIN
ShowMessage('BANCO DE DADOS NÃO LOCALIZADO >>'+CAMINHO_BANCO);
Application.Terminate;
END
ELSE
BEGIN
TRY
DM.CNX_PRINCIPAL.Connected:=TRUE;
EXCEPT
Responder

09/04/2016

Aislan Sousa

Obrigado Mais uma vez
Responder