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 lnHandleo
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")) ENDPROCVFP 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.