Ver Mensaje Individual
  #1  
Antiguo 11-12-2003
cwelx cwelx is offline
Registrado
 
Registrado: nov 2003
Posts: 2
Reputación: 0
cwelx Va por buen camino
unknow cursor (DBexpress)

Aqui tengo parte del codigo que uso cuando creo un nuevo registro, donde necesito obtener un código cuando se inserta uno nuevo y después grabarlo dicho registro antes de seguir actualizando. Utilizo DBExpress de la siguiente forma:

DBConnection --> SQLQuery --> TDatasetProvider --> ClientDataset

Despues del ApplyUpdates (en el codigo de abajo) me voy a cualquier campo del formulario e intento modificar algo, pero en ese momento se genera una execepcion, "unknow cursor".

En las funciones ObtenUltimoNumero y ActualizaNumeracion, necesito actualizar el contador de asuntos (mediantes consultas sql update), y debo hacerlo dentro de una transacción por si falla la inserción del nuevo registro, poder asi luego hacer un rollback.

- Es correcta la utilización de la transacción?
- despues de hacer un applyupdates, se puede seguir modificando los datos del formulario?
- Tengo que volver a pasarle los parametros al clientDataset??

Código:
procedure TAsuntosCDS.AsuntoNewRecord(DataSet: TDataSet);
  var TD: TTransactionDesc;
begin
  TD.TransactionID := 1;
  TD.IsolationLevel := xilREADCOMMITTED;
  AsuntosCDS.Asunto.FieldByName('CODASU').Asinteger:=   ObtenUltimoNumero;

  try
      if not Data_principal.SQLConnection1.InTransaction then
         Data_principal.SQLConnection1.StartTransaction(TD);

      ActualizaNumeracion(AsuntosCDS.Asunto.FieldByName('CODASU').AsInteger);

      if AsuntosCDS.Asunto.ApplyUpdates(0) = 0 then
         Data_principal.SQLConnection1.Commit(TD)
      else
         Data_principal.SQLConnection1.Rollback(TD);

  except

      AsuntosCDS.Asunto.CancelUpdates;
      Data_principal.SQLConnection1.Rollback(TD);
      raise;
      exit;
  end;

end;

Última edición por cwelx fecha: 11-12-2003 a las 01:40:43.
Responder Con Cita