Re: Problemas con ADODB y Postgres

From: Gabriel Colina <colina_movil(at)yahoo(dot)com>
To: Paulina Quezada <paulina(dot)quezada(at)gmail(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Problemas con ADODB y Postgres
Date: 2007-03-03 00:22:52
Message-ID: 85915.62922.qm@web34707.mail.mud.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda


--- Paulina Quezada <paulina(dot)quezada(at)gmail(dot)com>
escribió:

> Hola:
>
> Tengo mi aplicación en visual basic 6.0 usando ADODB
> para interactuar con la
> base de datos, el problema es que mis consultas en
> postgres usando el
> PGadmin tienen un tiempo de respuesta satisfactorio
> o casi inmediato, pero
> al abrir el recordset se demora varios segundos.
>
> dim rec_um as adodb.recordset
>
> s_sql = "select ttc.color_ttc from
> abastecimientomp.temporada_cosecha as
> tc," _
> &
> "abastecimientomp.tipo_temporada_cosecha As ttc
> where
> tc.id_ins = " _
> & s_insumo + " and extract(month from
> timestamp '" _
> & s_fechaActual + "') between
> tc.mes_ini_tco and mes_fin_tco and
> " _
> & "tc.id_ttc = ttc.id_ttc;"
>
> rec_um.Open s_sql, ConexionBD, adOpenStatic,
> adLockOptimistic
> (esta sentencia es la que se demora varios segundos,
> y no es solo con esa
> sentencia SQL sino con todas)
>
> EStoy usando Postgres 8.2.1, y la cadena de conexión
> que uso es esta:
>
> s_cadenaConexion = "Provider=MSDASQL.1;Persist
> Security Info=False;" _
> & "User ID=" + s_usuario + ";" _
> & "Extended
> Properties='DSN=PostgreSQL;" _
> & "DATABASE=" + s_base + ";" _
> & "SERVER=" + s_servidor +
> ";PORT=5432;" _
> & "UID=" + s_usuario + ";" _
> & "PWD=" + s_password + ";" _
> &
>
"ReadOnly=0;Protocol=6.4;FakeOidIndex=0;ShowOidColumn=0;"
> _
> &
>
"RowVersioning=0;ShowSystemTables=0;ConnSettings=;Fetch=100;"
> _
> &
> "Socket=8192;UnknownSizes=0;MaxVarcharSize=254;" _
> &
>
"MaxLongVarcharSize=8190;Debug=0;CommLog=0;Optimizer=1;"
> _
> &
> "Ksqo=1;UseDeclareFetch=0;TextAsLongVarchar=1;" _
> &
> "UnknownsAsLongVarchar=0;BoolsAsChar=1;Parse=0;" _
> &
> "CancelAsFreeStmt=0;ExtraSysTablePrefixes=dd_;;" _
> &
>
"LFConversion=1;UpdatableCursors=0;DisallowPremature=0;"
> _
> &
>
"TrueIsMinus1=0;BI=0;ByteaAsLongVarBinary=0;UseServerSidePrepare=0;"
> _
> & "LowerCaseIdentifier=0'"
>
>
> If (ConexionBD.State = adStateOpen) Then
> ConexionBD.Close
>
> ConexionBD.ConnectionString = s_cadenaConexion
>
> ConexionBD.Open
>
> Else
>
> ConexionBD.ConnectionString = s_cadenaConexion
>
> ConexionBD.Open
> End If
>
> Alguien me podría ayudar en si existe algún problema
> en la conexión o por
> qué se puede producir el problema?
>
> Muchas gracias!
>
> Paulina Q.
>

Haceme un favor, create una consulta en postgres

create view abastecimientomp.cabastecimiento_cosecha
as
select ttc.color_ttc from
abastecimientomp.temporada_cosecha as
tc abastecimientomp.tipo_temporada_cosecha As ttc

Conectate con ella por ejemplo desde un
dataenvairoment o desde un adodatacontrol a traves del
DSN, no de una cadena.

Pero si aun te animas a mas

CREATE OR REPLACE FUNCTION
abastecimientomp.fnc_cabastecimiento_cosecha (ninsumo
int, dfecha date, hfecha date) RETURNS SETOF double
precision AS
$body$
select * abastecimientomp.cabastecimiento_cosecha from

*/esta construccion de where es a mode de ejemplo

where id_insumo= $1 and fecha >= $2 and fecha <= $3)

$body$
LANGUAGE 'sql' VOLATILE RETURNS NULL ON NULL INPUT
SECURITY INVOKER;

Esta funcion la invocas asi desde el dataenviroment
en agregar comando

o desde un adodatacontrol

select * from
abastecimientomp.fnc_cabastecimiento_cosecha(0,'2000-01-01','2007-01-01')

Ahora te muestro como mostrar los resultados en una
grilla, esto para mi en consultas que involucran
varios join me anda como un rifle.

Con dataenviroment

If
DtaSysFunc.rsabastecimientomp.fnc_cabastecimiento_cosecha.State
= 1 Then
DtaSysFunc.rsabastecimientomp.fnc_cabastecimiento_cosecha.Close

DtaSysFunc.rsabastecimientomp.fnc_cabastecimiento_cosecha.Source
= "select * from central.fnc_ficha_articulo(" &
val(txtinsumo.text) & "," & dfecha & "'" & hfecha &
")"
DtaSysFunc.rsabastecimientomp.fnc_cabastecimiento_cosecha.Open
DataGridAbasCose.DataMember =
"abastecimientomp_fnc_cabastecimiento_cosecha"
normalmente lo cierro aqui
pero podes hacerlo mas adelante

ahora con adodatacontrol

AdoAbas_Cos.RecordSource = "select * from
central.fnc_ficha_articulo(" & val(txtinsumo.text) &
"," & dfecha & "'" & hfecha & ")"
AdoArticulos_Precios.Refresh

Listo, ahi todos los controles enlazados, grillas,
text dtpick o lo que quieras te mostraran el
resultado.
Trabajes con la consulta o con la funcion

Mi experiencia con mssql y Ahora con POSTGRESQL me
dicta que conectando asi de paso por odbc, mas alla de
los manuales, logro mayor rendimiento que con la
conexion de tu ejemplo, eso siempre y cuando el plan
de las consultas sea bueno.

Tambien se que la misma base de datos y consultas,
bajos las mismas condiciones aun en servidores windows
postgresql despues de la version 8.2 y ahora con 8.2.3
y el odbc actualizado a la version
psqlodbc-08_02_0200, supera el rendimiento que puedan
tener en MSSQL.

A esto apuesto a ciegas.

Atte. Gabriel Colina

__________________________________________________
Correo Yahoo!
Espacio para todos tus mensajes, antivirus y antispam ¡gratis!
Regístrate ya - http://correo.espanol.yahoo.com/

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Henry 2007-03-03 05:04:54 RE: Problemas con ADODB y Postgres
Previous Message Paulina Quezada 2007-03-02 22:59:19 Problemas con ADODB y Postgres