Ver Mensaje Individual
  #4  
Antiguo 25-04-2012
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Reputación: 19
olbeup Va camino a la fama
Antes lo hacia en un DataModule, al poco tiempo me faltaba pantalla para poner los componentes de base de datos, al final opte por crear los componentes en tiempo real y no me arrepiento de haberlo hecho.

Este proceso lo realizo en cada formulario y nos es más trabajo, sino otra forma de trabajar, para mi, es ideal.

Primero, Definir en TForm:
Código Delphi [-]
...
  private
    { Private declarations }
    SQLInitDB: TStrings; <-- Aquí introduzco la SQL

    // Variable de búsqueda
    SQLWhereText: TStrings; <-- Aquí los parametros de WHERE

    // Componente de Conexión Facturas
    adoCnnFrm: TADOConnection;
    adoQryFrm: TADOQuery;
    dsSrcFrm: TDataSource;

    ...
    ...
end;

Segundo, Cuando se crea el TForm:
Código Delphi [-]
...
begin
  adoCnnFrm := TADOConnection.Create(Self);
    adoCnnFrm.LoginPrompt := False;
    adoCnnFrm.ConnectionString := MSSQLServerCfg.ConnectionString;    <-- Parámetro que se le pasa para la Conexión

  adoQryFrm := TADOQuery.Create(Self);
    adoQryFrm.Connection := adoCnnFrm;

  dsSrcFrm := TDataSource.Create(Self);
    dsSrcFrm.DataSet := adoQryFrm;

  dbgGrid.DataSource := dsSrcFrm;

  SQLInitDB := TStringList.Create;
    SQLInitDB.Add('SELECT');
    SQLInitDB.Add('    ...');
    SQLInitDB.Add('    ...');
    SQLInitDB.Add('  FROM xxyyzz');

  SQLWhereText := TStringList.Create;
end;

Tercero, Cuando se busca
Código Delphi [-]
...
var
  FieldValue: Integer;
begin
  // Guarda la posición del Grid, para después recuperarlo.
  FieldValue := GetIDxxyyzzGrid;

  // Comprobar que la base de datos si está abierta y cerrarla
  if adoCnnFrm.Connected then
    adoCnnFrm.Close;

  with adoQryFrm do
  begin
    SQL.Clear;

    SQL.Assign(SQLInitDB);

    if (SQLWhereText.Count > 0) then
      SQL.Add(SQLWhereText.Text);

    Open;
  end;

  //    Se pone ésta línea para que el puntero se actualice en el Grid
  // si no se pone el metodo (Update) del DBGrid, el puntero estaría
  // actualizado pero el foco que es azul estaría en la parte superior
  // del grid, y eso, lleva a confusión de donde se encuentra el puntero.
  dbgGrid.Update;

  // Posicionar el puntero donde estaba
  with dbgGrid.DataSource.DataSet do
  begin
    Locate('IDXXYYZZ', FieldValue, [loCaseInsensitive]);
    Result := RecordCount;
  end;
end;

Cuarto, Cuando se cierre el formulario
Código Delphi [-]
...
begin
  SQLInitDB.Free;
  SQLWhereText.Free;

  adoCnnFrm.Free;
  dsSrcFrm.Free;
  adoQryFrm.Free;
end;

Y esto me va muy bien.

Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.
Responder Con Cita