Hola.
Según entendí deseas que cuando ingresen el valor de determinado campo de una tabla
T1, este sea buscado en otra tabla
T2 mediante una consulta. Esta consulta debería retornar el valor de otro campo de
T2 que a su vez será asignado a otro campo en
T1.
Si no me equivoqué en la apreciación, podrías usar el evento
OnSetText del campo de la tabla
T1 en que estas ingresando la información:
Código Delphi
[-]
type
TForm1 = class(TForm)
...
procedure FormCreate(Sender: TObject);
private
procedure tuCampoSetText(Sender: TField; const Text: string);
public
end;
...
implementation
procedure TForm1.tuCampoSetText(Sender: TField; const Text: String);
begin
DataSetT1.Edit;
QueryT2.Close;
QueryT2.SQL.Clear;
QueryT2.SQL.Text := 'SELECT * FROM T2 WHERE CPO_A_BUSCAR = :VALOR';
QueryT2.ParamByName('VALOR').AsString := Text;
QueryT2.Open;
DataSetT1.FieldByName('CPO_A_ASIGNAR').AsString := QueryT2.FieldByName('CPO_ENCONTRADO').AsString;
Sender.AsString := Text;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
DataSetT1.FieldByName('Nivel').OnSetText:= tuCampoSetText;
end;
...
Donde:
- DataSetT1 -> Tabla de ingresos.
- QueryT2 -> Tabla de consulta.
- CPO_INGRESADO: Es el campo de T1 donde ingresas el valor que será buscado en T2.
- CPO_A_BUSCAR: Es el campo de T2 a comparar con CPO_INGRESADO.
- CPO_A_ASIGNAR: Es el campo de T1 al que se le asigna el resultado de la búsqueda en T2.
- CPO_ENCONTRADO: Es el campo de T2 que se asignará a CPO_A_ASIGNAR.
Si creas los campos persistentes, podes asignar el evento
OnSetText haciendo doble click sobre dicho evento del campo desde el
Object Inspector, yo lo hice manualmente para que sea mas claro el ejemplo.
De este modo y si lo deseas, incluso podes prescindir del
TDBEdit, ya que realizará el cambio aún escribiendo sobre el DBGrid.
Saludos.