FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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: 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:
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. |
#2
|
||||
|
||||
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:
|
#3
|
|||
|
|||
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:
Cita:
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. |
#4
|
||||
|
||||
Si usas el try except se realiza la modificacion?
|
#5
|
||||
|
||||
Por curiosidad, trabajando con FieldByName ocurre lo mismo??
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" |
#6
|
|||
|
|||
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:
Con fieldByName ocurre lo mismo. |
#7
|
||||
|
||||
acá sí quede desconcertado... Eso parece más un bug del componente, yo trabajo con firebird y ese error no me ocurre con componentes IBX, ADO o DBX... O hay algo mal en el query ModifySQL (o como se llame en este componente) del ZUbdateSQL.
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H" |
#8
|
||||
|
||||
"unexpected end of command..." es un error que ocurre cuando no se cierra bien una comilla simple o cuando no se cierra un parentesis.. puedes poner todos los querys que usas?
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H" |
#9
|
|||
|
|||
En las imagenes se muestra el ejemplo que hice, es de lo mas sencillo posible solo para mostrar el error:
1 ZConnection 1 ZQuery 1 Datasource En la propiedad SQL del ZQuery puse: SELECT * FROM MESAS y en el OnClick del boton: Código:
ZQuery1.Open; ZQuery1.Edit; ZQuery1CODIGO.Value := Edit1.Text; ZQuery1.Post; |
#10
|
||||
|
||||
Si los zeos trabajan como cualquier otro componente, deberías tener todas las setencias sql: select, insert, update, delete y refresh
Echa un vistazo a este minitutorial, está hecho para IBX, pero para el caso es lo mismo. |
#11
|
||||
|
||||
Estoy con Casimiro, además de la sentencia SQL para el SELECT, probablemente deberás tener también que especificar las sentencias UPDATE, INSERT, DELETE, ...
Está claro que el error puede ser perfectamente ese, puesto que dice que no se envía una sentencia SQL válida. Algunos componentes no trabajan así (como los dbExpress conectados a ClientDatasets, que son los que utilizo habitualmente). En ese caso hay que comprobar que el DatasetProvider pueda identificar el nombre de la tabla a modificar y el de su clave primaria. Pero vamos, que dudo que Zeos trabaje así, con lo que lo primero es verificar lo que dice Casimiro. Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#12
|
|||
|
|||
Muchas gracias por responder! es decir que con los componentes ZEOS no es correcto realizar las actualizaciones de la siguiente manera?
Código:
ZQuery.open; ZQuery. Edit; .... ZQuery.Post; Puede ocacionar algun problema en el futuro hacerlo asi?: Código:
ZQuery.open; try begin ZQuery. Edit; .... ZQuery.Post; end; except ZQuery.Cancel; end; |
#13
|
||||
|
||||
Sí puedes hacer "edit -> post", pero debes tener las sentencias sql.
¿Has visto el tutorial que te aconsejé?, ahí viene explicado muy sencillamente, verás que es facilito hacerlo. |
#14
|
|||
|
|||
Casimiro! Vi el minituto hace como un mes, y ahora lo volvi a revisar, pero no encuentro en que parte hace la actualizacion. El tutorial muestra como loguearse en un sistema. No entiendo eso de que debo tener las sentencias SQL. Porque necesito las sentencias SQL si las actualizaciones las realizo con
Query.Open; Query.Edit; Estoy muy confundido en eso de necesitar las sentencias. |
#15
|
||||
|
||||
Para empezar ¿qué componente usas?.
Si usas un query, este tiene distintos apartados, para el select, para el insert, el delete, el update y el refresh. Si solamente has puesto "select * from latabla" en el select, si haces una modificación y un post entonces salta el "update", y si no has escrito nada en el update... pues... error, evidentemente, no hay sentencia. Pero esto es más difícil explicarlo que entenderlo si ves un ejemplo, mira el tutorial que te he comentado. Si usas un componente "tabla", como el "ztable" (creo que se llama), este componente tiene todas las sentencias ya incorporadas/declaradas: select, insert, update, delete y refresh. Por eso no necesitas escribirlas tú, porque ya están. Pero, claro, un componente "tabla" no es lo más adecuado para un sistema cliente/servidor funcionando con sql. |
#16
|
|||
|
|||
Casimiro:
Uso los ZEOS por eso puse la Z antes de Query: ZQuery, tal vez no fui claro. No utilizo Tables. Vi el tutorial que me has comentado, y no vi en ninguna parte algun insert o update, solo Select. Cita:
Cita:
Es toda la informacion sensible que encontre en el tutorial. NO hay nada acerca de Inserts y Updates... por eso no entiendo que parte del tutorial es la que tengo que ver |
#17
|
|||
|
|||
Bueno gracias a todos por las respuestas, ya lo resolvi utilizando sentencias SQL. No queria hacerlo de esa manera ya que significaba cambiar muuuucho codigo en el sistema, pero bueno, mejor hacer las cosas bien. Se redujo a mas de la mitad mi codigo!!! . Durante estos dias voy a hacer un mini tuto de insert y update con zeos y firebird. Aunque se que hay mucha info, en ningun lado lo vi bien explicado.
Casimiro!: puedo agregar ese tuto en el hilo http://www.clubdelphi.com/foros/showthread.php?t=68708 de caral? o recomiendas que haga uno nuevo? Saludos y gracias por su tiempo! |
#18
|
||||
|
||||
Vaya, estuve todo el rato indicándote un tutorial que no correspondía
Era este el que quería que vieras, donde se explica cómo crear automáticamente los distintos sqls. |
#19
|
||||
|
||||
Cita:
|
|
|
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 |
|