Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Validación de Datos (https://www.clubdelphi.com/foros/showthread.php?t=75124)

vmelga 29-07-2011 22:15:47

Validación de Datos
 
Buenas Tardes:

No estoy seguro que esta sea la categoría correcta donde poner mi duda...pero bueno, tengo el siguiente problema: estoy programando un formulario en el cual estoy utilizando una grilla, el TdxDBGrid. Bueno, pasa que al ingresar un valor tengo que validar el dato si existe en una tabla, con eso no tengo problema, el problema esta en que si ese valor no se encuentra en la tabla se tiene que desplegar un mensaje y luego borrar el contenido de ese campo de la grilla y poner el foco en la misma. Lo de borrar el contenido y colocarle el foco es el problema. Ya probé de todo pero no logro hacer que realice eso.
Parece poca cosa, pero realmente no se porque no esta haciendo eso.
El codigo es el sgte:

with O_qery_auxi do //Tqery
begin
Close;
SQL.Clear;
SQL.Add('select * from 'tabla' where campo = x')
Open;
if Eof then
begin
O_dxmd_ModeMaesCDcampo.Value := ''; //men data
O_dxmd_ModeMaesCDcampo.FocusControl;
end;
Close;
end;

- De antemano muchas gracias!.

maeyanes 29-07-2011 22:32:22

Hola...

No se si ya te dijeron, pero te recomiendo que le des una leida a la Guía de Estilo.

Otra cosa, cuando publiques código fuente en Delphi, usa las etiquetas delphi:

[delphi]
begin
ProcedimientoAEjecutar;
Variable := 'hola mundo';
// ejemplo
end;
[/delphi]

lo que se mostrará en los foros así:

Código Delphi [-]
begin
  ProcedimientoAEjecutar;
  Variable := 'hola mundo';
  // ejemplo
end;

Ahora, no entiendo mucho lo que quieres hacer, ¿estás haciendo un formulario de búsqueda? Por que si es así, la forma en que lo estás haciendo no es la más indicada.


Saludos...

vmelga 29-07-2011 22:50:44

Ya veo...disculpa, es que soy nuevo en el foro...

bueno, trataré de explicarme mejor, lo que quiero hacer es controlar el dato que se ingresa en una grilla...tengo que tomar el valor ingresado y si no se encuentra en una tabla dicho valor, tiene que borrar el valor de la grilla y posicionar el foco en la misma.

Pasa que ya probe de varias formas y no logro lograr que se comporte de esa manera.

Casimiro Noteví 29-07-2011 23:14:27

¿Y por qué pides el dato en un dbgrid?, explícanos más porque 'suena' raro.

ecfisa 30-07-2011 09:26:14

Hola vmelga.

Creo haberte entendido lo siguiente:

Tenés un DBGrid asociado a una tabla y cuando escribis sobre el mismo DBgrid en determinada celda, querés verificar si el valor de la misma existe en otra tabla. Y si no existe mostrar un mensaje, borrar lo escrito y posicionarte en la misma celda para volver a escribir.

Si es así, probá de la siguiente forma:
Código Delphi [-]
  private
    procedure CampoSetText(Sender: TField; const Text: String);
  end;
...
implementation

procedure TForm1.CampoSetText(Sender: TField; const Text: String);
begin
  if Text <> '' then
  begin
    TuQuery.Close;
    TuQuery.SQL.Clear;
    TuQuery.SQL.Add('Select * From TuTabla');  // tabla donde realizas la busqueda
    TuQuery.SQL.Add('Where Campo = :Dato');    // Campo a comparar con valor de la celda(Dato)
    TuQuery.ParamByName('Dato').AsString:= Text;
    TuQuery.Open;
    if TuQuery.IsEmpty then
    begin
      ShowMessage('Dato inexistente');
      TField(Sender).Value:= '';
      Abort;
    end
    else
      TField(Sender).Value:= Text;
    TuQuery.Close;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  TuDataSet.FieldByName('TuCampo').OnSetText:= CampoSetText;  // Asignar evento al campo asociado a la celda a evaluar
end;

...

procedure TForm1.FormDestroy(Sender: TObject);
begin
  TuDataSet.FieldByName('TuCampo').OnSetText:= nil; 
end;

Con un TDBGrid, en lugar de referenciar al TDataSet, podrías hacer:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  with DBGrid1.DataSource.DataSet do
    FieldByName('TuCampo').OnSetText:= CampoSetText;
end;
Pero ignoro si es igual para un TdxDBGrid.

Saludos.

vmelga 01-08-2011 15:07:02

Muchisimas gracias. Acabo de probar y funciona muy bien.
Como había dicho estoy empezando a usar Delphi y aun no tengo mucho conocimiento sobre el mismo, pero dentro de poco espero poder poner mi grano de arena también.


La franja horaria es GMT +2. Ahora son las 17:12:48.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi