Ver Mensaje Individual
  #12  
Antiguo 27-04-2012
nextor nextor is offline
Miembro
 
Registrado: abr 2010
Posts: 31
Reputación: 0
nextor Va por buen camino
Ejemplo basico de Threads con JEDI

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
  // esta variables es para darle una sesion al thread
  Ses: TSession;
  // esta variable es para crear la conexion a la DB
  db: TDatabase;
  // esta variables es para la llamada al stored procedure
  sp: TStoredProc;

begin

    // seteo  las variables
    Ses := TSession.Create(JvThreadDB);
    db := TDatabase.Create(JvThreadDB);
    sp := TStoredProc.Create(JvThreadDB);

    try
    // configuracion de la sesion
      Ses.SessionName := 'SessionDyn';
      Ses.KeepConnections := true;
      Ses.Active := true;
      
      // configuracion de la conexin a la DB
      db.Name := 'DBTh';
      db.SessionName := Ses.SessionName;
      db.DatabaseName := 'DBThread';
      db.DriverName := 'SQL Server';
      db.LoginPrompt := False;
      
      // parametros para la conexion a la DB
      // estoy usando ODBC con SQL Server
      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;
      
      // Nombre del stored procedure
      sp.StoredProcName := 'sp_procesar;1';
      sp.Prepare;
      
      
      // poner parametros al stored procedure
      sp.ParamByName('@parametro1').AsInteger := 'valor1';
      sp.ParamByName('@parametro2').AsString := 'valor2';
      sp.ParamByName('@parametro3').AsInteger := 'valor3';
      
     // ejecusion del stored procedure
        try
          sp.ExecProc;
        except
          TFrmProcGrps(Params).ReturnVal := -2;
          raise;
        end;
        
        // cierro la sesion y la conexion
      db.Close;
      Ses.Close;
    finally
      FreeAndNil(IniConf);
      FreeAndNil(sp);
      FreeAndNil(db);
      FreeAndNil(Ses);
    end
end;

// y por ultimo en un bonto pongo lo siguiente
procedure TFrmProcGrps.BtnStartClick(Sender: TObject);
Begin

   // esto es el componenete JvWaitingGradient es como un gift de progreso

  JvWaitingGradient1.Visible := True;
  JvWaitingGradient1.Active := True;

  // empieza la ejecucion del thread              
  JvThreadDB.Execute(Self);
  // con esto la pantalla no se queda blanqueada
 //
  while not JvThreadDB.Terminated do begin
    Sleep(100);
    Application.ProcessMessages;
 end;
 Sleep(500);
// una vez que haya terminado el stored procedure
//paro gift
  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
Responder Con Cita