| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Mar 09 Oct, 2007 4:00 pm Asunto: Firebird no me graba hasta que salgo |
|
|
Hola a todos,
Tengo un ligero problemilla, antes de nada contaros que es la primera vez que toco SQL y los componentes de Interbase del Builder 6, aunque uso Firebird creo que son 100% compatibles.
Os cuento, el problema que tengo es que hago cambios en la base de datos con Update, Insert y todo eso, pero desde otro ordenador por lo que veo no ve ningun cambio hasta que se cierra el programa y se vuelve a abrir, es como que no actualiza o algo asi, no se hago las cosas mal, pero he probado de todo y siempre pasa lo mismo, no actualiza hasta que cierro el programa, os pongo unas lineas de como hago las cosas.
El select lo hago de la siguiente forma:
IBQuery1->Active=false;
IBQuery1->SQL->Clear();
IBQuery1->SQL->Add("Select * From users ");
IBQuery1->Active=true;
Y un Insert por ejemplo asi:
IBQuery1->Active=false;
IBQuery1->SQL->Clear();
IBQuery1->SQL->Add("Insert Into users (nombre) Values ('Antonio'));
IBQuery1->Prepare();
IBQuery1->ExecSQL();
Un Update asi:
IBQuery1->Active=false;
IBQuery1->SQL->Clear();
IBQuery1->SQL->Add("Update users Set ");
IBQuery1->SQL->Add("ONLINE=CURRENT_TIMESTAMP");
IBQuery1->SQL->Add(" Where Upper(nombre) = 'Antonio'");
IBQuery1->Prepare();
IBQuery1->ExecSQL();
Hago bien las cosas? es que no se si es necesario el Prepare, o el ExecSQL en vez del Active o yo que se, me estoy liando y no encuentro el problema ya que el programa no da ningun error.
Un abrazo a todos, a ver si podeis ayudarme.
Carlos |
|
| Volver arriba |
|
 |
rivo Lt JG

Registrado: 13 Mar 2004Mensajes: 72Ubicación: Asturias (España)
|
Publicado: Mar 09 Oct, 2007 5:11 pm Asunto: |
|
|
Busca por el foro lo de las transacciones, para que no te las realice al finalizar el programa, sino cuando tu lo necesite.
un saludo! |
|
| Volver arriba |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Mar 09 Oct, 2007 5:23 pm Asunto: |
|
|
Casi perfecto,
He puesto lo del CommitRetaining y ahora graba perfectamente, pero el problema es que cuando hago un select sigue igual, no ve nada hasta que cierra el programa y vuelve a abrir.
Desde el SQL Manager se ve perfectamente, graba el registro en el momento cosa que antes no hacia, pero por que el Select no lo ve? y en eso el CommitRetaining no vale para nada, solo vale para el Update y para el Insert no?
Pues eso que lo tengo casi casi
Un abrazo.
Carlos |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mie 10 Oct, 2007 7:05 am Asunto: |
|
|
Yo tengo ahora en preparación dos aplicaciones con Firebird. No sé porqué en una de ellas la transacción asociada la tengo como TACommit y en la otra está como TARollback y en ambas me funciona bien y me graba en cuanto ejecuto el query (insert o update).
¿Por qué no pruebas en aquellos que actualizan la base de datos (insert, update o delete) y después de hacer el ExecSQL haz un Commit?
| Código: | IBQuery1->Active=false;
IBQuery1->SQL->Clear();
IBQuery1->SQL->Add("Insert Into users (nombre) Values ('Antonio'));
IBQuery1->Prepare();
IBQuery1->ExecSQL();
IBTransaction1->Commit(); |
_________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Mie 10 Oct, 2007 11:59 am Asunto: |
|
|
Si, eso es lo que he puesto y funciona perfectamente, el problema viene ahora con el select.
Cuando hago el select no me actualiza los datos nuevos que hay en el servidor, el insert, update y delete funcionan bien y graban perfectamente al poner el comint, lo he comprobado con el SQL Manager, pero por alguna razon el select no se entera, no me devuelve lo nuevo solo lo anterior, es como si tuviese algo en cache o algo asi, he mirado todo y no encuentro nada que haga que no actualice.
A ver si sale la solucion.
Un abrazo.
Carlos |
|
| Volver arriba |
|
 |
edwinhp2 Lt JG

Registrado: 19 Nov 2005Mensajes: 67
|
Publicado: Jue 11 Oct, 2007 10:37 pm Asunto: |
|
|
Que tal Carlos,
El problema lo puedes solucionar de la siguiente forma:
Dale doble click sobre tu componente TIBTransaccion y selecciona la opción de Read Committed y después de realizar algún cambio ya sea por inserción de registros o actualización de los mismos, le das con el componente TIBTransaccion CommitRetaing para que actualize los cambios de forma física y las demás instancias de tu aplicación sean capaces de visualizar los cambios siempre y cuando tengan la opción de Read Committed habilitada.
Saludos
Edwin |
|
| Volver arriba |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Dom 14 Oct, 2007 1:37 am Asunto: |
|
|
Perfecto,
Ese era el problema, muchas gracias por la solucion me has quitado un peso de encima.
Gracias de nuevo, te debo una.
Un abrazo.
Carlos |
|
| Volver arriba |
|
 |
|