Postby ignacio » Thu Sep 03, 2020 5:13 pm
Buenos días,
oDataset:AddUserVar() añade un campo virtual a la tabla que simplemente ejecuta un code-block. Esto es todo. No incluye ninguna persistencia de ningún tipo que es lo que sugiere. Lo más sencillo es realizar una SELECT con un campo inventado. Algo así:
SELECT * , 0 as MiCampo FROM CLIENTES
oDataset:MiCampo siempre la va a devolver el valor 0. Obviamente MiCampo no es un campo real de la tabla y cualquier intento de asignarle un valor provocará un error. No obstante, la solución es sencilla utilice un TMemDataset que si podrá editar y de paso incluya un campo más para indicar que el registro ha sido modificado. Algo así:
SELECT * , 0 as MiCampo, 0 as MiEstado FROM CLIENTES
Cada vez que edite el registro ponga el campo MiEstado a 1, si lo borra a 2 y si añade 3. El resto del código es coser y cantar. Recorrease el TMemDataset y si MiEstado es distinto de cero haga las modificaciones pertinente. Échele un vistazo a los métodos oDataset:InitFrom() y oDataset:SaveFrom()
Un saludo