Re: Refcursor + vb6 + oledb

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: "Jose J(dot) Ayala Pineda" <jayala(at)cromotex(dot)com(dot)pe>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Refcursor + vb6 + oledb
Date: 2009-04-30 18:25:38
Message-ID: 20090430182538.GA4227@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Jose J. Ayala Pineda escribió:

> Conn.BeginTrans
> Cmd.ActiveConnection = Conn
> Cmd.CommandText = "select
> kardexf('017033','01/04/2009','30/04/2009','data');FETCH ALL IN data;"
> Set Rst = Cmd.Execute
> Do Until Rst.EOF
> Me.List1.AddItem Rst.Fields(0) 'Rst!Movimiento
> Rst.MoveNext
> Loop
> Rst.Close
> Conn.CommitTrans

No entiendo el proposito de este codigo. No tiene sentido. Si uno abre
un cursor para una consulta, es para poder ir obteniendo los resultados
de a poco y desplegarlos sin tener que traerlos todos en memoria, pero
en el código de arriba los estás trayendo todos a memoria de todas
formas con el FETCH ALL. Si la cantidad de registros es mucha, creo que
deberías intentar algo así:

Conn.BeginTrans
Cmd.ActiveConnection = Conn
Cmd.CommandText = "select kardexf('017033','01/04/2009','30/04/2009','data');"
Set Rst = Cmd.Execute
Do Until Rst.EOF ' aca debes chequear el FETCH, pero no sé cómo
Cmd.CommandText = "FETCH 20 IN data;"
Set RstFetch = Cmd.Execute
Do Until RstFetch.EOF
Me.List1.AddItem Rst.Fields(0) ' En vez de Rst.Fields(0) pones los campos que te interesan
Rst.MoveNext
Loop
Loop
Rst.Close
Conn.CommitTrans

(El codigo está mal porque la condición de salida del bucle más externo
no es Rst.EOF sino algo en base al resultado del FETCH para que salga
cuando FETCH retorna que no quedan más registros; pero no tengo idea
cómo se hará porque hace años que me olvidé de todo lo relacionado con
Visual Basic. Pero espero que se entienda el ejemplo).

Si la cantidad de registros a retornar es poca, entonces no necesitas el
cursor; podrías modificar la función kardexf para que te retornara
directamente los registros en vez de un cursor, y el código VB se vuelve
mucho más sencillo.

--
Alvaro Herrera http://www.amazon.com/gp/registry/3BP7BYG9PUGI8
"People get annoyed when you try to debug them." (Larry Wall)

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Ernesto Lozano 2009-04-30 18:58:18 Re: Procesos postgresql permanentes en linux !!!
Previous Message Emanuel Calvo Franco 2009-04-30 14:54:28 Re: Procesos postgresql permanentes en linux !!!