Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   como crear componentes ado en tiempo de ejecucion (https://www.clubdelphi.com/foros/showthread.php?t=68875)

richy08 13-07-2010 17:26:02

es ahi donde tengo mis dudas por que ese misma funcion se mandara llamar en todas las iteraciones que tengas los clientes con el servidor, los hilos sabran que tzconnections y que tzquery fueron creados por cada uno de los hilos:confused:, y no he encontrado como hacer una cadena de conexion para los componentes zeos que sea por medio de una cadena, el tipo es tzconnections pero yo al querer asignar por el nombre Myusername(nombre de la maquina que creo el hilo) es tipo string e ahi el problema:o

richy08 13-07-2010 20:13:08

ok al parecer ya funciona aunque no lo se con certeza, la duda que ahora me queda es si tengo que destruir los componentes que he creado o autmaticamente se destruyen cuuando finaliza el hilo, la otra duda es en que momento finalizo el hilo gracias por su tiempo:D

Neftali [Germán.Estévez] 13-07-2010 23:16:13

Los componentes que hayas creado tú, debe destruirlos tú. Lo lógico sería que los que crees en el Create, los liberes en el Destroy. Los que pertenecen al formulario y se crean en diseño los destruye el propio form, pero los que has creado tú, son tu responsabilidad.

richy08 13-07-2010 23:22:43

ok entonces sigo teniendo algunos detalles, lo malo de esto es que el programa siempre estara corriendo en el server(todo el tiempo) asi es que no puedo usar el evento oncreate(), ondestroy() tendre que usar una funcion para destruirlos aunque esto si me da un poco de panico lo probare gracias.

Caral 14-07-2010 02:43:37

Hola
Creo la conexion y el query que necesite.
Lo uso e inmediatamente despues en el acto lo destruyo.
Simple y transparente.
Se puede hacer un simple procedimiento que sea llamado cuando ya no se usen los componentes para ser destruidos.
La verdad no le veo lo complicado.
Saludos

Neftali [Germán.Estévez] 14-07-2010 12:00:47

Cita:

Empezado por richy08 (Mensaje 370276)
ok entonces sigo teniendo algunos detalles, lo malo de esto es que el programa siempre estara corriendo en el server(todo el tiempo) asi es que no puedo usar el evento oncreate(), ondestroy() tendre que usar una funcion para destruirlos aunque esto si me da un poco de panico lo probare gracias.


Me refería a los eventos de los hilos (threads) no del programa principal.

richy08 14-07-2010 17:18:05

Cita:

Empezado por Caral (Mensaje 370297)
Hola
Creo la conexion y el query que necesite.
Lo uso e inmediatamente despues en el acto lo destruyo.
Simple y transparente.
Se puede hacer un simple procedimiento que sea llamado cuando ya no se usen los componentes para ser destruidos.
La verdad no le veo lo complicado.
Saludos

si la verdad no seria complicado pero no se con certeza que es lo que pase
aunque segun yo le doy un nombre al query al querer acceder por su nombre no logro que compile

Código Delphi [-]
function TFrm_Interfaces.CreaAdo(Myusername, nombre: string; acode, estado : integer):boolean;
var
   i, seleccion :integer;
begin
       //coneccion mysql
       zConnect1:= TzConnection.Create(nil);
       With zConnect1 do
       begin
        Parent:= Frm_Interfaces;
        Name:= Myusername+'z';
        Catalog:= 'lookup';
        Database:= 'cdr';
        HostName:= '192.168.10.3';
        Password:= 'siti270';
        Protocol:= 'mysql-5';
        port:= 3306;
        User:= 'root';
        Connect;
       end;

       //coneccion mssql
       connect:= tadoconnection.Create(nil);
       With Connect do
       begin
        connectionstring:=cadena;
        loginprompt:=false;
        provider:='SQLOLEDB.1';
        name:=Myusername+'m';
        connected;
       end;

       //crea el query   mssql   busca extensiones
       Query      :=   TAdoquery.Create(nil);
       with Query  do
       begin
         Name :=   Myusername+'1';
         close;
         Connection:= connect;
         SQL.text:='select idext, DesTel from pbx_ext where acode=:acode ';
         parameters.ParamByName('acode').Value:=acode;
         Parent:= Frm_Interfaces;
         CursorType := ctStatic;
         open;
       end;

       //crea el query   mysql
       zQuery      :=   TzQuery.Create(nil);
       with zQuery  do
       begin
         Name :=   Myusername+'2';
         Connection:= zConnect1;
         SQL.text:='update lookup set  allowcalls=:allowcalls, ldesc=:ldesc where code=:code ';
         Parent:= Frm_Interfaces;
       end;

       i:=0;
       seleccion:=Query.RecordCount;
       Query.First;
       While ido
       begin
            zQuery.Close;
            zQuery.ParamByName('allowcalls').Value:=estado;
            zQuery.ParamByName('ldesc').Value:=nombre;
            zQuery.ParamByName('code').Value:=Query.fieldbyname('idext').Value;
            zQuery.ExecSQL;
            i:=i+1;
            Query.Next;
       end;
end;

Cita:

Empezado por Neftali (Mensaje 370334)
Me refería a los eventos de los hilos (threads) no del programa principal.

entonces si destruyo el hilo todo lo que se halla creado a dentro de el se destruye ???

este codigo lo uso para destruir el hilo en la parte del cliente

Código Delphi [-]
  if CBClientActive.Checked then
      begin
        try
           Client.Connect(10000);  // in Indy < 8.1 leave the parameter away
           ClientHandleThread := TClientHandleThread.Create(True); //crea el hilo
           ClientHandleThread.FreeOnTerminate:=True; //para que no se ejecute inmediatamente
           ClientHandleThread.Resume; //lo manda ejecutar
       except
            on E: Exception do MessageDlg ('Error while connecting:'+#13+E.Message, mtError, [mbOk], 0);
        end;
      end
      else
      begin
       ClientHandleThread.Terminate;
       Client.Disconnect;
      end;

Neftali [Germán.Estévez] 14-07-2010 17:37:01

Cita:

Empezado por richy08 (Mensaje 370364)
entonces si destruyo el hilo todo lo que se halla creado a dentro de el se destruye ???

Cuando destruyes un objeto, ese objeto queda innacesible y todo lo que hubieras creado dentro también. Si lo que has creado dentro (Create del Thread) lo has destruído correctamente (Destroy del Thread) estará todo OK, si no lo has destruído, esa memoria se perderá.

En cualquier caso el hilo y todo lo que hubiera dentro ya no existe (por decirlo así).

richy08 14-07-2010 17:49:39

Cita:

Empezado por Neftali (Mensaje 370367)
Cuando destruyes un objeto, ese objeto queda innacesible y todo lo que hubieras creado dentro también. Si lo que has creado dentro (Create del Thread) lo has destruído correctamente (Destroy del Thread) estará todo OK, si no lo has destruído, esa memoria se perderá.

En cualquier caso el hilo y todo lo que hubiera dentro ya no existe (por decirlo así).

sabes viendo mi codigo no tengo nada de lo que describes, creo que tendre que volver a requemarme los manuales para ver en que momento tengo que utilizar lo que comentas, por que mi maquina al estar corriendo los programas al final empezo a marcar errores de memoria al principio no se me hizo raro por que es algo normal en mi maquina ya que mi instalacion de windows esta dañada, pero es mejor asegurarme gracias por sus comentarios.

Neftali [Germán.Estévez] 15-07-2010 10:12:50

Tal vez deberíamos "hacer un alto en el camino" (como se dice aquí) y pensar y revisar todo lo que hemos hablado, porque te confío que yo mismo he perdido un poco de vista el objetivo final.

Creo que hemos dado muchas vueltas y me suena que hemos estado discutiendo de los mismo en varios hilos y al final yo me he perdido un poco.

Así que tal vez deberíamos poner la PAUSA. ;)

richy08 15-07-2010 16:31:32

si totalmente de acuerdo la verdad hasta yo me empiezo a confundir al ver el codigo:eek: y tanto texto que sigo intentando digerir, creo que mi mayor problema es que veo diferentes textos y ejemplos de programacion que son diferentes pero igual y pueden llegar al mismo resultado:D


La franja horaria es GMT +2. Ahora son las 11:18:41.

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