Ver Mensaje Individual
  #22  
Antiguo 09-07-2010
Avatar de richy08
richy08 richy08 is offline
Miembro
 
Registrado: may 2007
Ubicación: Bucerias, Nayarit Mexico
Posts: 529
Reputación: 20
richy08 Va por buen camino
Cita:
Empezado por roman Ver Mensaje
En realidad no sé, Felipe.

Se supone que un hilo no puede interactuar con componentes de la VCL y esto incluye componentes de acceso a datos como un Query, aunque el manual dice:

por lo que parece que el Query está a salvo.

Hice una pequeña prueba con dos ventanas y no tuve problema, pero había que ver con más detalle qué estás haciendo tú. Quizá estés interactuando de alguna manera con componentes visuales o que no son thread-safe.

// Saludos
buenas tardes roman primeramente perdon por revivir un hilo viejo y otra disculpa por hacerte una consulta directa, estoy un poco enredado con esto de los hilos y los querys, ya tengo el codigo un .exe que se encuentra en el server que segun yo seria el encargado de ejecutar los querys que atacan a las bd de access y mysql, pero me he dado cuenta que no podra funcionar asi por el empalme de peticiones de maquinas diferentes, he leido que puedes mandar la conexion y los querys por medio de hilos pero no logro encontrar informacion de ocmo hacerlo, con esto segun yo se quitara mi problema te agradeceria cualquier manual o referencia que me puedas proporcionar mil gracias.


//codigo del .exe server donde truena la aplicaion

Código Delphi [-]
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;  // update the time of last action
 //*****************************************Interfaz Aldelo********************************************
         md_Gral.Con_Gral.Connected:=false;
         md_Gral.Con_Gral.Connected:=true;
         Md_Gral.Qry_VerIntAld.close;
         Md_Gral.Qry_VerIntAld.Open;
         if  Md_Gral.Qry_VerIntAld.FieldByName('status').Value=1 then
         begin
          //Busca que no tenga customerid
          Qry_BusCusID.Close;
          Qry_BusCusID.Parameters.ParamByName('nconf').Value:=CommBlock.nconf;
          Qry_BusCusID.Open;

          if Qry_BusCusID.FieldByName('customerid').IsNull then
          begin
            try
             Md_Gral.Con_Aldelo.Connected:=true;
            except
              ShowMessage('Mistake to Try establish The Conection With The ALDELO Server');
              Md_Gral.Con_Aldelo.Connected:=false;
              exit;
             end;

              Md_Gral.Con_Aldelo.BeginTrans;
             try
               Qry_Busowner.close;
               Qry_Busowner.Parameters.ParamByName('aowner').Value:=Qry_BusCusID.fieldbyname('aowner').Value;
               Qry_Busowner.Open;

               Qry_Aldelocustomerfiles.Close;
               Qry_Aldelocustomerfiles.Parameters.ParamByName('customername').Value:=midstr(Qry_Busowner.fieldbynam  e('nombre').Value, 1, 30);
               Qry_Aldelocustomerfiles.Parameters.ParamByName('phonenumber').Value:=Qry_BusCusID.fieldbyname('ncvec  onf').Value;
               Qry_Aldelocustomerfiles.Parameters.ParamByName('rowguid').Value:='{'+Qry_Busowner.fieldbyname('nombr  e').Value+'-'+inttostr(Qry_BusCusID.fieldbyname('ncveconf').Value)+'}';
               Qry_Aldelocustomerfiles.ExecSQL;
               Md_Gral.Con_Aldelo.CommitTrans;
             except
               on E:Exception do Md_Gral.Con_Aldelo.RollbackTrans;
             end;//try

               //Md_Gral.Con_Aldelo.BeginTrans;
               //Busca el customerid
               Qry_AldeloBusCustomerFiles.Active:=false;
               Qry_AldeloBusCustomerFiles.SQL.Clear;
               Qry_AldeloBusCustomerFiles.SQL.Text:='SELECT CustomerFiles.CustomerID FROM CustomerFiles where  phonenumber='+QuotedStr(Qry_BusCusID.fieldbyname('ncveconf').Value);
               //showmessage(Qry_AldeloBusCustomerFiles.sql.Text);
               Qry_AldeloBusCustomerFiles.Active:=true;
               //************************
               
               //Md_Gral.Con_Aldelo.CommitTrans;
              try
               Md_Gral.Con_Aldelo.BeginTrans;
               Qry_AldeloCustomersCreditAccounts.close;
               Qry_AldeloCustomersCreditAccounts.Parameters.ParamByName('customerid').Value:= Qry_AldeloBusCustomerFiles.fieldbyname('customerid').Value;
               Qry_AldeloCustomersCreditAccounts.Parameters.ParamByName('firstname').Value:=midstr(Qry_Busowner.fie  ldbyname('sfirst').Value, 1, 15);
               Qry_AldeloCustomersCreditAccounts.Parameters.ParamByName('lastname').Value:=midstr(Qry_Busowner.fiel  dbyname('slast').Value, 1, 15);
               Qry_AldeloCustomersCreditAccounts.Parameters.ParamByName('totalcreditlimit').Value:=20000.00;
               Qry_AldeloCustomersCreditAccounts.Parameters.ParamByName('creditaccountstatus').Value:='1';
               Qry_AldeloCustomersCreditAccounts.Parameters.ParamByName('rowguid').Value:='{'+midstr(Qry_Busowner.f  ieldbyname('nombre').Value, 1, 40)+'-'+inttostr(Qry_BusCusID.fieldbyname('ncveconf').Value)+'}';
               Qry_AldeloCustomersCreditAccounts.Parameters.ParamByName('creditaccountexpiredate').Value:= FormatDateTime('dd/mm/yyyy',IncDay(Qry_BusCusID.fieldbyname('ddeparturedate').Value,2));
               Qry_AldeloCustomersCreditAccounts.ExecSQL;
               Md_Gral.Con_Aldelo.CommitTrans;
              except
               on E:Exception do Md_Gral.Con_Aldelo.RollbackTrans;
              end;//try

              //inserta en reserva
              Qry_AldeloModResCreAcc.close;
              Qry_AldeloModResCreAcc.Parameters.ParamByName('customerid').Value:=Qry_AldeloBusCustomerFiles.fieldb  yname('customerid').Value;
              Qry_AldeloModResCreAcc.Parameters.ParamByName('ncveconf').Value:=Qry_BusCusID.fieldbyname('ncveconf'  ).Value;
              Qry_AldeloModResCreAcc.ExecSQL;
              //inserta en reserva
            Md_Gral.Con_Aldelo.Connected:=false;
          end;
         end;
      //*****************************************Interfaz Aldelo********************************************
      //**************codigo del boton de Frm_posgue boton Btb_Inh
      Protocol.Lines.Add (TimeToStr(Time)+' !! "'+CommBlock.MyUserName+'": '+CommBlock.Command);
      NewCommBlock.Command := 'DIALOG';       // the message should popup on the client's screen
      NewCommBlock.MyUserName := '[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;
end;
Responder Con Cita