|
| Iniciado por vpereyra, 27,nov. 2014 12:25 - No hay respuesta |
| |
| | | |
|
| |
| Publicado el 27,noviembre 2014 - 12:25 |
Hi:
I'm trying to enable connection pooling, using an example in VB6 and INFORMIX ODBC connection (this is valid for any BD, since control is done on the client side)
The question that enables me perfectly from VB6 Connection pooling, now I'm trying to do it from windev This is the example in VB
////////////////////////// en VB6 Option Explicit Dim rc As Long
Const SQL_ATTR_CONNECTION_POOLING = 201 Const SQL_CP_ONE_PER_DRIVER = 1 Const SQL_IS_INTEGER = -6 Const SQL_CP_OFF = 0 Const SQL_DRIVER_AWARE_POOLING_SUPPORTED = 65572 ' 10024 - DIO N CON 65572
Const SQL_MAX_MESSAGE_LENGTH = 512 Const SQL_SUCCESS = 0 Const SQL_SUCCESS_WITH_INFO = 1 Const SQL_ATTR_ODBC_VERSION = 200 Const SQL_OV_ODBC3 = 3 Const SQL_HANDLE_DBC = 2 Const SQL_HANDLE_ENV = 1 Const SQL_NTS = -3 Const SQL_ERROR = -1 Const SQL_DRIVER_VER = 7 Const SQL_ODBC_VER = 10
Private Declare Function SQLSetEnvAttr Lib "ODBC32.DLL" ( _ ByVal EnvironmentHandle As Long, _ ByVal EnvAttribute As Long, _ ByVal ValuePtr As Long, _ ByVal StringLength As Long) As Integer
Private Declare Function SQLConnect Lib "ODBC32.DLL" (ByVal ldbc As Long, ByVal Server As String, _ ByVal serverlen As Integer, ByVal uid As String, ByVal uidlen As Integer, _ ByVal pwd As String, ByVal pwdlen As Integer) As Integer
Private Declare Function SQLGetInfo Lib "ODBC32.DLL" (ByVal ldbc As Long, ByVal hWnd As Long, _ ByVal szInfo As String, ByVal cbInfoMax As Integer, cbInfoOut As Integer) As Integer
Private Declare Function SQLAllocHandle Lib "ODBC32.DLL" (ByVal htype%, ByVal inhdl&, outhdl&) As Integer Private Declare Function SQLAllocEnv% Lib "ODBC32.DLL" (env&) Private Declare Function SQLDisconnect Lib "ODBC32.DLL" (ByVal conn&) As Integer
Private Sub Command2_Click()
Dim strSvrNme As String Dim intSvrLen As Integer Dim intI As Integer Dim GetServer As String Dim strDSN As String Dim uid As String Dim pwd As String Dim i As Long
Dim lngHenv As Long 'handle to the environment Dim lngHdbc As Long
uid = "informix" strDSN = "informix2" pwd = "xxxXXXxxxx"
' rc = SQLGetInfo(hdbc, SQL_DRIVER_VER, szNum, sizeof(szNum), NULL)
Dim rc2 As Integer
For i = 1 To 6
'--- pooling rc2 = SQLAllocEnv(lngHenv) rc = SQLSetEnvAttr(lngHdbc, SQL_ATTR_CONNECTION_POOLING, SQL_CP_ONE_PER_DRIVER, SQL_IS_INTEGER) If rc <> 0 Then Debug.Print "SQLSetEnvAttr Error " & rc End If
intI = SQLAllocHandle(SQL_HANDLE_DBC, lngHenv, lngHdbc) intI = SQLConnect(lngHdbc, strDSN, SQL_NTS, uid, SQL_NTS, pwd, SQL_NTS)
If (intI = SQL_SUCCESS) Or (intI = SQL_SUCCESS_WITH_INFO) Then strSvrNme = Space(SQL_MAX_MESSAGE_LENGTH) intI = SQLGetInfo(lngHdbc, SQL_DRIVER_AWARE_POOLING_SUPPORTED, strSvrNme, SQL_MAX_MESSAGE_LENGTH, intSvrLen) intI = SQLGetInfo(lngHdbc, SQL_DRIVER_VER, strSvrNme, SQL_MAX_MESSAGE_LENGTH, intSvrLen)
intI = SQLGetInfo(lngHdbc, SQL_ODBC_VER, strSvrNme, SQL_MAX_MESSAGE_LENGTH, intSvrLen)
If (intI = SQL_SUCCESS) Or (intI = SQL_SUCCESS_WITH_INFO) Then GetServer = VBA.Left$(strSvrNme, intSvrLen) Else GetServer = "" End If Else GetServer = "" End If MsgBox ("Before closing the connection!")
intI = SQLDisconnect(lngHdbc)
Next
End Sub
Private Sub Form_Load() 'Enable connection pooling .. this must be done before any ADO calls 'are made. Only needs to occur one time per process
' ACTIVE HERE THE POOL OF CONNECTION rc = SQLSetEnvAttr(0&, SQL_ATTR_CONNECTION_POOLING, SQL_CP_ONE_PER_DRIVER, SQL_IS_INTEGER) If rc <> 0 Then Debug.Print "SQLSetEnvAttr Error " & rc End If End Sub
Private Sub Form_Unload(Cancel As Integer) Call SQLSetEnvAttr(0&, SQL_ATTR_CONNECTION_POOLING, SQL_CP_OFF, SQL_IS_INTEGER) End Sub
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Performing an equivalence WLenguaje did the following:
1. in overall I have the following constants.
CONSTANT SQL_ATTR_CONNECTION_POOLING = 201 SQL_CP_ONE_PER_DRIVER = 1 SQL_IS_INTEGER = -6 SQL_CP_OFF = 0 SQL_DRIVER_AWARE_POOLING_SUPPORTED = 65572 // 10024 - DIO N CON 65572 SQL_MAX_MESSAGE_LENGTH = 512 SQL_SUCCESS = 0 SQL_SUCCESS_WITH_INFO = 1 SQL_ATTR_ODBC_VERSION = 200 SQL_OV_ODBC3 = 3 SQL_HANDLE_DBC = 2 SQL_HANDLE_ENV = 1 SQL_NTS = -3 SQL_ERROR = -1 SQL_DRIVER_VER = 7 SQL_ODBC_VER = 10
END
2. In the Button I THE FOLLOWING:
lngHdbc,lngHenv,nConetado, nDatos,intSvrLen is int
uid is string = "informix" strDSN is string = "informix2" pwd is string = "xxxXXXxxxx"
INTERO is int
// nDLL IS INT = LoadDLL("C:\Windows\System32\odbc32.dll") nDLL is int = LoadDLL("ODBC32.DLL") IF nDLL <> 0 THEN // CallDLL32("C:\Windows\System32\odbc32.dll","SQLAllocEnv",lngHenv) // CallDLL32("C:\Windows\System32\odbc32.dll", "SQLSetEnvAttr", lngHdbc, SQL_ATTR_CONNECTION_POOLING, SQL_CP_ONE_PER_DRIVER, SQL_IS_INTEGER) // // // CallDLL32("C:\Windows\System32\odbc32.dll","SQLAllocHandle",SQL_HANDLE_DBC, lngHenv, lngHdbc) // // CallDLL32("C:\Windows\System32\odbc32.dll", "SQLConnect", lngHdbc, strDSN, SQL_NTS, uid, SQL_NTS, pwd, SQL_NTS)
// rc = SQLSetEnvAttr(0&, SQL_ATTR_CONNECTION_POOLING, SQL_CP_ONE_PER_DRIVER, SQL_IS_INTEGER)
// HERE SHOULD ENABLE THE POOLING, BUT DO NOTHING, I REALIZE HOW TO MONITOR PROCEDURES OF WINDOWS nDatos = API("ODBC32.DLL", "SQLSetEnvAttr", &INTERO, SQL_ATTR_CONNECTION_POOLING, SQL_CP_ONE_PER_DRIVER, SQL_IS_INTEGER)
CallDLL32("ODBC32.DLL","SQLAllocEnv",lngHenv)
//API("C:\Windows\System32\odbc32.dll","SQLAllocEnv",LNGHENV)
//CallDLL32("odbc32", "SQLSetEnvAttr", lngHdbc, SQL_ATTR_CONNECTION_POOLING, SQL_CP_ONE_PER_DRIVER, SQL_IS_INTEGER)
nHandler is int = CallDLL32("ODBC32.DLL","SQLAllocHandle",SQL_HANDLE_DBC, lngHenv, lngHdbc)
nConetado = CallDLL32("ODBC32.DLL", "SQLConnect", lngHdbc, strDSN, SQL_NTS, uid, SQL_NTS, pwd, SQL_NTS) IF (nConetado = SQL_SUCCESS) OR (nConetado = SQL_SUCCESS_WITH_INFO) THEN strSvrNme is string= RepeatString(" ",SQL_MAX_MESSAGE_LENGTH)
// intI = SQLGetInfo(lngHdbc, SQL_DRIVER_AWARE_POOLING_SUPPORTED, strSvrNme, SQL_MAX_MESSAGE_LENGTH, intSvrLen) // intI = SQLGetInfo(lngHdbc, SQL_DRIVER_VER, strSvrNme, SQL_MAX_MESSAGE_LENGTH, intSvrLen) // // intI = SQLGetInfo(lngHdbc, SQL_ODBC_VER, strSvrNme, SQL_MAX_MESSAGE_LENGTH, intSvrLen) // // If (intI = SQL_SUCCESS) Or (intI = SQL_SUCCESS_WITH_INFO) Then // GetServer = VBA.Left$(strSvrNme, intSvrLen) // Else // GetServer = "" // End If nConetado = CallDLL32("ODBC32.DLL", "SQLGetInfo", SQL_DRIVER_AWARE_POOLING_SUPPORTED, strSvrNme, SQL_MAX_MESSAGE_LENGTH, intSvrLen) nConetado = CallDLL32("ODBC32.DLL", "SQLGetInfo", SQL_DRIVER_VER, strSvrNme, SQL_MAX_MESSAGE_LENGTH, intSvrLen) nConetado = CallDLL32("ODBC32.DLL", "SQLGetInfo", SQL_ODBC_VER, strSvrNme, SQL_MAX_MESSAGE_LENGTH, intSvrLen)
END
ELSE Error(ErrorInfo()) END
// intI = SQLConnect(lngHdbc, strDSN, SQL_NTS, uid, SQL_NTS, pwd, SQL_NTS)
Info("TERM") FreeDLL(nDLL) CallDLL32("odbc32", "SQLDisconnect", lngHdbc)
You can see that I did several tests using the API or the CALLDLL32 both give me the same result ... (not working).
My question is if I'm doing well equivalence between VB6 and windev18 statements.
From already thank you very much for your help.
Victor.
Víctor H. Pereyra M.P. 2595
Departamento de Informática
Sucursal Nva . Cba .: Hipólito Yrigoyen 384 5000 Córdoba, Capital Tel.: (0351) 426 9200 int :1234
e-mail: vpereyra@sanatorioallende.com www.sanatorioallende.com.ar |
| |
| |
| | | |
|
| | | | |
| | |
|