Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-es-ayuda by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group