![]() |
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); |
Hola
Cita:
Código:
if not Data_principal.SQLConnection1.InTransaction thenCita:
Cita:
¿ Porque utilizas AsuntosCDS.Asunto.FieldByName('CODASU').Asinteger ? ¿ No seria mejor simplemente Dataset.FieldByName('CODASU').AsInteger ? Nunca he usado el evento NewRecord, para estas cosas siempre he usado el AfterInsert. No sé si el problema estará aqui, pero puedes probarlo. Si las acciones de ObtenUltimoNumero y ActualizaNumeracion, las realizas en el Servidor (mediante un procedimiento almacenado), te ahorrarás mucho trabajo en la aplicación. En la aplicación solo tendrias algo como : procedure TAsuntosCDS.AsuntoAfterInsert(DataSet: TDataSet); begin spObtenUltimoNumero.ExecProc; Dataset.FieldByName('CODASU').Asinteger:= spObtenUltimoNumero.ParamByName('NUMERO').AsInteger; end; Como ves, tienes que definir un procedmiento almacenado spObtenUltimoNumero, que cuando lo ejecutas devuelve el ultimo numero como parámetro, y actualiza la numeración. Saludos. |
| La franja horaria es GMT +2. Ahora son las 20:14:32. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi