Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-08-2010
Avatar de richy08
richy08 richy08 is offline
Miembro
 
Registrado: may 2007
Ubicación: Bucerias, Nayarit Mexico
Posts: 529
Poder: 17
richy08 Va por buen camino
Pasar cadena de conexion a tadoconnections dentro de un hilo de ejecucion

buenos dias compañeros estoy un poco liado con esta situacion, estoy tratando de crear componentes ado y componentes zeus dentro de un hilo de windows, todo al parecer funciona hasta que trato de asignarle la cadena de conexion al componente tadoconnetions en el evento connect de tcp server este es el codigo

Código Delphi [-]
//Aqui los creo
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;


//aqui intento usarlos y es donde truena
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; //esta linea es la que causa el problema
    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:=MisComponentes.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;

el error que marca es el siguiente ---------------------------
Debugger Exception Notification
---------------------------
Project interfacesP.exe raised exception class EAccessViolation with message 'Access violation at address 00F2BBA9. Write of address 00000000'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------

alguna idea de por que me de el error o alguna otra sugerencia de como podria crear dichos componentes y manipularlos gracias por cualquier comentario
Responder Con Cita
  #2  
Antiguo 02-08-2010
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
me parece que el problema no es la cadena de conexión, si no mas bien creo que cuando quieres asignar la cadena de conexión, tus componentes no han sido creados todavía y por eso te aparece el error.

verifica que cuando llegues a esa línea, tus componentes ya hayan sido creados.
__________________

Responder Con Cita
  #3  
Antiguo 02-08-2010
Avatar de richy08
richy08 richy08 is offline
Miembro
 
Registrado: may 2007
Ubicación: Bucerias, Nayarit Mexico
Posts: 529
Poder: 17
richy08 Va por buen camino
no al llegar ahi el componnete ya fue creado, el problema es en esta linea
AThread.Data := @MisComponentes; segun lo que me explico un compañero del foro lo que hace es meter la direccion de memoria a la variable data del hilo pero en en evento Evecute del tcpserver trato de recuperar dichos valores pero no entiendo por que no lo recupera

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);//trato de recuperar las conexiones creadas
    
    //queryMssql
    MisComponentes.Query.Close;
    MisComponentes.Query.parameters.ParamByName('acode').Value:=CommBlock.acode;
    MisComponentes.Query.open;
    //queryMssql

    //ejecuta abrir y cerrar lineas
     i:=0;
     seleccion:=MisComponentes.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;
Responder Con Cita
  #4  
Antiguo 02-08-2010
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 913
Poder: 22
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Esta linea:
Código Delphi [-]
AThread.Data := @MisComponentes;
Cambia por esto si el @:
Código Delphi [-]
AThread.Data := MisComponentes;

Saludos
Responder Con Cita
  #5  
Antiguo 02-08-2010
Avatar de richy08
richy08 richy08 is offline
Miembro
 
Registrado: may 2007
Ubicación: Bucerias, Nayarit Mexico
Posts: 529
Poder: 17
richy08 Va por buen camino
gracias cloayza por la respuesta, pero lo solucione metiendo todo a un objeto records lo he estado porbando y creo que funciona bien saludos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
cuando llamo ejecutar un hilo dentro del proceso del hilo no lo hace robertosc Varios 1 14-08-2007 22:11:09
Funcion para borrar la cadena que aparesca repetida dentro de otra cadena flystar Varios 1 02-07-2007 23:51:10
Funcion para buscar cadena dentro de otra cadena y el numero de veces flystar Varios 3 02-07-2007 22:48:08
Parar un hilo de ejecución deivi Varios 6 21-11-2006 13:36:49
Buscar cadena dentro de otra cadena doverzhoff Varios 4 27-01-2004 05:27:15


La franja horaria es GMT +2. Ahora son las 08:16:03.


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