Cursor adapter y xml.... será demasiado lento ?????

13/09/2004 - 21:30 por Luis Guevara | Informe spam
Hola amigos:

Estoy tratando de usar el CursorAdapter y XMLAdapter para la explotación de
una BD de postgres, son mis primeras experiencias con estos controles.

Tengo el siguiente codigo:

*********

PROCEDURE ListaUsuarios() as String
LOCAL oCaUsuarios as CursorAdapter
LOCAL oXaUsuarios as XMLAdapter
LOCAL Retorno as String


lcMystring="DATABASE=MIBASE;SERVER=xxx.xx.xxx.xx;portT32;UID=postgres;pwdMYPASS;provider=MSDASQLR;DRIVER=postgreSQL;"
lcSelect="SELECT * FROM usuario"

oCAUsuarios = CREATEOBJECT("CursorAdapter")
WITH oCAUsuarios
.Alias = "Cur_Usuario"
.DataSourceType = "ODBC"
.DataSource = SQLSTRINGCONNECT(lcMystring)
.SelectCmd = lcSelect
.Tables = "usuario"
.CursorFill()
ENDWITH

oXAUsuarios = CREATEOBJECT("XMLAdapter")
oXAUsuarios.AddTableSchema("Cur_Usuario")
oXAUsuarios.ToXML("Retorno")

oCAUsuarios = .F.
oXAUsuarios = .F.

Return(Retorno)
ENDPROC

***********

Deseo me puedan ayudar con las siguientes interrogante:

Cada vez que llame a este procedimiento, el CursorAdapter establece una
NUEVA conexion con la BD de Postgres ¿verdad?, si es así ¿No creen que esta
tecnica de explotación de datos se hace muy lenta?
Si previamente ya he establecido una conexion a la base con el código:

lcMystring="DATABASE=MIBASE;SERVER=xxx.xx.xxx.xx;portT32;UID=postgres;pwdMYPASS;provider=MSDASQLR;DRIVER=postgreSQL;"
oConnection=SQLSTRINGCONNECT(lcMystring)

¿Existe alguna manera de indicar al CursorAdpater que ya existe esta
conexión establecida con la base de datos, la cual puede usar y por tanto no
es necesario que vuelva a conectarse? Esto con el fin de ganar velocidad.
¿recomiendan el uso del CursorAdapter?

Agradezco sus comentarios.

atte.
Luis Guevara
 

Leer las respuestas

#1 Esparta Palma
13/09/2004 - 22:17 | Informe spam
Nada te impide que le indiques a el cursorAdapter el que use una conexión
hecha con anterioridad, el siguiente código funciona sin problemas:

Puedes mandarle de parámetro, el handle de conexión

loConn = SQLCONNECT("Predial")


IF NOT (Usuarios(loConn))
Messagebox("No es posible obtener los usuarios del sistema...")
ELSE
BROW
ENDIF


PROCEDURE Usuarios
LPARAMETERS tnSQLHandle

LOCAL llReturn
llReturn = .F.
TRY
lcQuery ="SELECT * FROM usuario"
loCAusuario = CREATEOBJECT("CAODBC",lcQuery,"cUsuario",.T.,tnSQLHandle)
WITH loCAUsuario
.CursorFill()
llReturn = .T.
ENDWITH
CATCH TO loError
MESSAGEBOX(loError.Message)
llReturn = .F.
FINALLY
loCAUsuario = .NULL.
RELEASE loCAUsuario
ENDTRY
RETURN llReturn
ENDPROC


** CursorAdapter Personalizado
DEFINE CLASS CAODBC AS CursorAdapter
DataSourceType ="ODBC"
PROCEDURE Init
LPARAMETERS tcQuery,tcAlias,tlShared, tuHandle
WITH This
.Alias = tcAlias
.SelectCMD = tcQuery
IF tlShared
.DataSource = tnHandle
ELSE
IF NOT EMPTY(tuHandle) AND VARTYPE(tuHandle) ="C"
.DataSource = SQLSTRINGCONNECT(tuHandle)
ELSE
**** Error de programación, traer ventana de
conexiones
.DataSource = SQLCONNECT()
ENDIF
ENDIF
ENDWITH
ENDPROC
ENDDEFINE


El comportamiento del CursorAdapter lo decides tú, el grado de complejidad
lo puedes decidir también, en este caso, he creado un CursorAdapter
personalizado, en el que se le puede indicar que utilice un Handle de
conexión creado con anterioridad. En su defecto, crea la nueva conexión
según el 4to. parámetro.

¿recomiendan el uso del CursorAdapter?


En lo personal, si lo recomiendo.

Espero te sirva.



Hola amigos:

Estoy tratando de usar el CursorAdapter y XMLAdapter para la explotación de
una BD de postgres, son mis primeras experiencias con estos controles.

Tengo el siguiente codigo:

*********



PROCEDURE ListaUsuarios() as String
LOCAL oCaUsuarios as CursorAdapter
LOCAL oXaUsuarios as XMLAdapter
LOCAL Retorno as String


lcMystring="DATABASE=MIBASE;SERVER=xxx.xx.xxx.xx;portT32;UID=postgres;pwdMYPASS;provider=MSDASQLR;DRIVER=postgreSQL;"
lcSelect="SELECT * FROM usuario"

oCAUsuarios = CREATEOBJECT("CursorAdapter")
WITH oCAUsuarios
.Alias = "Cur_Usuario"
.DataSourceType = "ODBC"
.DataSource = SQLSTRINGCONNECT(lcMystring)
.SelectCmd = lcSelect
.Tables = "usuario"
.CursorFill()
ENDWITH

oXAUsuarios = CREATEOBJECT("XMLAdapter")
oXAUsuarios.AddTableSchema("Cur_Usuario")
oXAUsuarios.ToXML("Retorno")

oCAUsuarios = .F.
oXAUsuarios = .F.

Return(Retorno)
ENDPROC

***********

Deseo me puedan ayudar con las siguientes interrogante:

Cada vez que llame a este procedimiento, el CursorAdapter establece una
NUEVA conexion con la BD de Postgres ¿verdad?, si es así ¿No creen que esta
tecnica de explotación de datos se hace muy lenta?
Si previamente ya he establecido una conexion a la base con el código:

lcMystring="DATABASE=MIBASE;SERVER=xxx.xx.xxx.xx;portT32;UID=postgres;pwd>MYPASS;provider=MSDASQLR;DRIVER=postgreSQL;"
oConnection=SQLSTRINGCONNECT(lcMystring)

¿Existe alguna manera de indicar al CursorAdpater que ya existe esta
conexión establecida con la base de datos, la cual puede usar y por tanto no
es necesario que vuelva a conectarse? Esto con el fin de ganar velocidad.
¿recomiendan el uso del CursorAdapter?

Agradezco sus comentarios.

atte.


Luis Guevara


ž,ø€º°`°º€ø,žž,ø€º°`°º€ø,žž,ø€º°`°º€ø,žž,ø€º°`°º
Espartaco Palma Martínez
SysOp PortalFox.com
email:mexicoSINSPAM[Arroba]portalfox.com

-
PortalFox :: Nada corre como un zorr
http://www.portalfox.co

PortalFox - NNTP Forum Gatewa

Preguntas similares