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 10-10-2010
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
Firebird / IBDataSet: no modifica

Hola.

Después de haber agotado todas las pruebas y buscado sin encontrar respuesta, los vengo a molestar...
Me sucede algo extraño al querer modificar una columna con TIBDataSet,tanto con Firebird 2.1 como con 2.5.
Instalé este último por haber leído que solucionaba algunos problemas que el anterior tenía con IBX.

La declaración SQL es:
Código SQL [-]
  ANULADO SMALLINT DEFAULT 0 NOT NULL
El nombre del IBDataSet es tbRef y el campo almacena el valor cero o uno, cuando es igual a uno, el registro
se considera anulado.

El problema es que estando ya asignado el valor uno en el campo, no aplica la modificación.

Ya verifiqué que tbMaster, tbDetalle y tbRef entran al código que adjunto con State = dsEdit,
y tbRefANULADO.Value = 1.

La transacción:
Cita:
readcommitted
rec_version
nowait

Pongo el código donde debería efectuarse la modificación:
Código Delphi [-]
procedure TfrMasterMod.btAceptaClick(Sender: TObject);
begin
  if MessageBox(Handle,'¿Desea aplicar los cambios?','CONSULTA', MB_YESNO +
     MB_ICONQUESTION + MB_DEFBUTTON1 + MB_APPLMODAL) = mrYes then
  begin
    ShowMessage(tbRefANULADO.AsString); (* valor mostrado: 1 *)
    if tbRef.State = dsEdit then
      tbRef.Post;
    tbDetalle.DataSource:= nil;   
    IBDatabase.ApplyUpdates([tbMaster, tbDetalle]);
    tbDetalle.DataSource:= dsMaster;
    IBTransaction.CommitRetaining;
    ShowMessage(tbRefANULADO.AsString); (* valor mostrado: 1 *)
    Close; 
  end;
end;

Cuando salgo de la aplicación y compruebo el valor de tbRefANUALDO, es igual a 0, es decir que no modificó el valor,
lo cuál es extraño por que muestra el valor 1 antes y después del CommitRetaining...
Sin embargo las modificaciones echas en tbMaestro o tbDetalle se efectúan sin problema.

No sé si atribuirlo a que tbMaestro/tbDetalle usan CachedUpdates (aunque no veo por que daría problemas),
o que haya algún problema con Firebird y los componentes IBX...

Si hay alguién a quién le haya sucedido lo mismo o pueda sugerirme algo, lo agradecería mucho.

Desde ya gracias por tomarse el tiempo de leer estas líneas.

Saludos.

Última edición por ecfisa fecha: 10-10-2010 a las 11:05:35.
Responder Con Cita
  #2  
Antiguo 10-10-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por ecfisa Ver Mensaje
El nombre del IBDataSet es tbRef
State = dsEdit
tbRefANULADO.Value = 1
Código Delphi [-]
procedure TfrMasterMod.btAceptaClick(Sender: TObject);
begin
//  if MessageBox(Handle,'¿Desea aplicar los cambios?','CONSULTA', MB_YESNO +
//     MB_ICONQUESTION + MB_DEFBUTTON1 + MB_APPLMODAL) = mrYes then
//  begin
//    ShowMessage(tbRefANULADO.AsString); (* valor mostrado: 1 *)
//    if tbRef.State = dsEdit then 
  tbRef.Post;
//    tbDetalle.DataSource:= nil;
//    IBDatabase.ApplyUpdates([tbMaster, tbDetalle]);
//    tbDetalle.DataSource:= dsMaster;
  IBTransaction.CommitRetaining;
//    ShowMessage(tbRefANULADO.AsString); (* valor mostrado: 1 *)
//    Close;
//  end;
end;
No has puesto la sentencia SQL que ejecutas en el TIBDataset, suponiendo que esté bien, sólo debes hacer .post y .commit (o commitretaining).
¿Ese IBTransaction es de esa transacción?
Todo lo demás que has puesto no sirve para nada (para la grabación de ese tibdataset, se entiende)

Última edición por Casimiro Notevi fecha: 10-10-2010 a las 13:04:23.
Responder Con Cita
  #3  
Antiguo 10-10-2010
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 22
José Luis Garcí Va camino a la fama
ecfisa, una pregunta has cambiado algo en la estructura de tu tabla, si es así te has acordado de modificar el Ibdataset?.

Te lo comento porque tuve un problema parecido y era que modifique un campo y agregue otro pero en el ibdataset, no lo modifique y claro problemas al canto,
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #4  
Antiguo 11-10-2010
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 Casimirio, José Luís.

Casimiro:
Si es así, pero después de tanto probar, puse todas las líneas ante la impotencia de no poder solucionar lo evidente... Juro que revisé
hasta si había puesto unit con 'h'....
La sentencia de tbRef es:
Código Delphi [-]
   tbRef.SelectSQL.Text:= 'SELECT * FROM REFERENCIA where REFCLIENTE = :CLIENTE_ID';
Su propiedad DataSource es igual a dsClientes y el ID del cliente es el correcto al momento del Post.

Tambíen está en relación master/detail pero con CLIENTES:
Código SQL [-]
  ALTER TABLE REFERENCIA ADD FOREIGN KEY (REFCLIENTE) REFERENCES CLIENTES(CLIENTE_ID);


José Luís, hice modificaciónes y creo haber borrado las columnas y vuelto a incorporarlas... pero voy a probar nuevamente.

Gracias a ambos.

Última edición por ecfisa fecha: 11-10-2010 a las 00:35:00.
Responder Con Cita
  #5  
Antiguo 11-10-2010
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 de nuevo.

José Luís, indudablemente el árbol me tapó el bosque... era tál como sugeriste.
Por seguridad elimine el TIBDataSet , lo volví a configurar y ahora funciona bién.


Muchas gracias.

Saludos.
Responder Con Cita
  #6  
Antiguo 11-10-2010
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 22
José Luis Garcí Va camino a la fama
ecfisa, me alegro que te funcionase, me sonaba a lo mismo, pero la próxima vez no hace falta que borres el Ibdataset, sólo hace falta, que tengas cerrado el proyecto cunado modifiques las tablas, una vez terminas, abres el proyecto en delphi, te vas al Ibdataset en cuestión, pulsas encima de el con el botón derecho del ratón, elijes dtaset editor, elijes el/los campo/s en (key Fields), los campos que quieres que te actualice en (Update Fields), aquí deberia aparecerte ya los campos nuevos y modificados*, luego pulsas en (Quote indentifiers) y por último en el botón (Generate SQL) y listo.

* si aún de esta manera no aparecen puedes quitarle el active al Ibdatabase y volverlo activar, recuerda después poner en active todos los IbdataSet y ibtable, salvo que los actives por código.

Espero no haberme enrollado y no pecar de presuntuoso , ya que no quiero dar clases ni lecciones , sólo pretendo ayudar.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #7  
Antiguo 12-10-2010
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
No para nada, gracias José Luis.

Eso hice anteriormente con cambios en otros IBDataSet. Con este, pensé que lo había echo pero no... .
Creo que eliminarlo fue más una cuestión de revancha por el tiempo que me hizo renegar

Saludos y gracias nuevamente.

Última edición por ecfisa fecha: 12-10-2010 a las 03:14:44.
Responder Con Cita
  #8  
Antiguo 12-10-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por ecfisa Ver Mensaje
[..] Creo que eliminarlo fue más una cuestión de revancha por el tiempo que me hizo renegar[..]
TIBdataset, la revancha!!!
Responder Con Cita
  #9  
Antiguo 12-10-2010
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
Cita:
Empezado por Casimiro Notevi Ver Mensaje
TIBdataset, la revancha!!!
De película!!

Saludos.
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
Ejecucion:No modifica los campos de un Query (Delphi) sizne OOP 7 13-03-2010 17:24:31
Firebird: IBDataSet ó IBTable MichelH Firebird e Interbase 9 10-03-2009 04:53:56
Post, Crea o modifica? krilea Conexión con bases de datos 20 02-08-2006 17:55:53
IBDataset no modifica istradlin Conexión con bases de datos 2 19-04-2005 23:44:22
No me inserta un registro nuevo, me modifica el anterior vhirginia Conexión con bases de datos 10 11-05-2004 13:04:38


La franja horaria es GMT +2. Ahora son las 05:46:43.


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