Buen dia Compañeros
voy a publicar un poco de los Threads con JEDI, a lo mejor a alguien le sirve...
bueno voy a asumir que tienen instaldo los componentes JEDI tanto en JCL como JVCL. sino se lo pueden bajar de
http://www.delphi-jedi.org/.
voy a usar SQL Server con ODBC
1. en la pestaña de Jv Threading, pueden econtrar los componenetes relacionados.
2. voy a utilizar el componente TJvThread
3. una vez puesto el componente programo la ejecusion del Thread:
Código Delphi
[-]
procedure TFrmProcesar.JvThreadExecute(Sender: TObject; Params: Pointer);
var
Ses: TSession;
db: TDatabase;
sp: TStoredProc;
begin
Ses := TSession.Create(JvThreadDB);
db := TDatabase.Create(JvThreadDB);
sp := TStoredProc.Create(JvThreadDB);
try
Ses.SessionName := 'SessionDyn';
Ses.KeepConnections := true;
Ses.Active := true;
db.Name := 'DBTh';
db.SessionName := Ses.SessionName;
db.DatabaseName := 'DBThread';
db.DriverName := 'SQL Server';
db.LoginPrompt := False;
db.Params.Values['DATABASE NAME'] := 'nombreBaseDatos';
db.Params.Values['USER NAME'] := 'usuarioBaseDatos';
db.Params.Values['ODBC DSN'] := 'nombreDSNODBC';
db.Params.Values['PASSWORD'] := 'passwordBaseDatos';
db.Params.Values['SCHEMA CACHE SIZE'] := '8';
db.Params.Values['SQLQRYMODE'] := 'SERVER';
db.Params.Values['LANGDRIVER'] := '';
db.Params.Values['SQLPASSTHRU MODE'] := 'NOT SHARED';
db.Params.Values['SCHEMA CACHE TIME'] := '-1';
db.Params.Values['MAX ROWS'] := '-1';
db.Params.Values['BATCH COUNT'] := '200';
db.Params.Values['ENABLE SCHEMA CACHE'] := 'FALSE';
db.Params.Values['SCHEMA CACHE DIR'] := '';
db.Params.Values['ENABLE BCD'] := 'FALSE';
db.Params.Values['ROWSET SIZE'] := '20';
db.Params.Values['BLOBS TO CACHE'] := '64';
db.Exclusive := true;
db.KeepConnection := True;
sp.SessionName := Ses.SessionName;
sp.DatabaseName := db.DatabaseName;
sp.StoredProcName := 'sp_procesar;1';
sp.Prepare;
sp.ParamByName('@parametro1').AsInteger := 'valor1';
sp.ParamByName('@parametro2').AsString := 'valor2';
sp.ParamByName('@parametro3').AsInteger := 'valor3';
try
sp.ExecProc;
except
TFrmProcGrps(Params).ReturnVal := -2;
raise;
end;
db.Close;
Ses.Close;
finally
FreeAndNil(IniConf);
FreeAndNil(sp);
FreeAndNil(db);
FreeAndNil(Ses);
end
end;
procedure TFrmProcGrps.BtnStartClick(Sender: TObject);
Begin
JvWaitingGradient1.Visible := True;
JvWaitingGradient1.Active := True;
JvThreadDB.Execute(Self);
while not JvThreadDB.Terminated do begin
Sleep(100);
Application.ProcessMessages;
end;
Sleep(500);
JvWaitingGradient1.Visible := false;
JvWaitingGradient1.Active := False;
end;
Esto es todo compañeros se que es un ejemplo muy simple pero espero que a alguien le pueda servir y tambien espero que los demas foristas nos den sus coments y/o sugerencias para que todos aprendamos de todos
Gracias