Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Es correcto esta excepción? (https://www.clubdelphi.com/foros/showthread.php?t=76981)

novato_erick 11-12-2011 22:07:47

Es correcto esta excepción?
 
Estimados Sres Tengo este formulario el cual utilizo Firebird y el componente DBExpress el cual tambien tengo DataSet, el proveedor y su respectivo DataSource

sin embargo en Firebird tengo en la tabla lo siguiente:

Código SQL [-]
ALTER TABLE CLIENTES ADD CONSTRAINT UQ_CLIENTES UNIQUE (CEDULA);
esto para evitar duplicidad de registro en el campo Cédula.

Sin embargo en delphi para manejar la excepcion que me manda tengo esto en el Boton de Guardar

Código Delphi [-]
procedure TfrmCliente.btnGuardarClick(Sender: TObject);
begin
  try
    dmAcceso.cdsClientesPAIS.Value := cbexPais.text;
    dmAcceso.cdsClientes.Post;
    dmAcceso.cdsClientes.ApplyUpdates(0);
    cbexPais.text := 'Otro';
  except
    on E:Exception do // error DBExpress
    begin
      ShowMessage(#13+E.Message);
    end;
end;
  if Application.MessageBox('¿Desea Agregar Otro?', 'Confirmación',
    MB_ICONQUESTION OR MB_YESNO) = ID_NO then
  begin
    frmPrincipal.CerrarPestana;
  end
  else
  Begin
    dmAcceso.cdsClientes.Active := False;
    dmAcceso.cdsClientes.Active := True;
    dmAcceso.cdsClientes.Last;
    dmAcceso.cdsClientes.Insert;
  end;
 end;

Lo malo es que no me maneja la excepcion no se en que estaré fallando

si tienen alguna idea que error cometa favor espero sus respuestas...


Saludos

novato_erick

Caral 11-12-2011 23:22:56

Hola
Que yo sepa la excepción es para devolver la tabla a su estado anterior a la ultima operacion:
Código Delphi [-]
procedure TfrmCliente.btnGuardarClick(Sender: TObject);
begin
  try
    dmAcceso.cdsClientesPAIS.Value := cbexPais.text;
    dmAcceso.cdsClientes.Post;
    dmAcceso.cdsClientes.ApplyUpdates(0);
    cbexPais.text := 'Otro';
  except
    on E:Exception do // error DBExpress
    begin
      dmAcceso.IBTransaction1.RollbackRetaining;
      ShowMessage(#13+E.Message);
    end;
end;
  if Application.MessageBox('¿Desea Agregar Otro?', 'Confirmación',
    MB_ICONQUESTION OR MB_YESNO) = ID_NO then
  begin
    frmPrincipal.CerrarPestana;
  end
  else
  Begin
    dmAcceso.cdsClientes.Active := False;
    dmAcceso.cdsClientes.Active := True;
    dmAcceso.cdsClientes.Last;
    dmAcceso.cdsClientes.Insert;
  end;
 end;
Saludos

Al González 12-12-2011 00:28:35

Aquí mismo hay varios textos y ejemplos sobre ApplyUpdates que pueden ayudar a esclarecer el problema, como los siguientes:

http://www.clubdelphi.com/foros/show...523#post419523

http://www.clubdelphi.com/foros/showthread.php?t=47497

El segundo ya tiene algunos años (me desconozco un poco).

Ya nos dirás, Erick, si lograste salir del apuro. :)

Saludos.

novato_erick 15-12-2011 21:21:48

Pues un error
 
Bueno leyendo un poco de todo lo que logre entender 'Creo' que de alguna manera utilizando el Evento OnReconcileError del Componente ClientDataSet del DBExpress puedo manejar las excepciones.

Mando mi código:

Código Delphi [-]

procedure TdmAcceso.cdsClientesReconcileError(DataSet: TCustomClientDataSet;
  E: EReconcileError; UpdateKind: TUpdateKind; var Action: TReconcileAction);
var
Result: Boolean;
begin
 cdsClientes.Post;

  If cdsClientes.ApplyUpdates (0) = 0 Then
  Begin
    dmCONEXION.sqlDB.CommitFreeAndNil(cdsClientes);
    Result := True;  // El registro se aplicó sin problemas
  End
  Else
  Begin
    dmCONEXION.sqlDB.RollbackFreeAndNil(cdsClientes);
    Result := False;  // Algo salió mal al intentar aplicar el registro
  End;
end;

el problema que me dice: [DCC Error] acceso.pas(232): E2033 Types of actual and formal var parameters must be identical

que hice mal?


Saludos

novato_erick


La franja horaria es GMT +2. Ahora son las 01:54:23.

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