Страница: 1 |
Добрый день, уважаемые! Встретил проблему и совершенно не представляю, где смотреть... Суть в следующем: Хочу подключиться к Access 2000 через ODBC. API функции объявлены и, вроде, выглядят работоспособными. Однако при выполнении функций SQLAllocEnv и SQLAllocConnect возникает ошибка Cannot compile: Out of memory, а иногда и сам VB рушится с недопустимой операцией. Вот описание моего кода. Во первых, есть модуль с объявлением функций: ' Allocates environment handle Declare Function SQLAllocEnv Lib "odbc32.dll" ( _ ByRef lngHEnv As Long _ ) As Integer ' Allocates connection handle Declare Function SQLAllocConnect Lib "odbc32.dll" ( _ ByVal lngHEnv As Long, _ ByRef lngHCon As Long _ ) As Integer Во-вторых, есть модуль класса, в котором производятся обращения к этим функциям. В модуле объявлена переменная Private lngHEnv As Long. Кроме того, созданы функции: Private Function CreateEnvironment() As Integer '********************************************************************** 'Purpose: Create work environment for ODBC ' and save its handle to variable 'Returns: error/success code as in enumStatus '********************************************************************** ' Call API function to allocate the environment handle CreateEnvironment = SQLAllocEnv(lngHEnv) End Function и Public Function CreateConnection(ByVal strConnection As String, _ ByRef lngHCon As Long) As Integer '********************************************************************** 'Purpose: Create the connection to the datasource ' and save its handle to variable 'Takes: 1) strConnection - the connection string ' 2) lngHCon - the connection handle is returned here 'Returns: the error code as in ' enumStatus '********************************************************************** ' Create the environment CreateConnection = CreateEnvironment ' Call API function to allocate the connection handle CreateConnection = SQLAllocConnect(lngHEnv, lngHCon) ' Call API function to connect to the remote data source CreateConnection = SQLDriverConnect(lngHCon, _ 0, _ strConnection, _ 500, _ strConnection, _ 500, _ 500, _ odbcNoPrompt) End Function В основной программе есть строки: set gODBCWrap = New ODBCwrap <-- Это имя моего модуля класса If Not gODBCWrap.CreateConnection _ ("DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & strPath, lngHCon) = 0 _ Then MsgBox "Failed to connect to database.", vbExclamation, "Connection error" End If Где я сделал ошибку??? Буду очень благодарен за совет по решению проблемы. Григорий. PS Не знаете ли место в Интернете или хорошую книгу по использованию ODBC в VB?
SQLDriverConnect не объявлена Объявлена, я просто не написал здесь. ' Connects to SQL datasource Прошу прощения за отсутствие форматирования в первом сообщении. Я его создал как текст, а не HTML Вот более читабельная версия: ' Allocates environment handle ' Allocates connection handle Private Function CreateEnvironment() As Integer Public Function CreateConnection(ByVal strConnection As String, _ Public Sub StartDB(ByVal strPath As String) Воспроизвел весь твой код и он заработал, по крайней мере сбойных мест нет, все отрабатывается, возвращаются ошибки, прога не рушится. Я добавил следующее: Страница: 1 |
Вопрос: ODBC и VB: out of memory
Добавлено: 19.05.03 16:19
Автор вопроса:
Grigory
Ответы
Всего ответов: 4
Номер ответа: 1
Автор ответа: USA
Вопросов: 1
Ответов: 184
Профиль | | #1
Добавлено: 20.05.03 05:09
Номер ответа: 2
Автор ответа: Grigory
Вопросов: 2
Ответов: 2
Профиль | | #2
Добавлено: 20.05.03 09:22
Declare Function SQLDriverConnect Lib "odbc32.dll" ( _
ByVal lngHCon As Long, _
ByVal lngHWnd As Long, _
ByVal strInConStr As String, _
ByVal intInConStrLen As Integer, _
ByVal strOutConStr As String, _
ByVal intOutConStrMaxLen As Integer, _
ByRef intOutConStrLen As Long, _
ByVal intDriverCompletion As Integer _
) As Integer
Номер ответа: 3
Автор ответа: Grigory
Вопросов: 2
Ответов: 2
Профиль | | #3
Добавлено: 20.05.03 09:32
Declare Function SQLAllocEnv Lib "odbc32.dll" ( _
ByRef lngHEnv As Long _
) As Integer
Declare Function SQLAllocConnect Lib "odbc32.dll" ( _
ByVal lngHEnv As Long, _
ByRef lngHCon As Long _
) As Integer
'**********************************************************************
'Purpose: Create work environment for ODBC
' and save its handle to variable
'Returns: error/success code as in enumStatus
'**********************************************************************
' Call API function to allocate the environment handle
CreateEnvironment = SQLAllocEnv(lngHEnv)
End Function
ByRef lngHCon As Long) As Integer
'**********************************************************************
'Purpose: Create the connection to the datasource
' and save its handle to variable
' Plus initialize the statement collecton
'Takes: 1) strConnection - the connection string
' 2) lngHCon - the connection handle is returned here
'Returns: the error code as in
' enumStatus
'**********************************************************************
' Create the environment
CreateConnection = CreateEnvironment
' Call API function to allocate the connection handle
CreateConnection = SQLAllocConnect(lngHEnv, lngHCon)
' Call API function to connect to the remote data source
CreateConnection = SQLDriverConnect(lngHCon, _
0, _
strConnection, _
500, _
strConnection, _
500, _
500, _
odbcNoPrompt)
End Function
'******************************************************************************
'Purpose: Connect to a database
' using MS Access driver
'Takes: 1) strPath - the path to the DB file
'******************************************************************************
Set gODBCWrap = New ODBCwrap
If Not gODBCWrap.CreateConnection _
("DRIVER={Microsoft Access Driver (*.mdb)}BQ=" & strPath, lngHCon) = 0 _
Then
MsgBox "Failed to connect to database.", vbExclamation, "Connection error"
End If
End Sub
Номер ответа: 4
Автор ответа: USA
Вопросов: 1
Ответов: 184
Профиль | | #4
Добавлено: 21.05.03 06:20