No trabaja en otra transacci�n, son pruebas que estoy realizando antes de empezar un proyecto y solo tengo una transacci�n. Y si verifico que exista una transacci�n activa, tengo el siguiente c�digo. Pero tengo entendido que el grid debe activar la transacci�n ella misma cuando entre en edici�n.
procedure Tdm.rsAfterPost(DataSet: TDataSet);
begin
try
if not tra.Active then tra.StartTransaction;
rs.ApplyUpdates;
tra.CommitRetaining;
except on e:exception do
begin
Application.MessageBox(pchar(e.Message), pchar('Error'), 0);
rs.CancelUpdates;
end;
end;
end;
La tabla tiene 2 campos idorg y nombre, pero el campo idorg le asigno los datos en la capa de datos y tengo un procedimiento almacenado que menciono abajo y en el tigger verifico si el valor del campo es nulo, lo cual va a ser cierto y le asigno el valor en el mismo, todo esto dentro de la capa de datos por lo que es transparente a la aplicaci�n.
Quiero teclear los datos directo en la grilla y al dar enter si estoy en la �ltima fila me pase para insertar una nueva, en caso de no estar en la �ltima cuando de enter me deje mover el cursor para la pr�xima. Esto es algo en lo que estoy enredado.
Cualquier ayuda ser� bienvenida.
Saludos cordiales.
=========
|| ISMAEL ||
=========
Earlier message 54 lines
----- Original Message -----
From: Jos� Antonio Cuello
To: Spanish version of Lazarus List
Sent: Tuesday, November 23, 2010 2:33 AM
Subject: Re: [Lazarus-es] Ingresar datos directamente en un grid
Hola, no ser� que el componente trabaja sobre una transacci�n y el procedimiento y trigger trabajan sobre otra transaccion?
Una pregunta, abres una transacci�n antes de ejecutar el post en el TDataset?
Pregunto para hacerme una idea de como puede estar trabajando el insert sobre la base de datos.
Un saludo.
------------------------------------------------------------------------
ARTEX TRADING S.A.
Jos� Antonio Cuello Principal
El lun, 22-11-2010 a las 16:36 -0500, Ismael L. Donis Garc�a escribi�:
Estoy tratando que ingresar datos directamente sobre un grid, pero me da error el cual me dice que la llave primar�a es requerida pero realmente yo la lleno en el tigger por lo que no deber�a dar ese error, es m�s si lo mando a ejecutar en consola funciona perfecto al igual que desde otros lenguajes de programaci�n, solo en Lazarus es donde estoy enredado.
uso Firebird, TIBConnection, TSQLTransaction, TSQLQuery, TDataSource y TDBGrid
Tengo las siguientes propiedades:
InsertSQL := execute procedure pi_scorg(:NEW_nombre)
DeleteSQL := execute procedure pd_scorg(:OLD_idorg)
UpdateSQL := execute procedure pu_scorg(:OLD_idorg, :NEW_nombre)
El procedimiento pi_scorg como:
DECLARE VARIABLE INT_ID INTEGER;
BEGIN
/* Procedimiento para agregar los organismos */
select a.idorg from scorg a where (a.nombre = :vch_nombre) into :int_id;
if (int_id is null) then
insert into scorg (nombre) values (:vch_nombre);
else
exception e_org_e;
END
Y un tigger Before Insert como:
if (new.idorg is null) then
new.idorg = gen_id(gen_scorg_id, 1);
Saludos
=========
|| ISMAEL ||
=========