Ver Mensaje Individual
  #2  
Antiguo 31-07-2006
afxe afxe is offline
Miembro
 
Registrado: jul 2004
Ubicación: Malaga-España
Posts: 273
Reputación: 20
afxe Va por buen camino
Provocas un posteo al realizar la búsqueda.

Cuando estás añadiendo o modificando un registro de una tabla no debes provocar que el cursor se mueva del registro, que es lo que pasa cuando haces un FindKey: El registro actual que estás insertando se posteará automáticamente y siempre te dará que existe... claro, acabas de grabarlo...
Lo más rápido, sin entrar en validaciones a nivel de registros y etc, es que antes de lanzar tu MD.tbCompra.Post, hagas la búsqueda en otra tabla que contenga el mismo conjunto de datos, es decir, haz el FindKey sobre TbBuscaCompra (por ejemplo) que debe apuntar a la misma tabla de compras:

Código:
 
// OnClick del Boton Grabar
 
// Comprobamos que estoy en insercción, pues si estoy modificando un
// registro y es lógico e irrefutable que ya exista  ;-)
 
if MD.tbCompra.State = dsInsert then begin
    cRut := Md.tbCompra.FieldByName('Rut').AsString;
    cTipDoc := Md.tbCompra.FieldByName('TipDoc').AsString;
    nDoc := Md.tbCompra.FieldByName('NumDoc').AsInteger;
    Md.tbBuscaCompra.Open;  // abro justo antes de buscar
    Md.tbBuscaCompra.IndexName:='CompCom';
    If MD.tbBuscaCompra.FindKey([cRut,cTipDoc,nDoc]) THEN begin
      ShowMessage('El registro ya existe');
    end else begin
      MD.tbCompra.Post;
      ShowMessage('Registro grabado');
    end;
    md.tbBuscaCompra.Close; 
end else begin
  MD.tbCompra.Post;
  // Se supone que si estamos modificando no se han modificado los
  // campos claves.
end;
He reutilizado lo que has escrito, espero que te sirva.
Responder Con Cita