Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Visual Basic Новый топик    Ответить
 Результат функции объектного типа  [new]
Даниил Пакоv
Member

Откуда:
Сообщений: 391
Подскажите пожалуйста , новичку), можно ли результату функции присвоить значение объектного типа, например, мною написана функция , устанавливающая соединение с MySql

Function toMySql()

Dim MySqlCon As Object
Set MySqlCon = New ADODB.Connection
Set toMySql = MySqlCon

MySqlCon.Open "DRIVER={MySQL ODBC 5.3 Unicode Driver};" & _
"SERVER=srv-mysql;" & _
"DATABASE=MIC1;" & _
"UID=test;" & _
"PASSWORD=123456;" & _
"PORT:3306;" & _
"charset=cp1251;" & _
"Option=3;"
If MySqlCon.State = adStateOpen Then
'MsgBox "Connected! =)"
toMySql = MySqlCon
End If
End Function

Функция сама по себе работает , но при обращении к ней из процедуры

Private Sub Workbook_Open()
Dim V As Object
If toMySql().State = adStateOpen Then


MsgBox ("Привет")
End If
End Sub
возникает 424 ошибка, я так понимаю связанная с описание объекта
Сам пишу на С++ , вот пробую разобраться с VBA / Работает ли в VBA объектная модель в полном ее смысле слова?
Заранее спасибо
21 авг 17, 07:55    [20737716]     Ответить | Цитировать Сообщить модератору
 Re: Результат функции объектного типа  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 18580
То, что Вы написали, открывает соединение и... забывает о нём. Resource leak в полный рост... зачем?
Сделайте нормально:

Private Sub Workbook_Open()
    Dim tmp As ADODB.Connection
    Set tmp = toMySql()
    If  tmp.State = adStateOpen Then
' .........
    tmp.Close
' .........
21 авг 17, 08:42    [20737738]     Ответить | Цитировать Сообщить модератору
 Re: Результат функции объектного типа  [new]
Даниил Пакоv
Member

Откуда:
Сообщений: 391
Private Sub Workbook_Open()

Dim V As New ADODB.Connection
Set V = toMySql()



If V.State = adStateOpen Then


MsgBox ("Connected")
End If

Благодарю за совет.
Не работает, по прежнему
21 авг 17, 08:55    [20737752]     Ответить | Цитировать Сообщить модератору
 Re: Результат функции объектного типа  [new]
Даниил Пакоv
Member

Откуда:
Сообщений: 391
Ошибка 424
21 авг 17, 08:55    [20737754]     Ответить | Цитировать Сообщить модератору
 Re: Результат функции объектного типа  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 19930
Даниил Пакоv,

Как мне оформить свое сообщение?
21 авг 17, 09:06    [20737764]     Ответить | Цитировать Сообщить модератору
 Re: Результат функции объектного типа  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 19930
Даниил Пакоv
возникает 424 ошибка, я так понимаю связанная с описание объекта

Нам требуется угадать, на какой строке кода возникает ошибка и текст ошибки?
21 авг 17, 09:10    [20737767]     Ответить | Цитировать Сообщить модератору
 Re: Результат функции объектного типа  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 18580
Даниил Пакоv, As NEW у Вас категорически лишнее
21 авг 17, 09:19    [20737777]     Ответить | Цитировать Сообщить модератору
 Re: Результат функции объектного типа  [new]
Даниил Пакоv
Member

Откуда:
Сообщений: 391
Ошибка возникает в после вызова функции
Set V = toMySql()
21 авг 17, 09:24    [20737789]     Ответить | Цитировать Сообщить модератору
 Re: Результат функции объектного типа  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 19930
Даниил Пакоv
Ошибка возникает в после вызова функции
Set V = toMySql()
То есть текстом ошибки вы решили не делиться? После вызова функции - это на присвоении или на следующей строке? или вообще на любой следующей строке после вызова функции? Неужели нельзя четко и ясно описывать ситуацию, это ведь вам требуется помощь, а не нам требуется угадать, что у вас там происходит.

Ошибка скорее всего тут
toMySql = MySqlCon
не хватает Set
21 авг 17, 09:53    [20737860]     Ответить | Цитировать Сообщить модератору
 Re: Результат функции объектного типа  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 18580
Function toMySql() As ADODB.Connection

Dim MySqlCon As ADODB.Connection
Set MySqlCon = New ADODB.Connection

MySqlCon.Open "DRIVER={MySQL ODBC 5.3 Unicode Driver};" & _
"SERVER=srv-mysql;" & _
"DATABASE=MIC1;" & _
"UID=test;" & _
"PASSWORD=123456;" & _
"PORT:3306;" & _
"charset=cp1251;" & _
"Option=3;"
If MySqlCon.State = adStateOpen Then
    Set toMySql = MySqlCon
End If
End Function

Private Sub Workbook_Open()
' Dim V As Object
Dim V As ADODB.Connection

If Not V Is Nothing Then
    If toMySql().State = adStateOpen Then
        MsgBox ("State = adStateOpen")
    Else
        MsgBox ("State <> adStateOpen")
    End If
Else
    MsgBox "Not connected."
End If
End Sub
Функция toMySql должна быть размещена в common-модуле. А ещё в ней необходим обработчик ошибок.
21 авг 17, 10:01    [20737878]     Ответить | Цитировать Сообщить модератору
 Re: Результат функции объектного типа  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 18580
PS. Код - демо, так что MsgBox ("State <> adStateOpen") никогда не выполнится.
21 авг 17, 10:02    [20737879]     Ответить | Цитировать Сообщить модератору
 Re: Результат функции объектного типа  [new]
Даниил Пакоv
Member

Откуда:
Сообщений: 391
Спасибо,заработало)

Private Sub Workbook_Open()
Dim V As ADODB.Connection
Set V = toMySql()
If Not V Is Nothing Then
If toMySql().State = adStateOpen Then
MsgBox ("State = adStateOpen")
Else
MsgBox ("State <> adStateOpen")
End If
Else
MsgBox "Not connected."
End If
21 авг 17, 10:24    [20737920]     Ответить | Цитировать Сообщить модератору
 Re: Результат функции объектного типа  [new]
Андрей159
Member

Откуда:
Сообщений: 1619
Кстати можете встретить также ошибку если провайдер не поддерживает внешние запросы на порт 3306. Это надо помнить. Есть солидные компании, а есть просто квартирый вариант, который будет тебе объяснять мол давайте так, а мы может то, а мы можем се. Вам нужно статический IP.... мы пропишем у себя и все оки. Меняйте провайдера чтоб не портить себе нервы.
7 сен 17, 21:20    [20779938]     Ответить | Цитировать Сообщить модератору
Все форумы / Visual Basic Ответить