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 14-03-2012
agustinbus agustinbus is offline
Miembro
 
Registrado: ago 2007
Posts: 44
Poder: 0
agustinbus Va por buen camino
Sugerencias para realizar una actualizacion de un registro en Firebird

Hola como estan! Queria pedirles opiniones al momento de realizar una actualizacion en firebird que es mas correcto.

Bueno el tema es que en MySql y firebird si utilizamos el siguiente codigo:
Código Delphi [-]
Query.Open;
Query.Edit;
QueryNOMBRE.Value := 'Valor';
QUery.Post;
y tenemos por ejemplo los siguiente valores en una tabla:

Nombre Apellido
Juan Rodriguez
Matiaz Fernandez
... ...
Maria Gimenez


Cuando ponemos en modo de edicion el Query e insertamos en un campo el MISMO valor que tenia antes nos arroja un error, es decir quiero modificar Juan Rodriguez y le vuelvo a poner de nombre y apellido Juan Rodriguez y automaticamente Firebird chilla.

Para ello yo lo soluciono de dos maneras pero no se cual es la adecuada.

La primera (mucho codigo) asigno en variables los valores que tenia y pregunto si cambio algun valor, en el caso de que cambio realizo el Query.Edit

La segunda (menos codigo) Utilizo try except de la siguiente forma:
Código Delphi [-]
Query.Open;
try
begin
Query.Edit;
QueryNOMBRE.Value := 'Valor';
QUery.Post;
end
except
Query.Cancel;
end;

Actualmente utilizo la primera forma, pero cuando una tabla tiene muchos campos mi codigo crece el doble al realizar las verificaciones para saber si se modifico un dato o no.
Bueno simplemente queria saber que forma es mas adecuada, o si es mejor utilizar alguna otra. Desde ya muchas gracias a todos!

Última edición por Casimiro Notevi fecha: 14-03-2012 a las 00:29:21.
Responder Con Cita
  #2  
Antiguo 14-03-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por agustinbus Ver Mensaje
automaticamente Firebird chilla.
Debo de estar sordo, jamás he oído chillar a firebird

Bromas aparte, no tiene sentido lo que dices, si actualizas un campo da igual lo que pusiera antes o después.

Yo lo suelo hacer todo en sql, por ejemplo:

Código SQL [-]
update latabla set nombre='Pedro' where codigo=1
Responder Con Cita
  #3  
Antiguo 14-03-2012
agustinbus agustinbus is offline
Miembro
 
Registrado: ago 2007
Posts: 44
Poder: 0
agustinbus Va por buen camino
Claro que si tiene sentido porque da error, mira dejo unas imagenes para que veas, hice un ejemplo rapido.
La primera imagen muestra que me posiciono en el registro con CODIGO = B10003
En el edit de abajo del dbgrid pongo el mismo codigo: B10003


La segunda y tercera imagen muestra que pasa al presionar el boton:




y luego de generarse el error, cada vez q me muevo por la grilla, (se genera el OnDataChange), me arroja el error. El codigo de toda la aplicacion es este:
Cita:
procedure TForm1.Button1Click(Sender: TObject);
begin
ZQuery1.Open;
ZQuery1.Edit;
ZQuery1CODIGO.Value := Edit1.Text;
ZQuery1.Post;

ZQuery1.Cancel;
end;
sin embargo si cambio el codigo por el siguiente:
Cita:
procedure TForm1.Button1Click(Sender: TObject);
begin
ZQuery1.Open;
try
begin
ZQuery1.Edit;
ZQuery1CODIGO.Value := Edit1.Text;
ZQuery1.Post;
end
except
ZQuery1.Cancel;
end;

end;
se soluciona.

Esete error es conocido en MySql y Firebird, pero si por ejemplo lo conecto a una base en Access no es necesario comprobar si se modifico algun dato porq no tira error.
Responder Con Cita
  #4  
Antiguo 14-03-2012
Avatar de Cañones
Cañones Cañones is offline
Miembro
 
Registrado: ene 2007
Ubicación: La Paz Entre Ríos
Posts: 354
Poder: 18
Cañones Va por buen camino
Si usas el try except se realiza la modificacion?
Responder Con Cita
  #5  
Antiguo 14-03-2012
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 21
RONPABLO Va por buen camino
Por curiosidad, trabajando con FieldByName ocurre lo mismo??

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  ZQuery1.Open;
  try
    begin
  ZQuery1.Edit;
  ZQuery1.FieldByName('CODIGO').Value := Edit1.Text;
  ZQuery1.Post;
    end
  except
  ZQuery1.Cancel;
  end;

end;

Respecto a Try como lo usas lo único que hace es capturar el error y no mostrarlo, por lo cual no se cumplirá el cambio pedido.
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H"
Responder Con Cita
  #6  
Antiguo 14-03-2012
agustinbus agustinbus is offline
Miembro
 
Registrado: ago 2007
Posts: 44
Poder: 0
agustinbus Va por buen camino
Cañones:
Si uso el try except se realiza el cambio solo si se cambio algun dato, que es lo q en definitiva queremos. pero si se ingresan los mismos datos que ya estan almacenados en el registro tira la excepcion

RONPABLO:
Cita:
Respecto a Try como lo usas lo único que hace es capturar el error y no mostrarlo, por lo cual no se cumplirá el cambio pedido
Exactamente, porq lo que quiero es que el error no se le muestre al usuario. Y si no se cambiaron los datos, no hace falta que se realice la modificacion asi que no influye.

Con fieldByName ocurre lo mismo.
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
Sugerencias para pasar XML a Tabla MaMu Varios 0 01-11-2008 01:41:33
web (PHP) + Firebird. Sugerencias y comentarios. Delphius PHP 1 11-06-2007 14:49:17
Sugerencias sobre un procesador P4 DUALCORE en firebird AGAG4 Firebird e Interbase 13 06-06-2007 21:20:33
Sugerencias para programa 3D... Er_Manué Varios 2 30-10-2006 15:05:22
Actualizacion de registro JorgeBec Conexión con bases de datos 8 22-11-2004 22:14:54


La franja horaria es GMT +2. Ahora son las 23:53:00.


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