Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-04-2004
ronimaxh ronimaxh is offline
Miembro
 
Registrado: jun 2003
Ubicación: Rep. Dominicana
Posts: 307
Poder: 21
ronimaxh Va por buen camino
ayuda con commit en transaccion...

Hola amigos, aqui les planteo mi problemita, estoy probando firebird 1.03 en red, con delphi 7, aplicacion de facturacion, tengo dos tablas a la que hago referencia para facturar, la primera se llama factura que me genera un id en la tabla maestra, y una de detalla donde tambien genera un id de dettalle estos id se generan por codigo, primero mando una rutina a crear el id, luego del insert hago el post y despues el commint, ahora bien el problema que pasa es que me chocan los id cuando los hago al mismo timpo (ejecutando el programa dos veces por ende en dos ventanas distintas, para hacer la prueba).

Nota: uso ibx componentes, cuando genero los id utulizo el ibquery y para guardarlos uso un ibtable, no se si es por eso lo que me ocurre, todo lo hago en el bonton guardar, primero llamo la rutina para que me genere el id, luego de esto, me hace el insert y despues el post y el commit. Lo que me pasa es cuando corro el programa desde otra ventana y hago otra factura en el mismo modulo me dice que el id esta duplicada y da error, parase que el commit no actualiza la base de datos (desde la otra ventana), ahora bien cuando repito el commit en el boton guardar antes de generar el id si lo hace bien, ha que se debe esto.

Nota: espero haberme esplicado bien, sino avisenme y aclaro un poco mas.
__________________
ronimaxh
Rep. Dominicana

Última edición por ronimaxh fecha: 20-04-2004 a las 16:09:54.
Responder Con Cita
  #2  
Antiguo 20-04-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
Hola.

La consulta para ver y guardar el nuevo ID en la tabla correspondiente, tendría que ir en una transacción independiente. De forma que el nuevo valor estuviese confirmado nada más crearlo, y disponible para ser consultado por las otras conexiones. (Además seria aconsejable aumentar el nivel de aislamiento de esa transacción a Lecturas repetibles). De esta forma evitarás la duplicación de códigos.

Aunque usualmente, se suelen utilizar generadores para crear los códigos ID. Un generador es un objeto en la base de datos que va proporcionando códigos consecutivos. Si te instalas IB-Expert, http://www.hksoftware.net/download/i...4.1.1_full.exe además de ser un Administrador de Datos muy bueno, te permite crear el generador y un procedimiento almacenado para consultarlo, en el momento de crear el campo ID (mira las opciones de Autoincremento).

De forma que creas el generador y un procedimiento almacenado, al crear el campo ID. Y en el programa, en lugar de consultar tu tabla de IDs, ejecutas el procedimiento almacenado para averiguar el nuevo código.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #3  
Antiguo 20-04-2004
ronimaxh ronimaxh is offline
Miembro
 
Registrado: jun 2003
Ubicación: Rep. Dominicana
Posts: 307
Poder: 21
ronimaxh Va por buen camino
gracias amigo por tu pronta respuesta, en mi caso soy principiante, y no se nada de generadores y tampo de procedimientos almacenados (nunca lo hecho).
Si me das una pista como lo puedo aprender lo intentaria.

Nota: uso ibexpert version personal.
__________________
ronimaxh
Rep. Dominicana
Responder Con Cita
  #4  
Antiguo 20-04-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
Hola.

Un buen punto por el que empezar es esta web http://firebird.com.mx

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #5  
Antiguo 23-06-2004
Luis Luis is offline
Miembro
 
Registrado: may 2003
Posts: 40
Poder: 0
Luis Va por buen camino
Unhappy Actualizar con Interbase

Hola
soy nuevo en esto de interbase, si me pueden ayudar en la siguiente duda:

Estoy utilizando un IBquery para accesar a una tabla llamada clientes pero no se como realizar la actualizacion cuando agrego un cliente nuevo, el siguiente es el procedimiento que utilizo pero con SQL server a travez del BDE.

procedure T_MODULO.ActualizaBaseDatos(Query: TIBquery);
begin
With Query Do
begin
FRIO3.StartTransaction;
try
FRIO3.ApplyUpdates;
FRIO3.Commit;
completado:=true;
except
begin
MessageDlg('Error en la base de datos...notifique a sistemas', mtError, [mbOK], 0);
completado:=false;
FRIO3.Roolback;
exit;
end;
end;
end;
end;

si me pueden regalar un ejemplo de como actualizar se los agradecere mucho.

Responder Con Cita
  #6  
Antiguo 29-06-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
Hola.

¿ Que error te encuentras ?

Respecto a un ejemplo, ¿ no te sirven los que vienen con Delphi ?. Tienes, por ejplo. la IBMastApp (carpeta Demos, DB)

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 02:21:10.


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
Copyright 1996-2007 Club Delphi