Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   ejecutando hilos en componenetes indy tcp (https://www.clubdelphi.com/foros/showthread.php?t=68838)

manuc 28-07-2010 21:10:05

Hola Richy08,

Código Delphi [-]
[Error] Interfaces.pas(47): Unsatisfied forward or external declaration: 'tmisComponentes.Destroy'

No estoy seguro, pero ¿puede ser que te falte la implementación de este procedimiento?

Después en estas líneas de código:
Código Delphi [-]
 ActClient := PClient(AThread.Data);
 ActClient.LastAction := Now;  // update the time of last action
 MisComponentes :=  tmisComponentes(AThread.Data);

En "AThread.Data" ¿que almacenas la estructura de tipo "PClient" y de tipo "tmisComponentes"?

Por otro lado, si puedieras hacer un seguimiento a la ejecución del código e indicarme la línea más o menos donde te da el error, te podría dar alguna sugerencia.

No obstante revisaré el código que has puesto a ver si veo algo raro.

Un saludo.

richy08 28-07-2010 21:22:45

Cita:

Empezado por manuc (Mensaje 371853)
Hola Richy08,
Código Delphi [-]
[Error] Interfaces.pas(47): Unsatisfied forward or external declaration: 'tmisComponentes.Destroy'



No estoy seguro, pero ¿puede ser que te falte la implementación de este procedimiento?

a ok si me imaginaba algo asi, sabes estoy un poco enredado es la primera ves que me veo en la necesidad de usar clases que yo mismo creo, me imagino que en esta parte es donde le doy .free a los querys que creo para que liberen dicha memoria??

Cita:

Empezado por manuc (Mensaje 371853)
Después en estas líneas de código:

Código Delphi [-]
ActClient := PClient(AThread.Data);
ActClient.LastAction := Now; // update the time of last action
MisComponentes := tmisComponentes(AThread.Data);





En "AThread.Data" ¿que almacenas la estructura de tipo "PClient" y de tipo "tmisComponentes"?

asi es en AThread.Data almaceno los datos de esas dos estructuras.

Cita:

Empezado por manuc (Mensaje 371853)

Por otro lado, si puedieras hacer un seguimiento a la ejecución del código e indicarme la línea más o menos donde te da el error, te podría dar alguna sugerencia.

No obstante revisaré el código que has puesto a ver si veo algo raro.

Un saludo.

ya he corrido paso a paso el codigo y en la linea que me salta el error es

MisComponentes.Conexion.ConnectionString:=cadena;

Código Delphi [-]
procedure TFrm_Interfaces.ServerExecute(AThread: TIdPeerThread);
var
  ActClient, RecClient: PClient;                                                                              
  CommBlock, NewCommBlock: TCommBlock;
  RecThread: TIdPeerThread;
  i, seleccion: Integer;
  MisComponentes:tmisComponentes;
begin
  if not AThread.Terminated and AThread.Connection.Connected then
  begin
    AThread.Connection.ReadBuffer (CommBlock, SizeOf (CommBlock));
    ActClient := PClient(AThread.Data);
    ActClient.LastAction := Now;  // update the time of last action
    MisComponentes :=  tmisComponentes(AThread.Data);
    //conneccionMSSQL
    MisComponentes.Conexion.ConnectionString:=cadena; //aqui es donde truena
    MisComponentes.Conexion.loginprompt:=false;
    MisComponentes.Conexion.provider:='SQLOLEDB.1';
    MisComponentes.Conexion.connected;
    //conneccionMSSQL
    //conneccionMysql
    MisComponentes.Conexion1.Catalog:= 'lookup';
    MisComponentes.Conexion1.Database:= 'cdr';
    MisComponentes.Conexion1.HostName:= '192.168.10.3';
    MisComponentes.Conexion1.Password:= 'siti270';
    MisComponentes.Conexion1.Protocol:= 'mysql-5';
    MisComponentes.Conexion1.port:= 3306;
    MisComponentes.Conexion1.User:= 'root';
    MisComponentes.Conexion1.connect; 
    //conneccionMysql
 
    //queryMssql
    MisComponentes.Query.Close;
    MisComponentes.Query.Connection:= MisComponentes.Conexion;
    MisComponentes.Query.SQL.Text:='select idext, DesTel from pbx_ext where acode=:acode';
    MisComponentes.Query.parameters.ParamByName('acode').Value:=CommBlock.acode;
    MisComponentes.Query.cursorType := ctStatic;
    MisComponentes.Query.open;
    //queryMssql
    //queryMysql
     MisComponentes.Query1.Connection:=MisComponentes.Conexion1;
     MisComponentes.Query1.SQL.Text:='update lookup set  allowcalls=:allowcalls, ldesc=:ldesc where code=:code ';
    //queryMysql

    //ejecuta abrir y cerrar lineas
     i:=0;
     seleccion:=Query.RecordCount;
     MisComponentes.Query.First;
     While ido
     begin
        MisComponentes.Query1.Close;
        MisComponentes.Query1.ParamByName('allowcalls').Value:=CommBlock.estado;
        MisComponentes.Query1.ParamByName('ldesc').Value:=CommBlock.nombre;
        MisComponentes.Query1.ParamByName('code').Value:=MisComponentes.Query1.fieldbyname('idext').Value;
        MisComponentes.Query1.ExecSQL;
        i:=i+1;
        MisComponentes.Query.Next;
     end;
    //ejecuta abrir y cerrar lineas
    Protocol.Lines.Add (TimeToStr(Time)+' The process for '+CommBlock.MyUserName+' was done ');// # Confirm'+inttostr(CommBlock.nconf));
    NewCommBlock.Command := 'DIALOG';       // the message should popup on the client's screen
    NewCommBlock.MyUserName := '[PBX Server]';  // the server's username
    NewCommBlock.Msg := 'The process was done  ';  // the message to show
    NewCommBlock.ReceiverName := '[return-to-sender]'; // unnecessary
    AThread.Connection.WriteBuffer (NewCommBlock, SizeOf (NewCommBlock), true);  // and there it goes...
  end;
end;

gracias por tus respuestas

manuc 28-07-2010 21:28:49

Hola nuevamente,

Me podrías poner el código del evento onConnect del TCPServer?

gracias.

richy08 28-07-2010 21:42:50

claro este es el codigo

Código Delphi [-]
procedure TFrm_Interfaces.ServerConnect(AThread: TIdPeerThread);
var
  NewClient: PClient;
  MisComponentes:tmisComponentes;
begin
   GetMem(NewClient, SizeOf(TClient));
  NewClient.DNS         := AThread.Connection.LocalName;
  NewClient.Connected   := Now;
  NewClient.LastAction  := NewClient.Connected;
  NewClient.Thread      :=AThread;
  AThread.Data:=TObject(NewClient);
  CoInitialize(nil);
  MisComponentes := tmisComponentes.Create;
  MisComponentes.Conexion := TADOConnection.Create(self);
  MisComponentes.Query := TADOQUERY.Create(Self);
  MisComponentes.Conexion1 := TZConnection.Create(self);
  MisComponentes.Query1 := TZquery.Create(Self);
  AThread.Data := @MisComponentes;
  try
    Clients.LockList.Add(NewClient);
  finally
    Clients.UnlockList;
  end;
  Protocol.Lines.Add(TimeToStr(Time)+' The connection to '+NewClient.DNS+' was connected');
end;

manuc 28-07-2010 21:49:14

¿Podrías probar a anular las líneas de código donde utilizas el puntero a "PClient"?;

Tanto en el evento onConnect, cómo en el evento onExecute.

En primer lugar, yo, almacenaría en el puntero "AThread.Data" solo la variable de tipo "tmisComponentes".

¿Puedes probarlo y me cuentas?

richy08 28-07-2010 22:14:15

listo ya los deshabilite y se sigue comportando de la misma forma he deshabilitado otras lineas como por ejemplo esta
Código Delphi [-]
MisComponentes.Conexion.ConnectionString:=cadena;

que es donde tronaba ahi ya paso bien pero al llegar a esta otra linea

Código Delphi [-]
MisComponentes.Conexion.provider:='SQLOLEDB.1';

ambas lineas estan en el execute, al llegar a esta linea vuelve a marcar el error, sera que necesito crear los metodos create de los componentes que uso?? estoy utilizando ADO para mssql y los componnetes zeus para mysql.

o ahi alguna otra manera de pasarle la cadena de conexion al componente que no sea por medio de la variable cadena??


La franja horaria es GMT +2. Ahora son las 17:36:28.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi