Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
Kazinho Novato

Registrado: Segunda-Feira, 17 de Setembro de 2018 Mensagens: 5
|
Enviada: Seg Set 17, 2018 10:06 pm Assunto: Problema com comunicação FDConnection datasnap com sql serve |
|
|
Boa noite,
Estou com um problema na conexão com datasnap, pra ser mais preciso com os parametros do FDConnection.
sou novo com isso então estou criando um app basico com comunicação datasnap.
Primeiramente bem simples só pra colocar os dois para comunicar com um banco SQL server e ver como funciona pra futuras aplicações.
O Problema esta no "SERVIDOR" o executavel q vai segurar o banco para as conexão do mobile ou de algum executavel do windows mesmo.
o executavel do app esta tudo certo funcionando beleza, mas o executavel do servidor esta com o seguinte problema com os parametros e nao sei o que fazer.
criei uma conexão via datasnap server, mas fiz tudo em aberto para que nao so meu computador conecte, e sim qualquer maquina com o banco sql.
Então criei na unit do servidor formas de abrir puxar o ip no edit e só conectar quando clicar no button para eu definir no edit qual ip vai ser conectado.
entao tive que criar as condições passando pelas outras uses e usando as outras units, para conseguir pegar o parametro que esta no fdconnection e define a conexao com o banco sql server de acordo com cada computador e ip etc...
Então criei assim
procedure TForm1.btnCONECTAClick(Sender: TObject);
var
S: TDSServerModule_PRODUTOS;
begin
S := TDSServerModule_PRODUTOS.Create(nil);
try
S.FDConnection1.Close;
S.FDConnection1.Params.Clear;
S.FDConnection1.Params.Add('Params=(TFDConnectionDefParams)');
S.FDConnection1.Params.Add('Database=BASE0001');
S.FDConnection1.Params.Add('DriverID=MSSQL');
S.FDConnection1.Params.Add('Password=123');
S.FDConnection1.Params.Add('User_Name=sa');
S.FDConnection1.Params.Add('Server='+edtIP.Text);
S.FDConnection1.Connected:= True;
if s.FDConnection1.Connected = true then
begin
showmessage('SQL CONECTADO');
end;
servercontainerunit1.ServerContainer1.DSServer1.AutoStart:= True;
servercontainerunit1.ServerContainer1.DSServer1.Start;
if servercontainerunit1.ServerContainer1.DSServer1.AutoStart = true then
begin
showmessage('SERVER CONECTADO');
end;
finally
S.Free;
end;
end;
Assim o que eu digitar no edit e quando clicar no botao ai conecta de acordo com varios ips diferente e nao só no meu.
Ai o problema no componente FDConnection tem os params que faz conexão sendo elas base senha ip....
então eu clicar e editando no proprio componente se eu deixar o meu ip na direto no componente em Server ai executo abro e abro o app e conecta normal
com essas condições acima ai
agora se deixar um outro diferente ali ou eu trocar meu ip ja era mesmo com os IF ele fala que conectou ficou True mas quando abro o app pra conectar da remote erro timeout
ai se vou no componente e mudo o ip pro meu e abro ai volta funcionar pq meu parametro nao ta levando certo o ip mesmo com o clear.
E outra se debug ele passa pelos if e diz q ta conectado TRUE
Obrigado |
|
Voltar ao Topo |
|
 |
Kazinho Novato

Registrado: Segunda-Feira, 17 de Setembro de 2018 Mensagens: 5
|
Enviada: Seg Set 17, 2018 10:29 pm Assunto: |
|
|
Fiz varios teste e vi que o fdconnection no params dele tem driverid database username..... tem todos mesmo o Server.
entao só pelo params.add mesmo que consigo tentar setar ele.
ja tirei S.FDConnection1.Params.Add('Params=(TFDConnectionDefParams)');
mudei posições do servercontainerunit1.ServerContainer1.DSServer1.AutoStart:= True;
servercontainerunit1.ServerContainer1.DSServer1.Start;
mas nada deu certo
então eu fui la na propriedade do componente server e deixei como localhost.
até ai tudo bem assim funciona mas uma duvida...
esse localhost vai pegar o nome ou ip da maquina?
pq preciso que seja ip nem sempre o sql aceita o nome
alem de ter q informar depois do ip ,1433 da porta
realmente sera q tem algo para que seja feito para que defina o Server para
ip do edit que estiver informado mais o ,1433 para ser aceito em todos os computador e qualquer ip ou sql server?
obrigado |
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Set 18, 2018 10:11 am Assunto: |
|
|
Bom dia,
Nesse código que você postou está sendo criada uma instância local do TDSServerModule e logo após as configurações ele é destruído, então não é possível utilizar essa instância desse componente depois.
Esse código que faz as configurações deve utilizar o FDConnection que está sendo acessado pela aplicação cliente. Ele deve estar declarado em outro lugar.
Espero que ajude
Editado pela última vez por imex em Ter Mar 07, 2023 5:46 pm, num total de 1 vez |
|
Voltar ao Topo |
|
 |
Kazinho Novato

Registrado: Segunda-Feira, 17 de Setembro de 2018 Mensagens: 5
|
Enviada: Qua Set 19, 2018 1:03 am Assunto: |
|
|
Entendi...
Mas tudo isso foi feito na unit do client do datasnap a intenção e abrir esse servidor em qualquer maquina e nao só fixa na minha então queria deixar aberto a opção pra digitar em um edit o IP de qualquer maquina.
teria um exemplo de como teria que declarar ela em outro lugar?
pois eu deixei localhost e abri em outras maquinas e funcionou
mas como disse nem sempre local host vai funcionar pq preciso ter ip,1433 da porta pra acessar ela totalmente livre de bloqueio
mas ta funcionando
obrigado pela resposta. |
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qua Set 19, 2018 10:35 am Assunto: |
|
|
Acredito que você tenha uma variável global dentro da unit do seu TDSServerModule que já está sendo instanciada. Ex:
Código: | var
DSServerModule_PRODUTOS: TDSServerModule_PRODUTOS; |
Aquele código para configurar o FDConnection deve utilizar essa variável (ou outra que está sendo utilizada no servidor).
Se o IP está no aplicativo cliente, deve ser criado um método no Server para enviar o IP para o servidor onde deve ser feita a configuração do FDConnection.
Espero que ajude |
|
Voltar ao Topo |
|
 |
|