powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Ошибка открытия коннекта
35 сообщений из 35, показаны все 2 страниц
Ошибка открытия коннекта
    #38308563
Scherbakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
почему при запуске программы
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Public Sub Main()
    Set pConn = New ADODB.Connection
    pConn.ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;Data Source=DSN_NAME;uid=sa;pwd=password;"
    pConn.Open
    pConn.Close
    frm.Show
End Sub


открытие коннекта проходит на ура
а вот в форме:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Private Sub Form_Load()
    MySub
End Sub

Private Sub MySub()
Dim Rst As ADODB.Recordset
Set Rst = New ADODB.Recordset
Dim SQL As String
    SQL = "SELECT [MyTableId] FROM [MyTable]"
    pConn.Open 'ПРИ ПОПЫТКЕ ОТКРЫТЬ КОННЕКТ ПОЛУЧАЮ ОШИБКУ ODBC ДРАЙВЕРА "login failed for user sa"
    Rst.CursorLocation = adUseClient
    Rst.Open SQL, pConn, adOpenStatic, adLockReadOnly
    If Rst.EOF Then
        MsgBox "Recordset is empty!"
        Rst.Close
        Exit Sub
    End If
    Rst.Close
    pConn.Close
End Sub


В связи с чем такое возможно?
В настройках DSN так же явно указано имя пользователя 'sa' и пароль 'password'
...
Рейтинг: 0 / 0
Ошибка открытия коннекта
    #38308566
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pConn.Close


явно лишнее, если у вас глобальный объект
...
Рейтинг: 0 / 0
Ошибка открытия коннекта
    #38308569
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и в MySub зачем вы повторно пытаетесь открыть соединение?
...
Рейтинг: 0 / 0
Ошибка открытия коннекта
    #38308586
Scherbakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,

Коннект объявил глобальным, но не открываю его при запуске и не держу открытым. Глобальным обпределил, чтоб потом 100 раз не создавать заново. Коннект использую только когда нужно получить/отправить данные.
только вот не открывается он в MySub, а в Public Sub открывается.
В чем загвоздка?
...
Рейтинг: 0 / 0
Ошибка открытия коннекта
    #38308591
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сделайте глобальный метод GetConnection() там и будет открытие соединения (а если уже открыто, то отдается ранее открытое), его и используйте во всех своих формах
...
Рейтинг: 0 / 0
Ошибка открытия коннекта
    #38308597
Scherbakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,
Спасибо, за совет!
Если честно, то к этому мнению я уже тоже пришел, но вот просто интересно, почему все же в My Sub коннект не открывается.
Есть какие-нибудь предположения?
...
Рейтинг: 0 / 0
Ошибка открытия коннекта
    #38308601
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pConn где и как объявлен?
...
Рейтинг: 0 / 0
Ошибка открытия коннекта
    #38308607
Scherbakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,

Код: vbnet
1.
2.
Option Explicit
Global pConn As ADODB.Connection


в стартап модуле, там же где и Public Sub.
...
Рейтинг: 0 / 0
Ошибка открытия коннекта
    #38308617
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а зачем вообще закрывать соединение с базой?
если вы его закрываете, то открывайте заново с указанием строки соединения
...
Рейтинг: 0 / 0
Ошибка открытия коннекта
    #38308620
Scherbakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,


Konst_Oneа зачем вообще закрывать соединение с базой?

пародия на дотнет
а если коннекшенСтринг тоже глобально определить? извращаться так уж до конца )
...
Рейтинг: 0 / 0
Ошибка открытия коннекта
    #38308622
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
Public ADO_RaiseError As Boolean ' Флаг вызова ошибки
Private pConnect As String       ' Строка соединения с базой данных

Public Function OpenConnection(Optional ConnectString As String = "", _
                                   Optional UserName As String = "", _
                                   Optional Password As String = "", _
                                   Optional ConnectPrompt As ADODB.ConnectPromptEnum = adPromptNever, _
                                   Optional ByRef ActiveConnection As ADODB.Connection) As Boolean
Dim objCn As ADODB.Connection, bClose As Boolean

  On Error GoTo Error_Open
  If ActiveConnection Is Nothing Then
    Set objCn = New ADODB.Connection
    bClose = True
  Else
    Set objCn = ActiveConnection
    If objCn.State <> adStateClosed Then objCn.Close
    bClose = False
  End If
  ' Установка параметров соединения
  If Len(ConnectString) = 0 Then ConnectString = pConnect
  objCn.ConnectionString = ConnectString
  If Len(UserName & Password) > 0 Then
    objCn.Properties("User ID") = UserName
    objCn.Properties("Password") = Password
  End If
  objCn.Properties("Prompt") = ConnectPrompt
  ' Открытие соединения
  objCn.Open
  pConnect = objCn.ConnectionString
  ' Закрытие объекта
  If bClose Then
    objCn.Close
    Set objCn = Nothing
  End If
  OpenConnection = True
  Exit Function

Error_Open:
  If bClose Then Set objCn = Nothing
  If ADO_RaiseError Then Err.Raise Err.Number, Err.Source, Err.Description
End Function

Public Function OpenRecordset(ByRef SQL As String, _
                                  Optional CursorType As ADODB.CursorTypeEnum = adOpenForwardOnly, _
                                  Optional LockType As ADODB.LockTypeEnum = adLockReadOnly, _
                                  Optional Options As Long = adCmdText, _
                                  Optional ByRef ActiveConnection As Variant) As ADODB.Recordset
Dim rs As ADODB.Recordset
Dim ErrCode As Long
Dim ErrDesc As String
Dim ErrSource As String

  On Error GoTo Error_Open
  ' Проверка параметра
  If IsMissing(ActiveConnection) Then ActiveConnection = pConnect
  Set rs = New ADODB.Recordset
  rs.CursorLocation = adUseClient
  rs.Open SQL, ActiveConnection, CursorType, LockType, Options
  If LockType = adLockReadOnly Then Set rs.ActiveConnection = Nothing
  Set OpenRecordset = rs
  Exit Function
  
Error_Open:
  Set rs = Nothing
  ErrCode = Err.Number
  ErrDesc = Err.Description
  ErrSource = Err.Source
  LogError "OpenRecordset: " & SQL
  If ADO_RaiseError Then
    Err.Raise ErrCode, ErrSource, ErrDesc
  End If
End Function
...
Рейтинг: 0 / 0
Ошибка открытия коннекта
    #38308637
Scherbakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,

Спасибо! Здорово,конечно! Но чет каждый раз такие конструкции писать лень))
хотя некоторые аргументы можно и в глобальные переменные запихать.
вобщем я к тому - не проще ли оставить конект открытым...
...
Рейтинг: 0 / 0
Ошибка открытия коннекта
    #38415637
Фотография Gabit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разработка осталась от предыдущего разработчика.
Подключение идет к базе Oracle 11g.

Код такой:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Dim ws As Workspace
Dim c As Connection
Dim bal As Recordset, kur As Recordset, grf As Recordset
Dim ConnectStr As String
Static UName As String, PWord As String

    UName = "user1"
    PWord = "passwd"

  ConnectStr = "ODBC;DATABASE=HEAD;UID=" & UName & ";PWD=" & PWord & ";DSN=DBNAME"
 'Создание рабочей области, которая позволяет обойти DAO
  Set ws = CreateWorkspace("BAL", UName, "", dbUseODBC)
 'Открытие подключения к базам 
  Application.StatusBar = "Подключение к серверу ..."
  On Error GoTo ErrConnect
  Set c = ws.OpenConnection("HEAD", dbDriverNoPrompt, True, ConnectStr)
  c.QueryTimeout = 300
  
  ws.DefaultCursorDriver = dbUseDefaultCursor
  On Error GoTo 0

ErrConnect:
    mb = MsgBox("Ошибка подключения к серверу !", vbOKOnly, "ADO connect")


Как просмотреть код и текст ошибки ?
...
Рейтинг: 0 / 0
Ошибка открытия коннекта
    #38415667
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
c.Errors
...
Рейтинг: 0 / 0
Ошибка открытия коннекта
    #38415671
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А еще Err.Description в ErrConnect:
А перед ErrConnect: нужно сделать exit, иначе выполнение в обработчик будет заходить всегда.
...
Рейтинг: 0 / 0
Ошибка открытия коннекта
    #38415715
Фотография Gabit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,
c.Errors

Ругается:
Method or data member not found
...
Рейтинг: 0 / 0
Ошибка открытия коннекта
    #38415748
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
...

  ws.DefaultCursorDriver = dbUseDefaultCursor
  On Error GoTo 0

Exit Function '(Sub ???) 

ErrConnect:
    mb = MsgBox("Ошибка подключения к серверу !" & vbCrLf & Err.Number & ": " & Err.Description, vbOKOnly, "ADO connect")
...
Рейтинг: 0 / 0
Ошибка открытия коннекта
    #38415932
Фотография Gabit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One, спасибо
Пишет:
3146: ODBC - ошибка вызова

Как понять в чем именно ошибка ?
...
Рейтинг: 0 / 0
Ошибка открытия коннекта
    #38415936
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй так:

Код: vbnet
1.
cn.Open "DSN=DBNAME", UName, PWord


По идее для dsn больше ничего не нужно.
...
Рейтинг: 0 / 0
Ошибка открытия коннекта
    #38415950
Фотография Gabit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,
Думаю проблема из Win7 x64.
Раньше был WinXP x86.
Интернете пишут что надо запустить C:\Windows\SysWOW64\odbcad32.exe.
Так как установлен клиент Oracle 32 битный.
Я запустил 32-х битный ODBC и там добавил Системный DSN, проверил соединение.
Но из VBA его почему-то не видит, получается ?
...
Рейтинг: 0 / 0
Ошибка открытия коннекта
    #38415954
Фотография Gabit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyПопробуй так:

Код: vbnet
1.
cn.Open "DSN=DBNAME", UName, PWord


По идее для dsn больше ничего не нужно.
Что такое cn ?
...
Рейтинг: 0 / 0
Ошибка открытия коннекта
    #38415958
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вызывайте без ODBC а напрямую через OLE DB драйвер оракла
примеры строк соединений смотрите тут http://www.connectionstrings.com/oracle/
...
Рейтинг: 0 / 0
Ошибка открытия коннекта
    #38415980
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GabitAntonariyПопробуй так:

Код: vbnet
1.
cn.Open "DSN=DBNAME", UName, PWord


По идее для dsn больше ничего не нужно.
Что такое cn ?Объект ADODB.Connection
...
Рейтинг: 0 / 0
Ошибка открытия коннекта
    #38416097
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gabit
Код: vbnet
1.
2.
ErrConnect:
    mb = MsgBox("Ошибка подключения к серверу !", vbOKOnly, "ADO connect")



с юморком был "предыдущий разработчик" - тут АДО нет и близко,
это DAO
GabitКак просмотреть код и текст ошибки ?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
ErrExit:
    For Each daoError In DBEngine.Errors
        With daoError
            strErrMessage = strErrMessage & .Number & " " & .Description & vbCrLf
        End With
    Next daoError
    MsgBox strErrMessage, vbCritical
    Resume FreeExit
...
Рейтинг: 0 / 0
Ошибка открытия коннекта
    #38416274
Фотография Gabit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneвызывайте без ODBC а напрямую через OLE DB драйвер оракла
примеры строк соединений смотрите тут http://www.connectionstrings.com/oracle/
Есть пример на VBA ?
...
Рейтинг: 0 / 0
Ошибка открытия коннекта
    #38416275
Фотография Gabit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwerty112с юморком был "предыдущий разработчик" - тут АДО нет и близко,
это DAO
GabitКак просмотреть код и текст ошибки ?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
ErrExit:
    For Each daoError In DBEngine.Errors
        With daoError
            strErrMessage = strErrMessage & .Number & " " & .Description & vbCrLf
        End With
    Next daoError
    MsgBox strErrMessage, vbCritical
    Resume FreeExit


Поставил,
вот результат
...
Рейтинг: 0 / 0
Ошибка открытия коннекта
    #38416278
Фотография Gabit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня в каталоге клиента Oracle, в файле tnsnames.ora есть такая запись:
DBNAME.WORLD =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.1.2)(PORT = 1521))
)
(CONNECT_DATA = (SID = MyDb))
)


И через SQL+ такая команда просходит успешно:
connect user1/passwd @DBNAME;
...
Рейтинг: 0 / 0
Ошибка открытия коннекта
    #38416281
Фотография Gabit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Содержимое sqlnet.ora:
# sqlnet.ora Network Configuration
# Generated by Oracle configuration tools.

NAMES.DIRECTORY_PATH= (TNSNAMES)

NAMES.DEFAULT_DOMAIN = world

NAME.DEFAULT_ZONE = world
...
Рейтинг: 0 / 0
Ошибка открытия коннекта
    #38416414
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GabitПоставил,
вот результат


имхо, нужно "брать" эту ORA-12154
и идти сюда
или даже так
...
Рейтинг: 0 / 0
Ошибка открытия коннекта
    #38416526
Фотография Gabit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
даже если
tnsping DBNAME

Успешно проходит ?
Надо искать проблему на стороне Oracle ?
...
Рейтинг: 0 / 0
Ошибка открытия коннекта
    #38416548
Фотография Gabit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот эта теме наверное более подходящая
http://www.sql.ru/forum/840223/perestal-rabotat-adodb-connection
...
Рейтинг: 0 / 0
Ошибка открытия коннекта
    #38416549
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gabitдаже если
tnsping DBNAME

Успешно проходит ?
Надо искать проблему на стороне Oracle ?
ссылки на поиск смотрел ?
там, для 64б ОС, через топик повторяется одна и та же проблема, которая заканчивается ORA-12154 :
- 32б клиент находится в каталоге Program Files (x86), и драйвер "сходит с ума" из-за этих скобок ...

какой битности у тебя Эксель ? где "лежит" ?
попробуй выполнить НЕ из Экселя, VBS скриптом, например
...
Рейтинг: 0 / 0
Ошибка открытия коннекта
    #38416559
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если система х64, то и клиент оракловый нужно такой же ставить.
...
Рейтинг: 0 / 0
Ошибка открытия коннекта
    #38416563
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ох уж это DAO. Можно так попробовать:
Код: vbnet
1.
  ConnectStr = "ODBC;DATABASE=HEAD;UID=" & UName & ";PWD=" & PWord & ";DSN=DBNAME;driver={Microsoft ODBC for Oracle};server=SERVERNAME;"


Microsoft ODBC for Oracle должен быть установлен.
...
Рейтинг: 0 / 0
Ошибка открытия коннекта
    #38416591
Фотография Gabit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwerty112ссылки на поиск смотрел ?
там, для 64б ОС, через топик повторяется одна и та же проблема, которая заканчивается ORA-12154 :
- 32б клиент находится в каталоге Program Files (x86), и драйвер "сходит с ума" из-за этих скобок ...

какой битности у тебя Эксель ? где "лежит" ?
попробуй выполнить НЕ из Экселя, VBS скриптом, например
Да в этом была проблема.
Переставил его в каталог без скобок и все заработало.
Всем, СПАСИБО !
...
Рейтинг: 0 / 0
35 сообщений из 35, показаны все 2 страниц
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Ошибка открытия коннекта
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]