Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   otro problema con Firebird (https://www.clubdelphi.com/foros/showthread.php?t=32541)

Dark Aeris 08-06-2006 21:44:54

otro problema con Firebird
 
Hola a todos, se ke este tema esta más ke tokado pero kon todo y ke he revisado las respuestas a otros, no he podido resolver el mio :(.
Lo ke hago es solo seleccionar un registro una tabla y ese agregarlo a una tabla temporal, y agregado debe mostrarse este registro en otro grid, el problema es ke no se ve ke lo haga, debo salir del ejekutable y volver a entrar para ver ke se haya hecho la transaccion.
Se ke debo poner "commit" pero me marca error, alguien me puede ayudar?
de antemano gracias.

kodigo:

ibtable1.Open;
ibtable2.Open;
while not(ibtable1.Eof)do
begin
if(regselec=string(ibtable1.fieldbyname('CANCION').value))then
begin
ibtable2.Insert;
ibtable2.FieldByName('ID').Value:=ibtable1.FieldByName('ID').Value;
ibtable2.FieldByName('CANCION').Value:=ibtable1.FieldByName('CANCION').Value;
ibtable2.FieldByName('ARTISTA').Value:=ibtable1.FieldByName('ARTISTA').Value;
ibtable2.FieldByName('ALBUM').Value:=ibtable1.FieldByName('ALBUM').Value;
ibtable2.FieldByName('UBICACION').Value:=ibtable1.FieldByName('UBICACION').Value;
ibtable2.Post;
ibtransaction2.Commit;
end;
ibtable1.next;
end;
ibtable1.Close;
ibtable2.Close;

Paoti 08-06-2006 22:01:02

porque estas usando dos transacciones, creo suponer eso:


ibtransaction2.Commit;



aparte la siguiente linea, esta dentro del while, que si encuentra lo que buscas, haga el insert el post y das commit y sigues dentro del bucle. está mal implemntada la lógica.


El problema quizas sea que tus dos tablas apuntan a la transsacion número uno.



Bueno, eso es loq ue pienso, no soy mago para adivinar la lógica de tu aplicación, pero viendo la parte que estas mostrando, puede ser eso....



¿Dónde abres las tablas?

¿Cuándo haces el refresh?

Sick boy 08-06-2006 23:12:14

A mi la logica no me parece que este muy mal, lo que no dice es que error le muestra al hacer el commit.

Ademas, cierra las dos tablas, asi que o hay más codigo, o es imposible que se vea nada en el grid.

Paoti 08-06-2006 23:15:41

correcto, pero cuando haces el commit, se cierran las tablas implicadas, y despues hace un table1.next, está algo ilógico.




Bueno, en mi punto de vista, se necesita más retroalimentación por parte del compañero, para poder ayudarle.




Nos vemos

Dark Aeris 09-06-2006 05:20:39

Aklaraciones
 
hola de nuevo a todos y gracias por el interes, tratare de explicarme en la logika del kodigo

procedure TForm2.DBGrid1DblClick(Sender: TObject);
begin
regselec:=dbgrid1.Fields[0].AsString;
ibtable1.Open;
ibtable2.Open;

* hago un doble click a un registro del grid a fin de seleccionarlo y realize la siguiente accion

while not(ibtable1.Eof)do
begin
if(regselec=string(ibtable1.fieldbyname('CANCION').value))then

* este ciclo es una busqueda para ubicarme sobre los campos correspondientes a la celda seleccionada

begin
ibtable2.Insert;
ibtable2.FieldByName('ID').Value:=ibtable1.FieldByName('ID').Value;
ibtable2.FieldByName('CANCION').Value:=ibtable1.FieldByName ('CANCION').Value;
ibtable2.FieldByName('ARTISTA').Value:=ibtable1.FieldByName('ARTISTA').Value;
ibtable2.FieldByName('ALBUM').Value:=ibtable1.FieldByName('ALBUM').Value;
ibtable2.FieldByName('UBICACION').Value:=ibtable1.FieldByName('UBICACION').Value;
ibtable2.Post;
ibtransaction2.Commit;
end;
ibtable1.next;
end;
ibtable1.Close;
ibtable2.Close;
end;

* al encontrar los campos correspondientes estos se copian a otra tabla identica que es solo temporal, el ciclo se detiene cuando encuentra la coincidencia del campo seleccionado.

Ya con esto, muestro los datos copiados en otro grid, el problema es que si lo hace bien todo, solo ke muestra los resultados al salir y volver a entrar a la aplikacion, es decir, no se actualiza al momento. Espero haberme dado a entender, Gracias!!! :D

Neftali [Germán.Estévez] 09-06-2006 09:35:55

Por favor utilizad TAG's cuando escribáis código Delphi en los mensajes.

Sick boy 09-06-2006 10:18:17

A parte de lo dicho por Neftali, no te has explicado mejor, ya que has vuelto a poner lo mismo!!!!

Cita:

el ciclo se detiene cuando encuentra la coincidencia del campo seleccionado
No es cierto, el ciclo se detiene porque se cierran las tablas, y en el siguiente .next te da un error, ya que la tabla esta cerrada.
Supongo que ese es el error que te da, y que no nos quieres decir.

Tu quieres que el resultado aparezca en otro grid, pero no nos dices nada de él, ni a que tabla esta enganchado, ni si abres o refrescas la tabla.

Lepe 09-06-2006 10:42:47

No está muy claro este hilo, pero me parece que tienes que usar "CommitRetaining" en lugar de Commit, así hace que aparezcan los datos de forma "instantánea".

Saludos


La franja horaria es GMT +2. Ahora son las 20:54:45.

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