Ver Mensaje Individual
  #5  
Antiguo 09-08-2013
gcaffe gcaffe is offline
Miembro
 
Registrado: oct 2004
Posts: 53
Reputación: 20
gcaffe Va por buen camino
Hola Alejandro73:

Ya había probado la solución que sugieres y funciona, pero he encontrado otra sin la necesidad de eliminar el TDbNavegator, preparé un pequeño programa de ejemplo para probar y el resultado es este:
1. Creo un procedimiento para grabar el registro, como son campos persistentes no necesito el Sender, además así lo puedo invocar desde cualquier otro evento, lo que muestro es un ejemplo particular de mi aplicación, pero se entiende.
Código Delphi [-]
procedure TForm1.GrabarFechasPostError;
var
  FechaAMD: string;
begin
    FechaAMD := Copy(FechasFecha.AsString,7,4)+Copy(FechasFecha.AsString,4,2)+Copy(FechasFecha.AsString,1,2);
    with GrlDT do begin
      Close;
      CommandText := 'INSERT INTO TestFechas (Fecha) VALUES ('''+FechaAMD+''')';
      CambiarSQLText.Params[0].AsString := 'GrlSQLSrvDT';
      CambiarSQLText.Params[1].AsString := CommandText;
      CambiarSQLText.ExecuteMethod;
      Execute;
    end;
end;

Luego en el evento OnPostError de la tabla pongo este código:
Código Delphi [-]
procedure TForm1.FechasPostError(DataSet: TDataSet; E: EDatabaseError;
  var Action: TDataAction);
begin
// daFail, daAbort, daRetry
  Action := daAbort;
  GrabarFechas;
  Fechas.Close;
  Fechas.Open;
  Fechas.Last;
  grdFechas.SetFocus;
  PostMessage(ActiveControl.Handle, WM_KEYDOWN, VK_DOWN, 0); // Abre un nuevo registro para insertar
end;

Así funciona correctamente, pero creo que es una solución TEMPORAL, porque insisto, el dbExpress debe resolver esta situación al generar el SQL automático.
De todas formas agradeceré una respuesta para evitar estos artificios.

Muchas gracias.
Responder Con Cita