Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Firebird no me graba hasta que salgo

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Firebird no me graba hasta que salgo Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.