Pasando de ODBC a ADO usando Postgres
Publicado: Dom Jun 02, 2013 9:15 am
He ido sorteando algunas cuestiones que tienen que ver con el tipo y/o
formato de dato devuelto, en ADO las fechas casi siempre son Date pero
vienen con la hora vacía pegada al final 02-06-2013 00:00:00 y lo
informa como date, pero bueno esto no es tan problemático.
Con algunos campos numéricos grandes también he tenido problemas para
ahí va queriendo.
Con algunos campos char(20) y que no tienen un valor cargado (están en
NULL) el QueryArray no les puede definir un tipo de dato, los deja tipo
"U" y eso me genera otros inconvenientes sobre todo cuando desde las
propiedades de las clases quiero editar o retomar un dato cargado.
Pero lo mas loco que noto es que al hacer algunas consultas anda muy
rápido y en otras extremadamente lerdo como por ejemplo en esta que
muestra un browse con los articulos.
"SELECT art.descripcion, med.presentacion, art.codigo,
lab.descripcion as labo, art.idarticulo, "+;
" art.codigobarra ,dro.descripcion AS droga,
estreg.descripcion AS desc_estreg, "+;
" acc.descripcion AS accion, art.stk_actual, "+;
" (lpdeta.preciounitario *
(1+ali.porcentaje/100))::numeric(12,2) as precioconIVA, "+;
" tama.descripcion AS tamano, med.idsld_medicamento "+;
"FROM articulos art "+;
" left join sld_medicamentos med on art.idarticulo =
med.idarticulo "+;
" left join estadoregistros estreg on art.idestadoregistro
= estreg.idestadoregistro "+;
" left join sld_tamanos tama on tama.idsld_tamano =
med.idsld_tamano "+;
" left join sld_laboratorios lab on lab.idsld_laboratorio
= med.idsld_laboratorio "+;
" left join sld_drogas dro on med.idsld_droga =
dro.idsld_droga "+;
" left join sld_acciones acc on med.idsld_accion =
acc.idsld_accion "+;
" left join tiposalicuota tali on art.idtipoalicuota =
tali.idtipoalicuota "+;
" left join alicuotas ali on ali.idtipoalicuota =
tali.idtipoalicuota "+;
" left join listaspreciosdetalle as lpdeta on
lpdeta.idarticulo = art.idarticulo "
Estoy usando Query(), es correcto? no me dá error solo que es muy lento,
la tabla articulos tiene 50000 registros, le puse limit pero me estará
trayendo toda la tabla? hay que hacer algo especial o distinto a ODBC
con respecto a limit o alguna propiedad de TADODataSet cuando se crea la
conexión.
En las grillas usamos un Browse modificado, estaremos haciendo macana
ahí, aunque con ODBC anda de pelos, lo adjunto por las dudas.
Cualquier ayuda será bienvenida. Muchas gracias.
--
formato de dato devuelto, en ADO las fechas casi siempre son Date pero
vienen con la hora vacía pegada al final 02-06-2013 00:00:00 y lo
informa como date, pero bueno esto no es tan problemático.
Con algunos campos numéricos grandes también he tenido problemas para
ahí va queriendo.
Con algunos campos char(20) y que no tienen un valor cargado (están en
NULL) el QueryArray no les puede definir un tipo de dato, los deja tipo
"U" y eso me genera otros inconvenientes sobre todo cuando desde las
propiedades de las clases quiero editar o retomar un dato cargado.
Pero lo mas loco que noto es que al hacer algunas consultas anda muy
rápido y en otras extremadamente lerdo como por ejemplo en esta que
muestra un browse con los articulos.
"SELECT art.descripcion, med.presentacion, art.codigo,
lab.descripcion as labo, art.idarticulo, "+;
" art.codigobarra ,dro.descripcion AS droga,
estreg.descripcion AS desc_estreg, "+;
" acc.descripcion AS accion, art.stk_actual, "+;
" (lpdeta.preciounitario *
(1+ali.porcentaje/100))::numeric(12,2) as precioconIVA, "+;
" tama.descripcion AS tamano, med.idsld_medicamento "+;
"FROM articulos art "+;
" left join sld_medicamentos med on art.idarticulo =
med.idarticulo "+;
" left join estadoregistros estreg on art.idestadoregistro
= estreg.idestadoregistro "+;
" left join sld_tamanos tama on tama.idsld_tamano =
med.idsld_tamano "+;
" left join sld_laboratorios lab on lab.idsld_laboratorio
= med.idsld_laboratorio "+;
" left join sld_drogas dro on med.idsld_droga =
dro.idsld_droga "+;
" left join sld_acciones acc on med.idsld_accion =
acc.idsld_accion "+;
" left join tiposalicuota tali on art.idtipoalicuota =
tali.idtipoalicuota "+;
" left join alicuotas ali on ali.idtipoalicuota =
tali.idtipoalicuota "+;
" left join listaspreciosdetalle as lpdeta on
lpdeta.idarticulo = art.idarticulo "
Estoy usando Query(), es correcto? no me dá error solo que es muy lento,
la tabla articulos tiene 50000 registros, le puse limit pero me estará
trayendo toda la tabla? hay que hacer algo especial o distinto a ODBC
con respecto a limit o alguna propiedad de TADODataSet cuando se crea la
conexión.
En las grillas usamos un Browse modificado, estaremos haciendo macana
ahí, aunque con ODBC anda de pelos, lo adjunto por las dudas.
Cualquier ayuda será bienvenida. Muchas gracias.
--