<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content="text/html; CHARSET=UTF-8" http-equiv=Content-Type>
<META name=GENERATOR content="MSHTML 8.00.6001.18975">
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT face=Arial>No trabaja en otra transacción, son pruebas que estoy
realizando antes de empezar un proyecto y solo tengo una
transacción.</FONT></DIV>
<DIV><FONT face=Arial>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.</FONT></DIV>
<DIV><FONT face=Arial></FONT> </DIV>
<DIV><FONT face=Arial>procedure Tdm.rsAfterPost(DataSet:
TDataSet);<BR>begin<BR> try<BR> if not tra.Active then
tra.StartTransaction;<BR>
rs.ApplyUpdates;<BR> tra.CommitRetaining;<BR> except on
e:exception do<BR> begin<BR>
Application.MessageBox(pchar(e.Message), pchar('Error'), 0);<BR>
rs.CancelUpdates;<BR> end;<BR>
end;<BR>end;<BR></FONT></DIV>
<DIV><FONT face=Arial>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.</FONT></DIV>
<DIV><FONT face=Arial></FONT> </DIV>
<DIV><FONT face=Arial>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.</FONT></DIV>
<DIV><FONT face=Arial></FONT> </DIV>
<DIV><FONT face=Arial>Cualquier ayuda será bienvenida.</FONT></DIV>
<DIV><FONT face=Arial></FONT> </DIV>
<DIV><FONT face=Arial>Saludos cordiales.</DIV></FONT>
<DIV>=========<BR>|| ISMAEL ||<BR>=========</DIV>
<BLOCKQUOTE
style="BORDER-LEFT: #000000 2px solid; PADDING-LEFT: 5px; PADDING-RIGHT: 0px; MARGIN-LEFT: 5px; MARGIN-RIGHT: 0px">
<DIV style="FONT: 10pt arial">----- Original Message ----- </DIV>
<DIV
style="FONT: 10pt arial; BACKGROUND: #e4e4e4; font-color: black"><B>From:</B>
<A title=josea@artextrading.com href="mailto:josea@artextrading.com">José
Antonio Cuello</A> </DIV>
<DIV style="FONT: 10pt arial"><B>To:</B> <A
title=lazarus-es@lists.lazarus.freepascal.org
href="mailto:lazarus-es@lists.lazarus.freepascal.org">Spanish version of
Lazarus List</A> </DIV>
<DIV style="FONT: 10pt arial"><B>Sent:</B> Tuesday, November 23, 2010 2:33
AM</DIV>
<DIV style="FONT: 10pt arial"><B>Subject:</B> Re: [Lazarus-es] Ingresar datos
directamente en un grid</DIV>
<DIV><BR></DIV>Hola, no será que el componente trabaja sobre una transacción y
el procedimiento y trigger trabajan sobre otra transaccion? <BR>Una pregunta,
abres una transacción antes de ejecutar el post en el
TDataset?<BR><BR>Pregunto para hacerme una idea de como puede estar trabajando
el insert sobre la base de datos.<BR>Un saludo.<BR>
<TABLE cellSpacing=0 cellPadding=0 width="100%">
<TBODY>
<TR>
<TD><BR>
<HR noShade>
<BR><BR><B><FONT size=2>ARTEX TRADING S.A.</FONT></B><BR><I><FONT
size=2>José Antonio Cuello
Principal</FONT></I><BR><BR><BR><BR></TD></TR></TBODY></TABLE>El lun,
22-11-2010 a las 16:36 -0500, Ismael L. Donis García escribió:
<BLOCKQUOTE TYPE="CITE">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. </BLOCKQUOTE>
<BLOCKQUOTE TYPE="CITE"> </BLOCKQUOTE>
<BLOCKQUOTE TYPE="CITE">uso Firebird, TIBConnection, TSQLTransaction,
TSQLQuery, TDataSource y TDBGrid </BLOCKQUOTE>
<BLOCKQUOTE TYPE="CITE"> </BLOCKQUOTE>
<BLOCKQUOTE TYPE="CITE">Tengo las siguientes propiedades: </BLOCKQUOTE>
<BLOCKQUOTE TYPE="CITE">InsertSQL := execute procedure
pi_scorg(:NEW_nombre) </BLOCKQUOTE>
<BLOCKQUOTE TYPE="CITE">DeleteSQL := execute procedure pd_scorg(:OLD_idorg)
</BLOCKQUOTE>
<BLOCKQUOTE TYPE="CITE">UpdateSQL := execute procedure pu_scorg(:OLD_idorg,
:NEW_nombre) </BLOCKQUOTE>
<BLOCKQUOTE TYPE="CITE"> </BLOCKQUOTE>
<BLOCKQUOTE TYPE="CITE">El procedimiento pi_scorg como: </BLOCKQUOTE>
<BLOCKQUOTE TYPE="CITE"> </BLOCKQUOTE>
<BLOCKQUOTE TYPE="CITE">DECLARE VARIABLE INT_ID INTEGER; <BR>BEGIN<BR>
/* Procedimiento para agregar los organismos */<BR> select a.idorg
from scorg a where (a.nombre = :vch_nombre) into :int_id;<BR> if
(int_id is null) then<BR> insert into scorg (nombre)
values (:vch_nombre);<BR> else<BR> exception
e_org_e;<BR>END </BLOCKQUOTE>
<BLOCKQUOTE TYPE="CITE"> </BLOCKQUOTE>
<BLOCKQUOTE TYPE="CITE">Y un tigger Before Insert como: </BLOCKQUOTE>
<BLOCKQUOTE TYPE="CITE"> </BLOCKQUOTE>
<BLOCKQUOTE TYPE="CITE"> if (new.idorg is null)
then<BR> new.idorg = gen_id(gen_scorg_id,
1); </BLOCKQUOTE>
<BLOCKQUOTE TYPE="CITE"> </BLOCKQUOTE>
<BLOCKQUOTE TYPE="CITE">Saludos </BLOCKQUOTE>
<BLOCKQUOTE TYPE="CITE">=========<BR>|| ISMAEL ||<BR>========= </BLOCKQUOTE>
<BLOCKQUOTE TYPE="CITE"><PRE>_______________________________________________
Lazarus-es mailing list
<A href="mailto:Lazarus-es@lists.lazarus.freepascal.org">Lazarus-es@lists.lazarus.freepascal.org</A>
<A href="http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es">http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es</A>
</PRE></BLOCKQUOTE>
<P>
<HR>
<P></P>_______________________________________________<BR>Lazarus-es mailing
list<BR>Lazarus-es@lists.lazarus.freepascal.org<BR>http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es<BR></BLOCKQUOTE></BODY></HTML>