Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-06-2010
Jab Jab is offline
Miembro
 
Registrado: feb 2008
Posts: 83
Poder: 0
Jab cantidad desconocida en este momento
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
Es entonces donde genera dos parámetros "dni" y "centro", que los objetos TIBdataset no generan, por ello para evitar el error "El número de parámetros tipo Input es menor del esperado" que me aparecía, genero en el evento OnBeforePost de la tabla TZQuery

Código:
TQueryTb.Params.ParamValues['centro']:=bd.TbCENTRO.Value;
TQueryTb.Params.ParamValues['dni']:=bd.TbDNI.Value;
Y entonces el error no se da, pero aunque aparentemente los datos los guarda, en cuanto salgo de la tabla y vuelvo a abrirla no se ha guardado ningún dato.

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.
Responder Con Cita
  #2  
Antiguo 25-06-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
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?
Responder Con Cita
  #3  
Antiguo 25-06-2010
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
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||
Responder Con Cita
  #4  
Antiguo 26-06-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 AzidRain Ver Mensaje
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.[..]
¿Entonces para qué sirve la propiedad "SQL" del ZQuery?, ¿en zeos qué componente es un Query "normal"?
Responder Con Cita
  #5  
Antiguo 26-06-2010
Gamael Hdez Gamael Hdez is offline
Miembro
 
Registrado: mar 2010
Ubicación: Cd Carmen, Campeche
Posts: 10
Poder: 0
Gamael Hdez Va por buen camino
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.
Responder Con Cita
  #6  
Antiguo 26-06-2010
Gamael Hdez Gamael Hdez is offline
Miembro
 
Registrado: mar 2010
Ubicación: Cd Carmen, Campeche
Posts: 10
Poder: 0
Gamael Hdez Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
¿Entonces para qué sirve la propiedad "SQL" del ZQuery?, ¿en zeos qué componente es un Query "normal"?
el TzQuery es un Query normal, con el puedes hacer cualquier consulta, edicion, actualizacion,iniciar transacciones, etc.
Responder Con Cita
  #7  
Antiguo 26-06-2010
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
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||
Responder Con Cita
  #8  
Antiguo 28-06-2010
Jab Jab is offline
Miembro
 
Registrado: feb 2008
Posts: 83
Poder: 0
Jab cantidad desconocida en este momento
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!
Responder Con Cita
  #9  
Antiguo 28-06-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 Jab Ver Mensaje
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.
Es que para eso no hace falta poner mysql, puedes seguir tranquilamente con firebird.
Responder Con Cita
  #10  
Antiguo 29-06-2010
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
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||
Responder Con Cita
  #11  
Antiguo 30-06-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 AzidRain Ver Mensaje
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.
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.
Responder Con Cita
  #12  
Antiguo 02-07-2010
Jab Jab is offline
Miembro
 
Registrado: feb 2008
Posts: 83
Poder: 0
Jab cantidad desconocida en este momento
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Es que para eso no hace falta poner mysql, puedes seguir tranquilamente con firebird.
Acabo de hacer pruebas y funciona con Interbase/Firebird y PHP, en su día había probado pero hace 2 ó 3 años... ejem, ejem, MUCHAS GRACIAS CASIMIRO.

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.
Responder Con Cita
  #13  
Antiguo 02-07-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
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
Responder Con Cita
  #14  
Antiguo 02-07-2010
Jab Jab is offline
Miembro
 
Registrado: feb 2008
Posts: 83
Poder: 0
Jab cantidad desconocida en este momento
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...
Responder Con Cita
  #15  
Antiguo 02-07-2010
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
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
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


La franja horaria es GMT +2. Ahora son las 03:25:20.


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