FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Tipo de tablas en ZEOS: ¿TZQuery o TZTable?
Hola.
Hace poco he tenido que modificar la capa de acceso a datos de una aplicación, he pasado de Firebird a MySQL. En principio todo ha ido bien, pero el problema ha empezado al pasar las tablas de tipo TIBDataset a TZQuery con TZUpdateSQL como objeto para actualizar los datos. La versión que manejo de Zeos es la 6.6.6. En principio, para las tablas pequeñas con pocos campos y pocos registros, tablas del tipo TZTable van bien, sin problemas. He cambiado del objeto TIBTable directamente, ahora bien, con la otra me surgen dos cosas. El primer error ha sido que en la rutina de inserción o modificación SQL que se pone en el propio objeto TZUpdateSQL, las Zeos añaden como parámetros los campos de localización del Where. Por ejemplo Código:
update tbdatos set APELLIDO1= ?APELLIDO1, APELLIDO2= ?APELLIDO2, CENTRO= ?CENTRO, COD_POSTAL= ?COD_POSTAL, DIRECCION= ?DIRECCION, DNI= ?DNI, FECHA_ALTA= ?FECHA_ALTA, FECHA_NAC= ?FECHA_NAC, where dni=?old_dni and centro=?old_centro Código:
TQueryTb.Params.ParamValues['centro']:=bd.TbCENTRO.Value; TQueryTb.Params.ParamValues['dni']:=bd.TbDNI.Value; He comprobado en el TZConnection que el AutoCommit está a True pero aún poniéndolo a False y guardando los datos con Commit a nivel de código, la información no se guarda. La consulta no produce error porque ya en Interbase iba bien. Mi duda es, dado que el objeto TZTable no me da ningún fallo si cambiar a este objeto será mejor que usar el TZQuery con TZUpdateSQL como objeto para actualizar los datos. Lo malo que he leído que el TZTable con millones de registros no va bien, y claro, dentro de las bases que manejo, hay con medio millón pero hay alguna con 2 ó 3 millones de registros y no quiero que todo vaya tan lento que no se pueda trabajar. Gracias de antemano, a ver si alguien con más experiencia en este componente me puede echar una mano, seguramente sea una tontería pero no la encuentro. Saludos Última edición por Jab fecha: 25-06-2010 a las 18:03:35. |
#2
|
||||
|
||||
En principio sólo se me ocurre preguntar una cosa: Un proyecto que está funcionando y que tiene tablas con millones de registros... ¿por qué lo cambias de firebird a mysql?
|
#3
|
||||
|
||||
La version 6.6.6. de Zeos tiene algunos bugs. Por ahí publiqué algún hilo mencionándolo. Por otro lado TZtable es un TZQuery con un SQL tipo "select * from table" por lo que no vale la pena usarlo mas que para tablas de unos cuantos registros.
Se me hace un poco raro la forma como manejas los parámetros porque Zeos usa ":" en lugar de "?" para indicarlos. El TZUpdateSQL solo se utiliza cuando el query original es multitabla, de lo contrario puedes editar directamente los datos del query, Zeos se encarga de lo demás. Creo que el erro es la forma en como estás indicando los parámetros.
__________________
AKA "El animalito" ||Cordobés a mucha honra|| |
#4
|
||||
|
||||
¿Entonces para qué sirve la propiedad "SQL" del ZQuery?, ¿en zeos qué componente es un Query "normal"?
|
#5
|
|||
|
|||
Como le haces al guardar??, le das un Applyupdate al finalizar todas las inserciones??
verifica la propiedad TransactIsolationLevel del tzconnection a lo mejor x ahi puede star l problema. |
#6
|
|||
|
|||
el TzQuery es un Query normal, con el puedes hacer cualquier consulta, edicion, actualizacion,iniciar transacciones, etc.
|
#7
|
||||
|
||||
Casimiro: EL TZtable es como si fuera un TZQuery en donde la propiedad SQL tiene "select * from tabla".
Con un TZQuery (y tambien TZTable) puedes poner lo mismo y utilizar las funciones Edit, Insert, Post y Cancel.
__________________
AKA "El animalito" ||Cordobés a mucha honra|| |
#8
|
|||
|
|||
Hola,
Casimiro: se quiere cambiar a MySQL porque quieren verlo también en un sistema Web sin usar aplicaciones instaladas en un ordenador, por lo que hay que recurrir a PHP vs MySQL, que eso es la 2ª parte. AzidRain: uso "?" en vez de ":" porque venían de los anteriores objetos. Gamael: No lo tenía aplicado, después del Post no tenía puesto nada más, salvo la habitual captura con Try Except. Como soy nuevo usando las Zeos entiendo que será como un "commit" en Interbase/Firebird. He probado a eliminar el objeto TZUpdateSQL y ha añadirle el ApplyUpdate como me han dicho AzidRain y Gamael y ahora funciona perfectamente. Me queda la duda de si lo he hecho correctamente, de si para las tablas que tienen millones de registros hago bien en usar el TZQuery y para las de pocos registros el TZTable. Creo que sí por lo que he leído en alguna ocasión, pero os lo digo de memoria y no lo sé con cierta seguridad. ¡Muchas gracias! |
#9
|
||||
|
||||
Es que para eso no hace falta poner mysql, puedes seguir tranquilamente con firebird.
|
#10
|
||||
|
||||
Jejeje Casimiro...ya sabía que eso ibas a responder. Y tienes razón pero bueno, el amigo lo quiere hacer en MySQL no tiene nada de malo.
Amigo Jab: Si tu consulta te va a traer miles o millones de registros hay que usar un query ya que ahi puedes filtrar una parte de esos millones de registros. Las TZtables te ahorran tener que escribir el query completo pero solo para tablas con pocos registros y pocos campos, por ejemplo, las famosas tablas de referencia tipo "clave-valor".
__________________
AKA "El animalito" ||Cordobés a mucha honra|| |
#11
|
||||
|
||||
No, si a mí me da igual que cada uno use lo que quiera, pero no me digas que es "raro" el tener un sistema funcionando bien y ahora darse el trabajo y los problemas que trae el cambiar a otra cosa que no es mejor que lo que tiene.
|
#12
|
|||
|
|||
Cita:
Lo malo, es que no sé si habrá salvedad para aplicarle luego un servidor SSL (supongo que no habrá problemas). Luego surge el problema del hosting, si es una dirección tipo www.clubdelphi.com no creo que sea tan sencillo como copiar la base y usarlo ya que no puedo acceder al fichero PHP.ini del servidor, es un hosting compartido. En el caso de ser un ordenador con PHP, MySQL sí que lo permite... Ahora ya he terminado de modificar la capa de acceso a datos con MySQL, pero me queda la duda de tirarlo todo abajo o terminarlo de depurar para poder tener acceso a otros sistemas con MySQL o bien que otros sistemas accedan a este tipo de base de datos... Última edición por Jab fecha: 02-07-2010 a las 14:39:34. |
#13
|
||||
|
||||
Bueno, aclaremos algunas cosas:
En tu pregunta inicial sólo indicas que habías cambiado firebird por mysql, no dices nada de servidor web. Ahora al final hablas de interbase y firebird, además comentas algo de la "menor elasticidad" de firebird. Si vas a usar firebird en un servidor web, obviamente debes instalarlo, como cualquier servidor de bases de datos sql. Si vas a usar un hosting "normal" es difícil encontrar uno que tengan firebird, aunque los hay, porque no se complican la vida y montan mysql que es la costumbre, aunque no sé por qué. Si pagas un servidor vpn puedes instalar lo que quieras y lo mismo si montas un servidor propio, evidentemente. Otra cosa, las versiones de firebird (o interbase) deben ser las mismas para todos, no montes un servidor firebird 2.1 y los clientes con firebird 1.0 ni con interbase 6.0, por decir alguno. Ahora bien, si el programa va a ser del tipo web, o sea, que vas a acceder mediante un navegador de internet (firefox, opera, etc.) entonces sólo necesitas el firebird en el servidor, los clientes no necesitan nada. Y para terminar, ¿interbase más "elástico" que firebird?, interbase (salvo la versión 6 de hace 11 años) es propietario, cerrado y de pago. Firebird es abierto, libre y gratis, puedes acceder a su código fuente, tiene más versiones (no he visto las últimas de interbase), pero versiones específicas no sólo para distintos sistemas, también para 32 ó 64 bits, además de las superserver, classicserver, superclassic, etc. Resumiendo, firebird es muchísimo más "elástico" que interbase. Pero, todo lo dicho no sirve de nada si necesitas mysql, instalas mysql y punto, todo lo demás sobra |
#14
|
|||
|
|||
Casimiro, estaba editando mi mensaje cuando estabas respondiendo, porque he probado a conectar el PHP con Firebird.
Estoy completamente de acuerdo contigo en todo lo que me comentas, cuando dije elástico empleé mal el adjetivo ya que me refiero a que tengo un desarrollo donde intervinieron más personas y algunos hacían mal las consultas SQL con instrucciones donde en el group by por ejemplo usan el nombre de la tabla mientras que en el select ya han "renombrado" la tabla, por ejemplo NOMBRES N, donde NOMBRES ahora se llama N, Interbase admite el error, algo leí en su día donde explicaban el por qué, Firebird no lo admite y da un error. Sobre servidores Web es cierto, implantan MySQL y punto, como no tengo acceso al PHP.INI no puedo utilizar las rutinas en PHP para Interbase y Firebird. Eso sí, si el ordenador donde está la base Firebird tiene IP Fija dará igual porque ahí si se puede modificar el fichero PHP.INI y sí poder utilizar el acceso que antes comentabas. En el caso del servidor Web por lo que acabo de leer no es necesario instalar el motor de Firebird para acceder a la base de firebird, con tan solo descomentar la línea que da acceso a usar el firebird en el PHP.INI es válido... aunque igual estoy equivocado, si es así corrígeme. Bueno, pues muchas gracias, me has solventado un problema y creado otro, jaja, porque ahora debo meditar si tirar abajo lo que he cambiado o continuar... Creo que para pruebas mejor hacerlas con gaseosa, así que seguiré con Firebird y ya el acceso PHP lo cambiaré para poder acceder a la base en modo local... Espero que luego poniendo la IP sirva, en teoría sí porque es el servidor donde esté alojada la base el que devuelva el Script de PHP al navegador del que accede... Repito, MUCHAS GRACIAS a ti y a los que han participado en el hilo. Y dejo esto por si alguien le sucede algo parecido pueda optar por diferentes soluciones. Yo ni me había planteado lo del PHP vs Firebird... |
#15
|
||||
|
||||
Aun cuando la base esté instalada en un servidor distinto al servidor web, necesitas que el servidor web tenga habilitada la extensión de Interbase/Firebird para PHP; de otro modo, no podrás acceder a los datos.
// Saludos |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Uso de TZQuery y TZUpdateSQL | jrperezt | MySQL | 4 | 03-02-2009 18:14:09 |
Problemas Con El Clientdataset Y Tztable | foxito | Conexión con bases de datos | 4 | 24-11-2008 17:38:37 |
Experiencia personal: TZtable + ZStoredProc (Zeos) + Generators (Firebird 2.1) | juanblack | Firebird e Interbase | 3 | 18-06-2008 16:36:21 |
ExecSQL en TZTable | david_uh | Varios | 1 | 20-06-2007 01:22:43 |
¿ Limit en TZTable de los Zeos ? | against | Conexión con bases de datos | 2 | 26-09-2006 16:36:24 |
|