Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Transaction e IBDataSet (IBX) (https://www.clubdelphi.com/foros/showthread.php?t=15174)

T-man 13-10-2004 12:11:23

Transaction e IBDataSet (IBX)
 
Hola gente, soy nuevo en este foro. Estoy haciendo una aplicacion con InterBase y no tengo experiencia en las componentes IBX. Mi duda es si debo crear una componente Transaction por cada IBDataSet.
EJ: Tengo dos forms (ventanas) diferentes. Una para empleados y otra para usuarios. Para realizar los dos INSERT pongo dos IBDataSet pero los ligo a un solo componente Transaction o tengo que crear uno para cada INSERT???

Cuando me conviene activar la transaccion?
Y por ultimo, el codigo de "commitRetaining" va en el boton "insertar" del usuario????

Bueno muchas gracias

kalimero 13-10-2004 15:37:54

Hola.
Bueno puedes hacerlo como quieras. Solo depende de la idea que tengas de como hacer tu aplicación.
Si ligas los dos Datasets a un solo componente Transaction, todas las operaciones en las que intervengan los datasets se aceptan o rechazan en bloque. Si por el contrario utilizas un transaction para cada dataset estos actuan de un modo independiente el uno del otro.
No se si me he explicado bien

Saludos

T-man 13-10-2004 16:14:06

si, te entendi..muchas gracias.

Ahora bien, no quiero usar un DBNavigator entonces lei que para hacer un insert tengo que llamar a la funcion INSERTSQL que tiene el IBDataSet.
Como hago para llamar a esa funcion por codigo.
Yo hice esto pero me tira error, tengo que pasarle un valor por parametro.

IBDataSet1.Close;
IBDataSet1.Prepare;
IBDataSet1.InsertSQL.Values['DESCRIPCION']:=edit1.text;
IBDataSet1.Open;
IBTransaction1.CommitRetaining;

Quiero insertar en la tabla que esta asociada al INSERTSQL una descripcion que ingreso en un edit.

Bueno muchas gracias y a ver si alguien me puede informar sobre el codigo necesario para llamar a las funciones INSERTSQL, DELETESQL y demas.

noe 13-10-2004 18:55:05

Para utilizar el IBDataset, solo tienes que manejarlo como se hace con un componente Table:

es decir:
IBDataset1.Insert; (para insertar un registro)
IBDataset1.Edit; (para editar)
IBDataset1.Post; (para guardar)
IBDataset1.Delete; (para borrar)

saludos :)

athlontado 13-10-2004 19:07:16

El funcionamiento es similar al del componente TTable, algo así:

Código Delphi [-]
 with IBDataSet1 do begin
   Insert;
   FieldByName('DESCRIPCION').AsString := Edit1.Text;
   Post;
 end;
 
  IBTransaction1.CommitRetaining;

noe 13-10-2004 20:44:51

Otra forma seria asi:

IBDataSet1.Insert;
IBDataSet1Descripcion.Value:=edit1.text;
IBDataSet1.Post;
IBTransaction1.CommitRetaining;


;)

T-man 14-10-2004 09:43:18

muchas gracias, lo probé y funcionó.
Y ya que estamos a ver si me pueden ayudar en esto. Hice un generador y un trigger "before insert" para que se autoincremente el identificador de una tabla. Por lo que leí no hay que hacer nada mas que eso ya que el gestor de la BD lo hace todo automaticamente, pero cuando hago un insert me tira un error de que el campo del id es obligatorio.
Bueno si pueden decirme como lo soluciono se los agradezco muchisimo.
Hasta pronto.

Karpiter 14-10-2004 15:56:37

Transaction e IBDataSet (IBX)
 
Buenos días a todos.

Lo que yo hago es asignarle cero (0) al campo referenciado, me imagino que tu campo es el campo llave, verdad?; no se que tan bueno sea; aun así me lo
incrementa en el momento de guardar el registro.

T-man 14-10-2004 16:14:08

jaja funcionó. menos mal que existen foros como éste porque a veces la solucion es la menos pensada. Todavia no puedo creer como funciona con éste truco de ponerle un cero. Podia haber estado años probando.
Mil gracias...


La franja horaria es GMT +2. Ahora son las 23:55:25.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi