SQLCONNECT() y SQLSTRINGCONNECT() fueron mejoradas a partir de VFP 8 para aceptar un parámetro opcional lShared.Esta mejora permite abrir vistas remotas en un manejador (handle) establecido por
SQLCONNECT() o SQLSTRINGCONNECT(), que no era posible en versiones anteriores de VFP.Use la nueva cláusula
CONNSTRING [handle] para abrir una vista remota usando una conexión SPT existente:LOCAL lnHandle
lnHandle = SQLSTRINGCONNECT("DRIVER=sql server;SERVER=(local);UID=sa;PWD=;DATABASE=Northwind",.t.)
USE MiVistaRemota IN 0 NODATA CONNSTRING lnHandle
o
LOCAL lnHandle
lnHandle = SQLCONNECT("DSNName",.t.)
USE MiVistaRemota IN 0 NODATA CONNSTRING lnHandle
Note que este mejora también cambia el valor retornado por
CURSORGETPROP('ConnectHandle'..), a partir de VFP 8, como se demuestra en el código del siguiente ejemplo.*
* Ejemplo de compartir una conexión SPT con una vista remota
* SQLCONNECT()/SQLSTRINGCONNECT() parámetro lShared
* USE MiVistaRemota CONNSTRING nHandle
*
CLOSE ALL
CLEAR
ERASE SPT.D*
CREATE DATABASE SPT
*
? "Creando la conexión C_Test en SPT.DBC..."
CREATE CONNECTION C_Test CONNSTRING ;
"DRIVER=sql server;SERVER=(local);UID=sa;PWD=;DATABASE=Northwind"
DBSETPROP('C_Test', 'Connection', 'Asynchronous', .F.)
DBSETPROP('C_Test', 'Connection', 'BatchMode', .T.)
DBSETPROP('C_Test', 'Connection', 'Comment', '')
DBSETPROP('C_Test', 'Connection', 'DispLogin', 3)
DBSETPROP('C_Test', 'Connection', 'ConnectTimeOut', 15)
DBSETPROP('C_Test', 'Connection', 'DispWarnings', .F.)
DBSETPROP('C_Test', 'Connection', 'IdleTimeOut', 0)
DBSETPROP('C_Test', 'Connection', 'QueryTimeOut', 0)
DBSETPROP('C_Test', 'Connection', 'Transactions', 1)
*
? "Creando una vista remota en SPT.DBC..."
CREATE SQL VIEW RV_Customers REMOTE CONNECTION C_Test SHARE AS ;
SELECT * FROM Customers
CREATE SQL VIEW RV_Orders REMOTE CONNECTION C_Test SHARE AS ;
SELECT * FROM Orders
CREATE SQL VIEW RV_Products REMOTE CONNECTION C_Test SHARE AS ;
SELECT * FROM Customers
SQLDISCONNECT(0)
#IF VERSION(5) >= 800
************** SQLCONNECT()
*!* LOCAL lnUnSharedHandle, lnSharedHandle
*!* lnUnSharedHandle = SQLCONNECT("DSNName","sa","",.t.)
*!* ? "lnUnSharedHandle = ", TRANSFORM(lnUnSharedHandle)
*!* * EL cuarto parámetro es nuevo y especifica
*!* * que la conexión puede ser compartida
*!* * con vistas remotas
*!* lnSharedHandle = SQLCONNECT("DSNName","sa","",.t.)
*!* ? "lnSharedHandle = ", TRANSFORM(lnSharedHandle)
************** SQLSTRINGCONNECT()
LOCAL lnUnSharedHandle, lnSharedHandle
lnUnSharedHandle = SQLSTRINGCONNECT("DRIVER=sql server;SERVER=(local);UID=sa;PWD=;DATABASE=Northwind")
? "lnUnSharedHandle = ", TRANSFORM(lnUnSharedHandle)
* El segundo parámetro es nuevo y especifica
* que la conexión puede ser compartida con
* vistas remotas. Esto no era posible con
* versiones anteriores de VFP
lnSharedHandle = SQLSTRINGCONNECT("DRIVER=sql server;SERVER=(local);UID=sa;PWD=;DATABASE=Northwind",.T.)
? "lnSharedHandle = ", TRANSFORM(lnSharedHandle)
*
* El lnHandle especificadoen la cláusula CONNSTRING
* es nuevo e indica la existencia de un manejador
* por el cual se abrirá la vista. No tiene que estar
* definida como SHARE
*
DisplayProperties("UnSharedConnection",lnUnSharedHandle)
DisplayProperties("SharedConnection",lnSharedHandle)
?
? "USE these views using the new CONNSTRING lnSharedHandle construct:"
USE SPT!RV_Customers IN 0 NODATA CONNSTRING lnSharedHandle
DisplayProperties("RV_Customers",CURSORGETPROP("ConnectHandle","RV_Customers"))
USE SPT!RV_Orders IN 0 NODATA CONNSTRING lnSharedHandle
DisplayProperties("RV_Orders",CURSORGETPROP("ConnectHandle","RV_Orders"))
USE SPT!RV_Products IN 0 NODATA CONNSTRING lnSharedHandle
DisplayProperties("RV_Products",CURSORGETPROP("ConnectHandle","RV_Products"))
USE IN RV_Customers
USE IN RV_Orders
USE IN RV_Products
SQLDISCONNECT(0)
#ENDIF
*
* El siguiente comportamiento en VFP8 es distinto que en todas las versiones previas de VFP.
*
* Antes de VFP8, las vistas remotas, eran creadas con la palabra SHARE
* si tuvieran el mismo CURSORGETPROP("ConnectHandle"). En VFP8 cada una tiene un
* diferente CURSORGETPROP("ConnectHandle"), pero todas se abren por la
* misma conexión ODBC
*
?
? "USE these SHAREd views without any CONNSTRING clause -- "
? "this behavior is different starting in VFP 8, where "
? ' CURSORGETPROP("ConnectHandle",..)'
? "returns a different connection handle for each view (but the same statement handle)"
USE SPT!RV_Customers IN 0 NODATA
DisplayProperties("RV_Customers",CURSORGETPROP("ConnectHandle","RV_Customers"))
USE SPT!RV_Orders IN 0 NODATA
DisplayProperties("RV_Orders",CURSORGETPROP("ConnectHandle","RV_Orders"))
USE SPT!RV_Products IN 0 NODATA
DisplayProperties("RV_Products",CURSORGETPROP("ConnectHandle","RV_Products"))
USE IN RV_Customers
USE IN RV_Orders
USE IN RV_Products
SQLDISCONNECT(0)
CLOSE DATABASES ALL
ERASE SPT.D*
RETURN
*
PROCEDURE DisplayProperties(tcString,tnHandle)
? PADL(tcString,20)
?? " VFP Conn Handle=" + TRANSFORM(tnHandle)
?? " ODBC Hdbc=" + TRANSFORM(SQLGETPROP(tnHandle,"ODBChdbc") )
?? " ODBC Hstmt=" + TRANSFORM(SQLGETPROP(tnHandle,"ODBChstmt"))
ENDPROC
VFP Tips & Tricks - Drew Speedie
No hay comentarios. :
Publicar un comentario
Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.