Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Ошибка открытия коннекта / 25 сообщений из 35, страница 1 из 2
24.06.2013, 17:41
    #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
24.06.2013, 17:44
    #38308566
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка открытия коннекта
pConn.Close


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

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

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


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


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

пародия на дотнет
а если коннекшенСтринг тоже глобально определить? извращаться так уж до конца )
...
Рейтинг: 0 / 0
24.06.2013, 18:15
    #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
24.06.2013, 18:30
    #38308637
Scherbakov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка открытия коннекта
Konst_One,

Спасибо! Здорово,конечно! Но чет каждый раз такие конструкции писать лень))
хотя некоторые аргументы можно и в глобальные переменные запихать.
вобщем я к тому - не проще ли оставить конект открытым...
...
Рейтинг: 0 / 0
03.10.2013, 15:16
    #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
03.10.2013, 15:33
    #38415667
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка открытия коннекта
c.Errors
...
Рейтинг: 0 / 0
03.10.2013, 15:35
    #38415671
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка открытия коннекта
А еще Err.Description в ErrConnect:
А перед ErrConnect: нужно сделать exit, иначе выполнение в обработчик будет заходить всегда.
...
Рейтинг: 0 / 0
03.10.2013, 15:52
    #38415715
Gabit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка открытия коннекта
Antonariy,
c.Errors

Ругается:
Method or data member not found
...
Рейтинг: 0 / 0
03.10.2013, 16:05
    #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
03.10.2013, 17:35
    #38415932
Gabit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка открытия коннекта
Konst_One, спасибо
Пишет:
3146: ODBC - ошибка вызова

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

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


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

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


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

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


По идее для dsn больше ничего не нужно.
Что такое cn ?Объект ADODB.Connection
...
Рейтинг: 0 / 0
03.10.2013, 20:10
    #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
04.10.2013, 06:42
    #38416274
Gabit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка открытия коннекта
Konst_Oneвызывайте без ODBC а напрямую через OLE DB драйвер оракла
примеры строк соединений смотрите тут http://www.connectionstrings.com/oracle/
Есть пример на VBA ?
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Ошибка открытия коннекта / 25 сообщений из 35, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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