a ok gracias este es el codigo del ejecutable que se encuentra en el server y mas abajo pongo el del cliente, esta linea es donde tengo el error
Connection:= Myusername+'z'; //aqui marca el error no se como asignarle la conexion
//server
Código Delphi
[-]
unit Interfaces;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdThreadMgr, IdThreadMgrDefault, IdBaseComponent,
IdComponent, IdTCPServer, DB, ADODB, strutils, dateutils, ZConnection,
ZAbstractRODataset, ZAbstractDataset, ZDataset;
type
PClient = ^TClient;
TClient = record DNS : String[20];
Connected,
LastAction : TDateTime;
Thread : Pointer;
end;
TFrm_Interfaces = class(TForm)
CBServerActive: TCheckBox;
Server: TIdTCPServer;
IdThreadMgrDefault1: TIdThreadMgrDefault;
Protocol: TMemo;
procedure CBServerActiveClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure ServerConnect(AThread: TIdPeerThread);
procedure ServerDisconnect(AThread: TIdPeerThread);
procedure ServerExecute(AThread: TIdPeerThread);
private
function CreaAdo(Myusername, nombre, idext: string; acode: integer):boolean;
public
end;
var
Frm_Interfaces: TFrm_Interfaces;
Clients : TThreadList; Query : TAdoquery;
zQuery : TzQuery;
zConnect1 : Tzconnection;
i, seleccion :integer;
implementation
uses GlobalUnit, Prg_MDgral;
{$R *.dfm}
function TFrm_Interfaces.CreaAdo(Myusername, nombre, idext: string; acode : integer):boolean;
begin
zConnect1:= TzConnection.Create(self);
With zConnect1 do
begin
Parent:= Frm_Interfaces;
Name:= Myusername+'z';
Catalog:= 'lookup';
Database:= 'cdr';
HostName:= '192.168.11.2';
Password:= 'system';
Protocol:= 'mysql-5';
port:= 3306;
User:= 'sitisystem';
Connect
end;
Query := TAdoquery.Create(self);
with Query do
begin
Name := Myusername+'1';
Connection:= md_gral.Con_Gral;
SQL.text:='select idext, DesTel from pbx_ext where acode=:acode ';
Parent:= Frm_Interfaces;
end;
zQuery := TzQuery.Create(self);
with zQuery do
begin
Name := Myusername+'2';
Connection:= Myusername+'z';
SQL.text:='update lookup set allowcalls=:allowcalls, ldesc=:ldesc where code=:code ';
Parent:= Frm_Interfaces;
end;
end;
procedure TFrm_Interfaces.CBServerActiveClick(Sender: TObject);
begin
Server.Active := CBServerActive.Checked;
end;
procedure TFrm_Interfaces.ServerConnect(AThread: TIdPeerThread);
var
NewClient: PClient;
begin
GetMem(NewClient, SizeOf(TClient));
NewClient.DNS := AThread.Connection.LocalName;
NewClient.Connected := Now;
NewClient.LastAction := NewClient.Connected;
NewClient.Thread :=AThread;
AThread.Data:=TObject(NewClient);
try
Clients.LockList.Add(NewClient);
finally
Clients.UnlockList;
end;
Protocol.Lines.Add(TimeToStr(Time)+' Connection from "'+NewClient.DNS+'"');
end;
procedure TFrm_Interfaces.ServerExecute(AThread: TIdPeerThread);
var
ActClient, RecClient: PClient;
CommBlock, NewCommBlock: TCommBlock;
RecThread: TIdPeerThread;
i: Integer;
begin
if not AThread.Terminated and AThread.Connection.Connected then
begin
AThread.Connection.ReadBuffer (CommBlock, SizeOf (CommBlock));
ActClient := PClient(AThread.Data);
ActClient.LastAction := Now;
CreaAdo(CommBlock.MyUserName, CommBlock.nombre, CommBlock.idext, CommBlock.acode);
Protocol.Lines.Add (TimeToStr(Time)+' !! "'+CommBlock.MyUserName);
NewCommBlock.Command := 'DIALOG'; NewCommBlock.MyUserName := '[PBX Server]'; NewCommBlock.Msg := 'The process was done '; NewCommBlock.ReceiverName := '[return-to-sender]';
AThread.Connection.WriteBuffer (NewCommBlock, SizeOf (NewCommBlock), true); end;
end;
procedure TFrm_Interfaces.ServerDisconnect(AThread: TIdPeerThread);
var
ActClient: PClient;
begin
ActClient := PClient(AThread.Data);
Protocol.Lines.Add (TimeToStr(Time)+' Disconnect from "'+ActClient^.DNS+'"');
try
Clients.LockList.Remove(ActClient);
finally
Clients.UnlockList;
end;
FreeMem(ActClient);
AThread.Data := nil;
end;
procedure TFrm_Interfaces.FormCreate(Sender: TObject);
begin
Clients := TThreadList.Create;
end;
procedure TFrm_Interfaces.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Server.Active := False;
Clients.Free;
end;
end.
y este es el fragmento del boton de una de las pantallas que lo mandara llamar.
//client
Código Delphi
[-]
.
.
.
TClientHandleThread = class(TThread)
private
CB: TCommBlock;
procedure HandleInput;
protected
procedure Execute; override;
end;
var
Frm_PosGue: TFrm_PosGue;
ClientHandleThread: TClientHandleThread;
.
.
.
.
procedure TClientHandleThread.HandleInput;
begin
if CB.Command = 'MESSAGE' then
Frm_Posgue.IncomingMessages.Lines.Add (CB.MyUserName + ': ' + CB.Msg)
else
if CB.Command = 'DIALOG' then
MessageDlg ('"'+CB.MyUserName+'" sends you this message:'+#13+CB.Msg, mtInformation, [mbOk], 0)
else MessageDlg('Unknown command "'+CB.Command+'" containing this message:'+#13+CB.Msg, mtError, [mbOk], 0);
end;
procedure TClientHandleThread.Execute;
begin
while not Terminated do
begin
if not Frm_Posgue.Client.Connected then
Terminate
else
try
Frm_Posgue.Client.ReadBuffer(CB, SizeOf (CB));
Synchronize(HandleInput);
except
end;
end;
end;
.
.
.
procedure TFrm_PosGue.Btb_InhClick(Sender: TObject);
var
i, seleccion :integer;
CommBlock : TCommBlock;
begin
CBClientActive.Checked:=true;
if CBClientActive.Checked then
begin
try
Client.Connect(10000); ClientHandleThread := TClientHandleThread.Create(True); ClientHandleThread.FreeOnTerminate:=True; ClientHandleThread.Resume; except
on E: Exception do MessageDlg ('Error while connecting:'+#13+E.Message, mtError, [mbOk], 0);
end;
end
else
begin
ClientHandleThread.Terminate;
Client.Disconnect;
end;
CommBlock.Command := ''; CommBlock.MyUserName := Client.LocalName;
CommBlock.Msg := 'hola'; CommBlock.ReceiverName := 'Desarrollo-lap'; CommBlock.nconf := Qry_principal.fieldbyname('nconf').Value;
Client.WriteBuffer (CommBlock, SizeOf (CommBlock), true);
end;