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 07-02-2011
Tcmn Tcmn is offline
Miembro
 
Registrado: sep 2004
Posts: 152
Poder: 20
Tcmn Va por buen camino
IBDataset no guarda registros insertados y editados antes de commit

Hola tengo estoy haciendo un sistema con Delphi 6, Firebird 2.1, Componentes IBX en Windows XP Profesional.

Las tablas no hacen commit/commitretaining ni rollback/rollbackretaining en sus eventos sino que lo manejo con BitBtns para confirmar todos los cambios hechos a las tablas.

Me encontrado con algo curioso. Al insertar registros en la aplicacion cliente y despues modificar esos mismos registros previamente insertados sin hacer commit no me guarde el ultimo valor que puse en cierto campo sino el que puse al momento de insertar. Un ejemplo es el sig:

Inserto un registro:
Código:
 
Tabla.Insert;
tablaCAmpo1.Value:='ValorAl insertar Campo1';
tablaCAmpo2.Value:='ValorAl insertar Campo2';
tablaCAmpo3.Value:='ValorAl insertar Campo3';
Tabla.Post;
Ese mismo registro lo modifico despues:
Código:
 
Tabla.Edit;
tablaCAmpo2.Value:='Valor nuevo al Editar Campo2';{Modifico lo que hay en un campo}
Tabla.Post;
Despues hacemos commit:

Código:
Transaccion.Commit;
La logica dice que el Campo2 contiene la cadena "Valor nuevo al Editar Campo2" al registrarse los datos en la base de datos pero resulta que no. Lo que se guarda en la base de datos es lo que haya registrado en los campos al momento de dar de alta el registro, es decir, la cadena: "ValorAl insertar Campo2".

Espero me haya explicado. Esto ocurre con cualquier tabla(IBDataset) que tenga en mi aplicacion.

Nota: Cuando un registro se inserta, hago commit y despues modifico el mismo registro ahora si me registra los cambios que haga a ese registro.

Gracias de antemano por la ayuda que me puedan brindar.
__________________
Salu2
Responder Con Cita
  #2  
Antiguo 07-02-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Bueno, primero de todo, no deberías de trabajar de esa manera. Después de hacer .post hay que confirmar con commit/commitretaining

Y al hacer esto:
Código Delphi [-]
Tabla.Edit;
TablaCampo2.Value:='Valor nuevo al Editar Campo2';
Tabla.Post;

En teoría, estás editando el primer registro. Deberías posicionarte antes en el registro que vas a editar.
Responder Con Cita
  #3  
Antiguo 07-02-2011
Tcmn Tcmn is offline
Miembro
 
Registrado: sep 2004
Posts: 152
Poder: 20
Tcmn Va por buen camino
Lo que pasa es que es un formulario donde al entrar el usuario da de alta un registro como si fuera una factura con varios detalles, por lo que se confirma (Commit) hasta cuando se esta seguro de que procede la alta.

Los registros del detalle se insertan en un DBGrid por lo que a veces se dan de alta 3 o mas detalles y antes de confirmar (Commit) el operario llega a modificar uno de los registros del detalle como la descripcion o el monto.

Gracias por la atencion a este hilo.
__________________
Salu2
Responder Con Cita
  #4  
Antiguo 07-02-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Debes confirmar justo después de grabar. Si lo van a modificar después tan sólo tienes que buscar ese registro, lo presentas y que lo editen. Al terminar haces de nuevo .post y confirmas.
Responder Con Cita
  #5  
Antiguo 07-02-2011
Tcmn Tcmn is offline
Miembro
 
Registrado: sep 2004
Posts: 152
Poder: 20
Tcmn Va por buen camino
Ok. Pense que yo estaba mal en alguna configuracion de los IBX, y pues con eso de que tengo entendido que ya no se esta dando soporte a las actualizaciones de IBX para Firebird, creo que ya me tocara acostumbrar a trabajar asi, porque aparte busque en los foros, google, documentacion y no encontre nada relativo a esto.

Gracias
__________________
Salu2
Responder Con Cita
  #6  
Antiguo 07-02-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Más allá de que la práctica aconsejada por Casimiro es la que creo correcta y siempre utilizo, me quedé con la duda...
Probando, encuentro que las líneas de Tcmn, con Delphi 7 e Firebird 2.5 funcionan correctamente.

Mi primera prueba fué con un TIBDataSet y todo correcto, luego pensé que podría ser un problema del TIBTable, componente que no había usado hasta hoy. Pero no, con ambos componentes el código funciona bién.

Usé este código en la prueba:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  with IBDataSet1 do //IBTable1  do
  begin
    Insert;
    FieldByName('RAZON').AsString:= 'INSERTADO';
    FieldByName('CUIT').AsString:= '44444444444';
    FieldByName('DOMICILIO').AsString:= 'CCCCCCCCC';
    Post;
    ShowMessage(' ');
    Edit;
    FieldByName('RAZON').AsString:= 'MODIFICADO';
    FieldByName('CUIT').AsString:= '55555555555';
    FieldByName('DOMICILIO').AsString:= 'DDDDDDDDD';
    Post;
    IBTransaction1.CommitRetaining;
  end;
end;

Si el problema fueran los privilegios, Tcmn hubiera obtenido una excepción...

¿ Será debido a la versión de Delphi o Firebird ?


Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 07-02-2011 a las 21:04:56.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
No visualizo registros insertados por codigo j_flores3000 Conexión con bases de datos 5 23-11-2008 23:20:06
No guarda los registros Minio Conexión con bases de datos 2 25-02-2008 11:30:06
IBDataset no guarda datos mjjj SQL 3 10-01-2008 15:42:15
¿como Puedo Cancelar La Inserción De Los Últimos Registros "insertados" OscarBravo Tablas planas 1 23-07-2007 19:26:35
Por que No Guarda Paradox y antes si IcebergDelphi Tablas planas 6 25-01-2006 19:58:13


La franja horaria es GMT +2. Ahora son las 01:12: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
Copyright 1996-2007 Club Delphi