PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2024 → VB6 vs windev18
VB6 vs windev18
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