Ver Mensaje Individual
  #8  
Antiguo 12-03-2010
_CALI _CALI is offline
Miembro
 
Registrado: mar 2008
Posts: 99
Reputación: 19
_CALI Va por buen camino
Smile

***************************************
realmante es muy interesante lo q dices, es bueno saber el orden de los eventos como se disparan.

Bueno; Basicamente hago refernecia a dos conjuntos de datos , una es una tabla donde almaceno mis productos representado por un ADOTable (tbArticulos) y el otro es una lista de precios para mis productos representado por un ADOQuery (qryListaPrecios), ademas tengo un formulario de busqueda de articulos

como mensione antes tengo un DBGrid conectado a qryListaPrecios
donde el campo1 almacena el item del registro, el campo2(id_articulo) es donde ingreso el codigo del articulo ya sea digitandolo o llamando al formulario de busqueda de articulos

aqui les muestro el codigo real

Código Delphi [-]
//procedimiento para llamar al formulario donde busco el articulo
procedure TfrmListaPrecios.BuscarProducto;
begin
 frmBuscarArticulo := TfrmBuscarArticulo.Create(Application);

  try
    if frmBuscarArticulo.ShowModal = mrOk then
       begin
       if qryListaprecios.State = dsBrowse then
          qryListaprecios.Edit;
          //le envio el codigo del articulo a id_articulo de mi lista de precios
          qryListaprecios.FieldByName('id_articulo').AsString
          :=    frmBuscarArticulo.qryBuscarArticulo.FieldByName('id_articulo').AsString;
      end;
   finally
     frmBuscarArticulo.Free;
  end;

end;


//validaciones a nivel de campo para id_articulo

procedure TfrmListaPrecios.qryListapreciosid_articuloValidate(
  Sender: TField);
begin
     {buscar en articulos}
  if not tbArticulos.Locate('id_articulo', Sender.Text, []) then
     begin
       MessageDlg('No existe el producto', mtWarning, [mbOk], 0);
       Abort;
     end;
    {si existe el articulo, buscar en la lista de precios}
     Query1.Close;
     Query1.SQL.Clear;
     Query1.SQL.Add('select id_articulo from _listaprecios_detalle');
     Query1.SQL.Add('where id_articulo = ''' + Sender.Text + '''' );
     Query1.SQL.Add('and id_listaprecios = ''' + cboLista.KeyValue + '''' );
     Query1.Open;

     if not Query1.IsEmpty then {si existe en la lista de precios}
        begin

        MessageDlg('Ya existe el producto en lista de precios actual',   mtWarning, [mbOk], 0);

        Abort;
        end;

        //si todo va bien completar campos restantes
         qryListaprecios['UM_compra'] := tbArticulos['um_compra'];
         qryListaprecios['UM_venta'] := tbArticulos['um_venta'];
         qryListaprecios['UM_consumo'] := tbArticulos['um_consumo'];
         qryListaprecios['precio_compra'] := 0;
         qryListaprecios['precio_venta'] := 0;
         qryListaprecios['precio_consumo'] := 0;
         qryListaprecios['precio_compra'].FocusControl;


end;


//cuando apreto f1 en la segunda columna, llamar a mi formulario de busqueda

procedure TfrmListaPrecios.DBGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Key = VK_F1) and (DBGrid1.selectedIndex = 1) then
      BuscarProducto;


end;


cuando ingreso tecleando en el campo id_articulo (segunda columna de mi grilla) no hay problema, si digamos ingreso un articulo q ya esta registrado en la lista de precios aparece el mensaje advirtiendome q ya existe en la lista de precios actual y luego aborta la oparacion sin problemas

el problema es es cuando presiono F1 para llamar a mi formulario de busqueda y selecciono un articulo que ya esta ingresado en la lista de precios, al momento de aparecer el mensaje es donde se repite en valor del articulo validado en todas las filas, pense que se trataria de formulario de busqueda o d mi query pero me di cuenta que resumiendolo hasta lo mas sencillo causa ese problema con BDE, ADO tabla y/o consulta

aunque pasando la logica al evento Onchange y BeforePost, resulta bien, pero me gustaria saber si se puede gestionar las validaciones en OnValidate


Muchas Gracias denuevo!!!!

Última edición por _CALI fecha: 17-03-2010 a las 13:58:47. Razón: editar sintaxis delphi
Responder Con Cita