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