GARANTIR DESCONTO

Fórum Conexão de Banco de dados No Rad Studio #519459

11/05/2015

0

Ola boa tarde tou com um problema talvez seja bem simples de resolver mais não tou conseguindo.

Tou desenvolvendo um sistema de cadastro para apresentar como trabalho da universidade é só cadastro de alunos
e é o seguinte:

Estou fazendo no Rad Studio XE6 com o firebird onde criei uma tabela de Alunos a conexão é o dbExpress + data Snap é que estamos estudando conexão com o fireDac e dbExpress , fizemos o sistema e ele roda na maquina que fizemos, mais para nossa surpresa quando fomos mostra para a professora só rodou o Servidor, a parte do lado do Cliente deu o seguinte erro,

Erro Socket

Exemplo: Onde nos fizemos colocamos o caminho para o banco de dados assim: 192.168.1.2:C:\Arquivos de programas\Banco\Alunos.FDB

Trocamos o o IP do pc da Universidade mais a professora desse que assim não tínhamos que desenvolver um arquivo "INI" desenvolvemos mais continua dando o mesmo erro e quando mudamos o IP da maquina onde ele foi feito também da erro. se alguém poder nos ajudar ficamos grato.
Aislan Sousa

Aislan Sousa

Responder

Posts

13/05/2015

Mateus Carvalho

Aislan, posta o código de conexão do client e servidor, junto com o código de envio de dados server-client.
Responder

Gostei + 0

13/05/2015

Aislan Sousa

Como assim
não entendi
Responder

Gostei + 0

13/05/2015

Aislan Sousa

Obrigado por sua atenção mais poderia ser um pouco mais claro por favor se possível coloque um exemplo
Responder

Gostei + 0

13/05/2015

Aislan Sousa

Amigo pode não ser dessa forma mais acho que se der mais uns ajuste vai funcionar beleza só não testei ainda via internet mais em rede tá funcionado

Segue toda a rotina

desculpa-me por a bagunça mais ainda estou tirando as linhas de código que não precisa

unit UServidor;

interface

uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Menus,
Vcl.Buttons, Vcl.StdCtrls,IniFiles, Vcl.ExtCtrls, Vcl.Grids, Vcl.DBGrids,
Data.DB;

type
TF_Servidor = class(TForm)
Pn_Topo: TPanel;
Panel2: TPanel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Edit_Porta: TEdit;
ComboBox1: TComboBox;
Edit_Novo_Banco: TEdit;
Edit_Porta_Atual: TEdit;
Edit_Banco_Atual: TEdit;
Panel3: TPanel;
SpeedGrava_Dados: TSpeedButton;
SpeedAltentica_dados: TSpeedButton;
SpeedPara_Servidor: TSpeedButton;
SpeedAtiva_Servidor: TSpeedButton;
SpeedMinimizar: TSpeedButton;
OpenDialog1: TOpenDialog;
Meus: TPopupMenu;
BuscaPorta1: TMenuItem;
AtualizarDados1: TMenuItem;
GravarBanco1: TMenuItem;
AtualizarDados2: TMenuItem;
PararServidor1: TMenuItem;
AtivarServidor1: TMenuItem;
MinimizarServidor1: TMenuItem;
DesfazerMinimizar1: TMenuItem;
AtualizarCaminhodoBanco1: TMenuItem;
ParaTransporte1: TMenuItem;
AtivarTransporte1: TMenuItem;
Label5: TLabel;
Edit_Mensagem: TEdit;
ComboBox2: TComboBox;
Sair1: TMenuItem;
procedure FormActivate(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
procedure ComboBox1Click(Sender: TObject);
procedure SpeedGrava_DadosClick(Sender: TObject);
procedure SpeedAltentica_dadosClick(Sender: TObject);
procedure SpeedPara_ServidorClick(Sender: TObject);
procedure SpeedAtiva_ServidorClick(Sender: TObject);
procedure SpeedMinimizarClick(Sender: TObject);
procedure BuscaPorta1Click(Sender: TObject);
procedure AtualizarDados1Click(Sender: TObject);
procedure GravarBanco1Click(Sender: TObject);
procedure AtualizarDados2Click(Sender: TObject);
procedure PararServidor1Click(Sender: TObject);
procedure AtivarServidor1Click(Sender: TObject);
procedure MinimizarServidor1Click(Sender: TObject);
procedure DesfazerMinimizar1Click(Sender: TObject);
procedure AtualizarCaminhodoBanco1Click(Sender: TObject);
procedure Edit_Novo_BancoChange(Sender: TObject);
procedure ParaTransporte1Click(Sender: TObject);
procedure AtivarTransporte1Click(Sender: TObject);
procedure Edit_PortaChange(Sender: TObject);
procedure ComboBox2Change(Sender: TObject);
procedure Sair1Click(Sender: TObject);
private
{ Private declarations }
public
Iniconf:TIniFile;
{ Public declarations }
end;

var
F_Servidor: TF_Servidor;

implementation

{$R *.dfm}

uses uSC, uSM;

procedure TF_Servidor.AtivarServidor1Click(Sender: TObject);
begin
SC.DSServer1.Start;
Pn_Topo.Caption := 'Servidor Rodando Na Porta' + ' '+ Iniconf.ReadString('Porta','Porta', ' ');
end;

procedure TF_Servidor.AtivarTransporte1Click(Sender: TObject);
begin
SpeedAtiva_Servidor.Enabled := True;
end;

procedure TF_Servidor.AtualizarCaminhodoBanco1Click(Sender: TObject);
begin
Edit_Novo_Banco.Enabled := True;
end;

procedure TF_Servidor.AtualizarDados1Click(Sender: TObject);
begin
if OpenDialog1.Execute then begin
Edit_Novo_Banco.Text := OpenDialog1.FileName;
Iniconf.WriteString('Banco','Path','');
end;
end;

procedure TF_Servidor.AtualizarDados2Click(Sender: TObject);
begin
//SC.Transporte.Stop;
SC.Transporte .Port := StrToInt(Iniconf.ReadString('Porta','Porta',''));
Edit_Porta_Atual .Text := Iniconf.ReadString('Porta','Porta','');
Edit_Banco_Atual .Text := Iniconf.ReadString('Banco','Banco','');
Edit_Novo_Banco.Enabled := False;
//SC.Transporte.Start;
end;

procedure TF_Servidor.BuscaPorta1Click(Sender: TObject);
begin
ComboBox1 .Visible := true;
SC.DSServer1 .AutoStart := false;
Pn_Topo .Caption := 'Servidor Parado';
end;

procedure TF_Servidor.ComboBox1Change(Sender: TObject);
begin
Edit_Porta.Text := ComboBox1.Text;
end;

procedure TF_Servidor.ComboBox1Click(Sender: TObject);
begin
ComboBox1.Visible := False;
end;

procedure TF_Servidor.ComboBox2Change(Sender: TObject);
begin
Edit_Mensagem.Text := ComboBox2.Text;
end;

procedure TF_Servidor.DesfazerMinimizar1Click(Sender: TObject);
begin
F_Servidor.WindowState:= wsNormal;
end;

procedure TF_Servidor.Edit_Novo_BancoChange(Sender: TObject);
begin
SpeedGrava_Dados.Enabled := True;
end;

procedure TF_Servidor.Edit_PortaChange(Sender: TObject);
begin
if Edit_Porta.Text <> Iniconf.ReadString('Porta','Porta','') then begin
SpeedGrava_Dados.Enabled := True;
end
else begin
SpeedGrava_Dados.Enabled := False;
end;
end;

procedure TF_Servidor.FormActivate(Sender: TObject);
begin
Edit_Porta .Text := Iniconf.ReadString('Porta','Porta','');
Edit_Novo_Banco .Text := Iniconf.ReadString('Banco','Banco','');
Edit_Porta_Atual .Text := Iniconf.ReadString('Porta','Porta','');
Edit_Banco_Atual .Text := Iniconf.ReadString('Banco','Banco','');

SpeedGrava_Dados .Enabled := False;
SpeedAltentica_dados .Enabled := False;
SpeedPara_Servidor .Enabled := False;
SpeedAtiva_Servidor .Enabled := False;
Pn_Topo .Caption := 'Servidor Parado';
end;

procedure TF_Servidor.FormCreate(Sender: TObject);
begin
Iniconf:= TIniFile.Create(ExtractFilePath(Application.ExeName)+'Sinconf.ini');
end;

procedure TF_Servidor.GravarBanco1Click(Sender: TObject);
begin
SC.Transporte.Stop;
Iniconf.WriteString('Porta','Porta',Edit_Porta.Text);
Iniconf.WriteString('Banco','Banco',Edit_Novo_Banco.Text);
SC.Transporte.Port := StrToInt(Iniconf.ReadString('Porta','Porta',''));
Pn_Topo.Caption := 'Servidor Rodando Na Porta' + ' '+ Iniconf.ReadString('Porta','Porta', ' ');
SC.Transporte.Start;
end;

procedure TF_Servidor.MinimizarServidor1Click(Sender: TObject);
begin
F_Servidor.WindowState:= wsMinimized;
end;

procedure TF_Servidor.PararServidor1Click(Sender: TObject);
begin
Pn_Topo.Caption := 'Servidor Parado';
SC.DSServer1.Stop;
end;

procedure TF_Servidor.ParaTransporte1Click(Sender: TObject);
begin
SpeedPara_Servidor.Enabled := True;
end;

procedure TF_Servidor.Sair1Click(Sender: TObject);
begin
Close;
end;

procedure TF_Servidor.SpeedAltentica_dadosClick(Sender: TObject);
begin
if Edit_Novo_Banco.Text = '' then begin
ShowMessage('Coloque Caminho do Banco Primeiro');
Edit_Porta.Clear;
Exit;
end
else
//SC.Transporte.Stop;
SC.Transporte .Port := StrToInt(Iniconf.ReadString('Porta','Porta',''));
Edit_Porta_Atual .Text := Iniconf.ReadString('Porta','Porta','');
Edit_Banco_Atual .Text := Iniconf.ReadString('Banco','Banco','');
Edit_Novo_Banco.Enabled := False;
SpeedAtiva_Servidor.Enabled := true;
SpeedAltentica_dados.Enabled := false;
//SC.Transporte.Start;
end;

procedure TF_Servidor.SpeedAtiva_ServidorClick(Sender: TObject);
begin
SC.DSServer1.Start;
SpeedAtiva_Servidor.Enabled := false;
Pn_Topo.Caption := 'Servidor Rodando Na Porta' + ' '+
Iniconf.ReadString('Porta','Porta', ' ');
end;
procedure TF_Servidor.SpeedGrava_DadosClick(Sender: TObject);
begin
ComboBox1.Visible := False;
SpeedGrava_Dados.Enabled := false;
SpeedAltentica_dados.Enabled := True;
if Edit_Porta.Text = '' then begin
ShowMessage('Coloque a porta e o Caminho do Banco Primeiro');
Exit;
end
else
//SC.Transporte.Stop;
Iniconf.WriteString('Porta','Porta',Edit_Porta.Text);
Iniconf.WriteString('Banco','Banco',Edit_Novo_Banco.Text);
SC.Transporte.Port := StrToInt(Iniconf.ReadString('Porta','Porta',''));
//Pn_Topo.Caption := 'Servidor Rodando na Porta' + ' '+ Iniconf.ReadString('Porta','Porta', ' ');
//SC.Transporte.Start;

end;

procedure TF_Servidor.SpeedMinimizarClick(Sender: TObject);
begin
F_Servidor.WindowState:= wsMinimized;
end;

procedure TF_Servidor.SpeedPara_ServidorClick(Sender: TObject);
begin
SC.DSServer1.Stop;
SpeedAtiva_Servidor.Enabled := true;
SpeedPara_Servidor.Enabled := False;
Pn_Topo.Caption := 'Servidor Parado';
end;

end.
Responder

Gostei + 0

13/05/2015

Aislan Sousa

Desculpa Gente o Código um pouco mais alinhado

Essa base de Código e na parte Servidora onde eu coloquei edits para Controlar Porta, IP, e Caminho do banco também coloque speedButtons para controlar os componentes que faz ligação com o banco e Cliente.
segui o código

unit UServidor;

interface

uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
Vcl.StdCtrls, Vcl.Buttons, Vcl.ExtCtrls, System.Actions, Vcl.ActnList,
Vcl.Menus, Data.DBXFirebird, Data.DB, Data.SqlExpr,IniFiles; => Declaração da IniFiles na uSes do forme

type
TF_Servidor = class(TForm)
PN_Topo: TPanel;
Panel2: TPanel;
Panel3: TPanel;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
SpeedButton4: TSpeedButton;
SpeedButton5: TSpeedButton;
Edit_Porta_Atual: TEdit;
Edit_Nova_Porta: TEdit;
Edit_IP_Atual: TEdit;
Edit_Novo_IP: TEdit;
Edit_Caminho_Atual: TEdit;
Edit_Novo_Caminho: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
ActionList1: TActionList;
NovaPorta: TAction;
NovoIP: TAction;
NovoCaminho: TAction;
Action4: TAction;
Action5: TAction;
Action6: TAction;
Action7: TAction;
Action8: TAction;
Action9: TAction;
CB_Porta: TComboBox;
Menus: TPopupMenu;
NovaPorta1: TMenuItem;
NovoCaminho1: TMenuItem;
NovoCaminho2: TMenuItem;
Conexao: TSQLConnection;
SpeedButton6: TSpeedButton;
OpenDialog1: TOpenDialog;
Label7: TLabel;
Edit_Mensagem: TEdit;
CB_Mensagem: TComboBox;
procedure FormActivate(Sender: TObject);
procedure CB_PortaChange(Sender: TObject);
procedure CB_PortaClick(Sender: TObject);
procedure NovaPortaExecute(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton3Click(Sender: TObject);
procedure SpeedButton4Click(Sender: TObject);
procedure SpeedButton5Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure NovoIPExecute(Sender: TObject);
procedure NovoCaminhoExecute(Sender: TObject);
procedure SpeedButton6Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure CB_MensagemChange(Sender: TObject);
private
{ Private declarations }
public
ArqINI:TIniFile; => Declaração da variável ArqINI em Public
{ Public declarations }
end;

var
F_Servidor: TF_Servidor;

implementation

{$R *.dfm}

uses uSC, uSM;

procedure TF_Servidor.CB_PortaChange(Sender: TObject);
begin
Edit_Nova_Porta.Text := CB_Porta.Text; => Um TCombobx para inserir a Porta
end;

procedure TF_Servidor.CB_PortaClick(Sender: TObject);
begin
CB_Porta.Visible := False;
end;

procedure TF_Servidor.CB_MensagemChange(Sender: TObject);
begin
Edit_Mensagem.Text := CB_Mensagem.Text; => Um Edit _Mensagem e vai receber o que estiver em TCombobx para mandar mensagem para o Cliente mais vc pode mandar direto do TCombobx ou do Tedit.
end;

procedure TF_Servidor.FormActivate(Sender: TObject);
begin
if not(FileExists('C:\SysComer\Servidor\EXE\SysComer.ini'))then => aqui eu tou fazendo uma verificação de o arquivo ini Existe no caminho da aplicação se não existi ele recebe isso
begin
Edit_Caminho_Atual.Text := Conexao.Params.Values['Database'];
Edit_Porta_Atual.Text := IntToStr(SC.Transportador.Port);
Exit;
end
else

Se ele Existe então no SC.Transportador dou um Stop
SC.Transportador.Stop;
Edit_Caminho_Atual.Text := ArqINI.ReadString('SysComer','Database','');
Edit_Porta_Atual.Text := ArqINI.ReadString('SysComer','Porta','');
Conexao.Params.Values['Database'] := ArqINI.ReadString('SysComer','Database','');
SC.Transportador.Port := StrToInt(ArqINI.ReadString('SysComer','Porta',''));
Edit_Caminho_Atual.Text := ArqINI.ReadString('SysComer','Database','');
Edit_IP_Atual.Text := ArqINI.ReadString('SysComer','IP','');
SC.Transportador.Server;
SC.Transportador.Start;
PN_Topo.Caption := 'Servidor Parado em Porta 00';
// Busca a Porta Atual
Edit_Porta_Atual.Text := IntToStr(SC.Transportador.Port);
// Busca Caminho Atual
Edit_Caminho_Atual.Text := Conexao.Params.Values['Database'];
end;
procedure TF_Servidor.FormCreate(Sender: TObject);
begin
ArqINI:= TIniFile.Create(ExtractFilePath(Application.ExeName)+'SysComer.ini');
Edit_Nova_Porta . Enabled := False;
Edit_Novo_IP . Enabled := False;
Edit_Novo_Caminho . Enabled := False;
CB_Porta . Visible := False;
Edit_Porta_Atual . Enabled := False;
Edit_IP_Atual . Enabled := False;
Edit_Caminho_Atual . Enabled := False;
end;

procedure TF_Servidor.NovaPortaExecute(Sender: TObject);
begin
CB_Porta.Visible := True;
CB_Porta.SetFocus;
end;


procedure TF_Servidor.NovoCaminhoExecute(Sender: TObject);
begin
Edit_Novo_Caminho.Enabled:= true;
Edit_Novo_Caminho.SetFocus;
end;

procedure TF_Servidor.NovoIPExecute(Sender: TObject);
begin
Edit_Novo_IP.Enabled := true;
Edit_Novo_IP.SetFocus;
end;

procedure TF_Servidor.SpeedButton1Click(Sender: TObject);
begin
// porta Atual IP Atual e Caminho Atual vão receber os Novos valores
SC.Transportador.Stop;
SC.Transportador.Port := StrToInt(Edit_Nova_Porta.Text);
Conexao.Params.Values['Database'] := Edit_Novo_IP.Text+':'+Edit_Novo_Caminho.Text;
SC.Transportador.Start;
Edit_Porta_Atual . Text := Edit_Nova_Porta . Text;
Edit_IP_Atual . Text := Edit_Novo_IP . Text;
Edit_Caminho_Atual . Text := Edit_Novo_Caminho . Text;
//SC.Transportador.Start;
end;

procedure TF_Servidor.SpeedButton2Click(Sender: TObject);
begin
// Gerando Arquivo INI
ArqINI.WriteString('SysComer','Porta',Edit_Nova_Porta.Text);
ArqINI.WriteString('SysComer','IP',Edit_Novo_IP.Text);
ArqINI.WriteString('SysComer','Database',Edit_Novo_IP.Text+':'+Edit_Novo_Caminho.Text);
end;

procedure TF_Servidor.SpeedButton3Click(Sender: TObject);
begin
SC.DSServer1.Stop;
PN_Topo.Caption := 'Servidor Parado Na Porta'+' - '+ArqINI.ReadString('SysComer','Porta','');
end;

procedure TF_Servidor.SpeedButton4Click(Sender: TObject);
begin
SC.DSServer1.Start;
PN_Topo.Caption := 'Servidor Rodado Na Porta'+' - '+ArqINI.ReadString('SysComer','Porta','');
end;

procedure TF_Servidor.SpeedButton5Click(Sender: TObject);
begin
F_Servidor.WindowState:= wsMinimized;
end;

procedure TF_Servidor.SpeedButton6Click(Sender: TObject);
begin
if OpenDialog1.Execute then begin
Edit_Novo_Caminho.Text :=OpenDialog1.FileName;
//Iniconf.WriteString('Banco','Path','');
end;
end;

end.
Responder

Gostei + 0

14/05/2015

Thiago Santana

Vê se este exemplo te ajuda!
[url:descricao=Delphi - Configuração Banco de dados usando arquivo INI]https://www.devmedia.com.br/conexao-com-o-banco-atraves-de-um-arquivo-ini/16210[/url]
Responder

Gostei + 0

18/05/2015

Mateus Carvalho

A porta do firewall está liberada? O aplicativo cliente e servidor estão tendo acesso a porta normalmente?
Responder

Gostei + 0

18/05/2015

Aislan Sousa

Ola Mac por me ouvir

Sim eles estão ouvido a porta normalmente funciona em rede mais só preciso trocar o IP da maquina já dar erro
eu estou usando o IP ainda local 192.168.1.2 mais estou usando também ainda só duas maquinas em rede

Meu PC e outro PC que fica em outra sala o servidor Com o IP 192.168.1.2 os dois sistema servidor e cliente funciona mais só preciso trocar o IP para 192.168.1.3 que ele já não funciona mais
Responder

Gostei + 0

19/05/2015

Mateus Carvalho

OK. Eu vou testar o código seu aqui. Depois dou um retorno.
Responder

Gostei + 0

20/05/2015

Aislan Sousa

Boa tarde Mac o que descobriu a respeito do Código
Responder

Gostei + 0

20/05/2015

Aislan Sousa

Descobri um problema mais a gora tou com outro o sistema Servidor ele roda com qualquer IP que coloque tanto na maquina que eu tou desenvolvendo quanto em outra maquina e o sistema de cliente de cliente roda também em qual quer maquina, Porem se eu executar o sistema Servidor em outra maquina ele vai rodar mais o sistema o sistema cliente não roda, ele abre mais dar erro de Socket o que eu faço para verificar isso não tenho a mínima ideia o que seja.


será que alguém pode me ajudar
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar