powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Ошибка открытия коннекта
25 сообщений из 35, страница 1 из 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
25 сообщений из 35, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Ошибка открытия коннекта
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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