Hola.
Después de haber agotado todas las pruebas y buscado sin encontrar respuesta, los vengo a molestar...
Me sucede algo extraño al querer modificar una columna con TIBDataSet,tanto con Firebird 2.1 como con 2.5.
Instalé este último por haber leído que solucionaba algunos problemas que el anterior tenía con IBX.
La declaración SQL es:
Código SQL
[-]
ANULADO SMALLINT DEFAULT 0 NOT NULL
El nombre del IBDataSet es tbRef y el campo almacena el valor cero o uno, cuando es igual a uno, el registro
se considera anulado.
El problema es que estando ya asignado el valor uno en el campo, no aplica la modificación.
Ya verifiqué que tbMaster, tbDetalle y tbRef entran al código que adjunto con State = dsEdit,
y tbRefANULADO.Value = 1.
La transacción:
Cita:
readcommitted
rec_version
nowait
|
Pongo el código donde debería efectuarse la modificación:
Código Delphi
[-]
procedure TfrMasterMod.btAceptaClick(Sender: TObject);
begin
if MessageBox(Handle,'¿Desea aplicar los cambios?','CONSULTA', MB_YESNO +
MB_ICONQUESTION + MB_DEFBUTTON1 + MB_APPLMODAL) = mrYes then
begin
ShowMessage(tbRefANULADO.AsString);
if tbRef.State = dsEdit then
tbRef.Post;
tbDetalle.DataSource:= nil;
IBDatabase.ApplyUpdates([tbMaster, tbDetalle]);
tbDetalle.DataSource:= dsMaster;
IBTransaction.CommitRetaining;
ShowMessage(tbRefANULADO.AsString);
Close;
end;
end;
Cuando salgo de la aplicación y compruebo el valor de tbRefANUALDO, es igual a 0, es decir que no modificó el valor,
lo cuál es extraño por que muestra el valor 1 antes y después del CommitRetaining...
Sin embargo las modificaciones echas en tbMaestro o tbDetalle se efectúan sin problema.
No sé si atribuirlo a que tbMaestro/tbDetalle usan CachedUpdates (aunque no veo por que daría problemas),
o que haya algún problema con Firebird y los componentes IBX...
Si hay alguién a quién le haya sucedido lo mismo o pueda sugerirme algo, lo agradecería mucho.
Desde ya gracias por tomarse el tiempo de leer estas líneas.
Saludos.