Ver Mensaje Individual
  #1  
Antiguo 25-06-2010
Jab Jab is offline
Miembro
 
Registrado: feb 2008
Posts: 83
Reputación: 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