Cita:
Empezado por roman
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; 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
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;
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);
Qry_AldeloBusCustomerFiles.Active:=true;
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;
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;
Md_Gral.Con_Aldelo.Connected:=false;
end;
end;
Protocol.Lines.Add (TimeToStr(Time)+' !! "'+CommBlock.MyUserName+'": '+CommBlock.Command);
NewCommBlock.Command := 'DIALOG'; NewCommBlock.MyUserName := '[Server]'; NewCommBlock.Msg := 'The process was done '; NewCommBlock.ReceiverName := '[return-to-sender]';
AThread.Connection.WriteBuffer (NewCommBlock, SizeOf (NewCommBlock), true); end;
end;