Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ошибка 3146,"ODBC - ошибка вызова" / 25 сообщений из 32, страница 1 из 2
17.04.2014, 16:49
    #38617782
1234_5678
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 3146,"ODBC - ошибка вызова"
Линкованная (через ODBC) таблица SQL-сервера.
Процедура очищает временную таблицу в базе и запросом на добавление заполняет её данными из линкованной таблицы:
Код: vbnet
1.
2.
CurrentDb.Execute ("DELETE [tmp_SQL_Table].* FROM [tmp_SQL_Table];")
CurrentDb.QueryDefs("add_In_tmp_SQL_Table").Execute dbFailOnError


Очень редко, но выскакивает указанная ошибка, времянка очищается, но новых записей в ней не оказывается.
Что может быть причиной (человеческий фактор можно исключить - процедура запускается в 4 утра)?
Можно ли как-то получит более подробное описание ошибки?
И (самое главное) - как бороться?
...
Рейтинг: 0 / 0
17.04.2014, 16:52
    #38617787
гурД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 3146,"ODBC - ошибка вызова"
...
Рейтинг: 0 / 0
17.04.2014, 17:39
    #38617853
1234_5678
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 3146,"ODBC - ошибка вызова"
Смысл статьи приблизительно понял, но - очень приблизительно.
1 В папке Windows файла Odbc.dll у меня нет, есть только ODBC.INI
2 В папке WINDOWS\system вообще нет ничего похожего
3.В папке WINDOWS\system32 есть файл Odbc32.dll

Фразу: "Если первый файл Odbc.dll возможные пути является ODBC Driver Manager 1.x, то, скорее всего возникают проблемы." вообще не понял.
...
Рейтинг: 0 / 0
17.04.2014, 18:13
    #38617901
не гуру
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 3146,"ODBC - ошибка вызова"
Этот же номер ошибки бывает, например, при нарушении условия на значение поля (констрэинт) в бд МС СКЛ. Так что общих рекомендаций нет - ищите конкретные ошибки.
...
Рейтинг: 0 / 0
17.04.2014, 18:34
    #38617930
1234_5678
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 3146,"ODBC - ошибка вызова"
хм... хороший совет.
Если учесть, что из SQL-таблицы я просто читаю, то никаких "условий на значение" тут и рядом не стояло.
Где ж их найти, ошибки эти?
...
Рейтинг: 0 / 0
17.04.2014, 19:06
    #38617972
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 3146,"ODBC - ошибка вызова"
add_In_tmp_SQL_Table
текст?
...
Рейтинг: 0 / 0
17.04.2014, 19:14
    #38617980
1234_5678
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 3146,"ODBC - ошибка вызова"
запроса текст? вот:
Код: vbnet
1.
2.
3.
INSERT INTO tmp_SQL_Table ( [Sum], [Date], Firm, Code, SP5117 )
SELECT dbo_2014.Sum, dbo_2014.Date, dbo_2014.Firm, dbo_2014.Code, dbo_2014.SP5117
FROM dbo_2014;
...
Рейтинг: 0 / 0
17.04.2014, 20:39
    #38618057
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 3146,"ODBC - ошибка вызова"
а ddl временной таблицы?
есть вероятность наличия данных c null
...
Рейтинг: 0 / 0
17.04.2014, 23:16
    #38618155
гурД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 3146,"ODBC - ошибка вызова"
1234_5678Фразу: "Если первый файл Odbc.dll возможные пути является ODBC Driver Manager 1.x, то, скорее всего возникают проблемы." вообще не понял.
Так и знал, что нильзя давать в автоматическом переводе ))
http://support.microsoft.com/kb/160762/ en
...
Рейтинг: 0 / 0
17.04.2014, 23:55
    #38618170
1234_5678
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 3146,"ODBC - ошибка вызова"
вадяddl временной таблицыстесняюсь спросить: а это что?
...
Рейтинг: 0 / 0
18.04.2014, 01:24
    #38618192
1234_5678
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 3146,"ODBC - ошибка вызова"
вадяесть вероятность наличия данных c nullвот это вряд-ли: на сиквеле - база 1с, в перечисленных полях запроса не может быть Null-ей. Сумма, дата, фирма...
Хотя...если допустить, что кто-то "на той стороне" завёл, допустим, сумму, а дату не указал...ну...пусть так и что? На "моей стороне" в таблице нет ограничений "обязательное значение" и т.п.
...
Рейтинг: 0 / 0
18.04.2014, 06:12
    #38618225
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 3146,"ODBC - ошибка вызова"
1234_5678вадяесть вероятность наличия данных c nullвот это вряд-ли: на сиквеле - база 1с, в перечисленных полях запроса не может быть Null-ей. Сумма, дата, фирма...
Хотя...если допустить, что кто-то "на той стороне" завёл, допустим, сумму, а дату не указал...ну...пусть так и что? На "моей стороне" в таблице нет ограничений "обязательное значение" и т.п.

null это как вариант,
возможно, что есть несовпадения типа данных или ещё какие
а так как это происходит редко - то есть вероятность, что кто-то что-то не правильно вводит/правит
ddl
...
Рейтинг: 0 / 0
18.04.2014, 12:32
    #38618617
не гуру
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 3146,"ODBC - ошибка вызова"
авторМожно ли как-то получит более подробное описание ошибки?
Можно через АДО.
Код: 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.
Sub qq() 'Запрос к линкованной таблице
    Dim q As DAO.QueryDef
    On Error GoTo 1
    Set q = CurrentDb.QueryDefs("qq")
    q.ODBCTimeout = 1
    q.Execute dbFailOnError
    q.Close: Set q = Nothing
    Debug.Print "OK"
    Exit Sub
1:     If Err <> 0 Then _
        Debug.Print "1: " & Err.Description, Err.Number
End Sub

Sub qq1() 'ДАО Запрос к серверу
    Const con$ = "ODBC;DSN=North;APP=Microsoft Office 2003;" & _
                 "WSID=RADIOX;DATABASE=NorthWind;TABLE=dbo.Order Details"
    Dim q As DAO.QueryDef
    Dim s$
    On Error GoTo 1
    s = "UPDATE dbo.[Order Details] SET discount = discount+1"
    Set q = CurrentDb.CreateQueryDef("")
    q.Connect = con
    q.SQL = s
    q.ReturnsRecords = False
    q.Execute dbFailOnError
    q.Close: Set q = Nothing
    Debug.Print "OK"
    Exit Sub
1:     If Err <> 0 Then _
        Debug.Print "2: " & Err.Description, Err.Number
End Sub

Sub qq2() 'ADO command
    Const ConStr$ = "Driver={SQL Server};" & _
                    "Provider = Microsoft.Access.OLEDB.10.0;" & _
                    "Server=RadioX\RadioX;" & _
                    "Database=NorthWind;" & _
                    "User Id=sa;" & _
                    "Password=0;"
                    
    Dim q As ADODB.Command
    Dim con As ADODB.Connection
    Dim s$
    On Error GoTo 1
    
    s = "UPDATE dbo.[Order Details] SET discount = discount+1"
    Set con = New ADODB.Connection
    con.ConnectionString = ConStr
    con.Open
    
    Set q = New ADODB.Command
    q.ActiveConnection = con
    q.CommandType = adCmdText
    q.CommandText = s
    q.Execute
    Set q = Nothing
    con.Close: Set con = Nothing
    Debug.Print "OK"
    Exit Sub
1:     If Err <> 0 Then _
        Debug.Print "3 " & Err.Description, Err.Number
End Sub


Код: vbnet
1.
2.
3.
1: ODBC - ошибка вызова.     3146 
2: ODBC - ошибка вызова.     3146 
3 [Microsoft][ODBC SQL Server Driver][SQL Server]UPDATE statement conflicted with COLUMN CHECK constraint 'CK_Discount'. The conflict occurred in database 'NorthWind', table 'Order Details', column 'Discount'. -2147217900 

...
Рейтинг: 0 / 0
18.04.2014, 18:01
    #38619133
1234_5678
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 3146,"ODBC - ошибка вызова"
Код: vbnet
1.
2.
3.
4.
5.
"Provider = SQLOLEDB;" & _
                    "Data Source=SERVSQL;" & _
                    "Initial Catalog=<Имя базы>;" & _
                    "User Id=<Мой логин>;" & _
                    "Password=<Мой пароль>;"....

пользователю <Мой логин> не удалось войти в систему
...
Рейтинг: 0 / 0
18.04.2014, 18:33
    #38619158
1234_5678
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 3146,"ODBC - ошибка вызова"
Подключился, теперь новая проблема:
Код: vbnet
1.
2.
3.
Set rs = New ADODB.Recordset
rs.Open s, con
Debug.Print rs.RecordCount

получаю значение -1
а записи в таблице есть.
...
Рейтинг: 0 / 0
18.04.2014, 19:04
    #38619183
1234_5678
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 3146,"ODBC - ошибка вызова"
уже нашёл:
rs.Open s, con, adOpenKeyset
...
Рейтинг: 0 / 0
18.04.2014, 20:16
    #38619231
1234_5678
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 3146,"ODBC - ошибка вызова"
Тогда, с учётом всего сказанного получается так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
' задание строки подключения и т.д.
..........................................
Set rs = New ADODB.Recordset
rs.Open s, con, adOpenKeyset
If rs.RecordCount >0 Then
       rs.MoveFirst
       Do While Not rs.EOF
           CurrentDb.Execute "INSERT INTO tmp_SQL_Table ( [Sum], [Date], Firm, Code, SP5117 ) _
           & " VALUES(" &  rs.Sum & "," & rs.Date & ",'" & rs.Firm & "','" &  rs.Code & "','" &  rs.SP5117 & "');"
           rs.MoveNext
       Loop
End If
................................


всё правильно?
...
Рейтинг: 0 / 0
18.04.2014, 22:02
    #38619279
1234_5678
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 3146,"ODBC - ошибка вызова"
Примечание к коду:
Может можно и сразу добавить все записи в таблицу, но добавление их по одной - надежда, что в сообщении об ошибке, кроме "развёрнутого" текста, удастся получить и номер конкретной записи, на которой эта ошибка возникла...
...
Рейтинг: 0 / 0
19.04.2014, 13:06
    #38619464
не гуру
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 3146,"ODBC - ошибка вызова"
авторвсё правильно?
И близко не росло, как говаривала наша ботаничка.

Вот проверка Вашего примера, (могли-бы и сами проверить). Единственно, что можно - понять на какой ИДОРДЕР возникает ошибка - и то, если добавить выделенное красным.
Попробуйте сами понять, почему нет описания ошибки.
Код: 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.
Sub qq_ts()
    Dim conStr$, s$
    Dim rs As ADODB.Recordset
    On Error GoTo 1
    s = "select orderid, discount from dbo.[Order Details] order by 1"
    conStr = "Provider = SQLOLEDB;" & _
             "Data Source=Radiox\RadioX;" & _
             "Initial Catalog=NorthWind;" & _
             "User Id=sa;" & _
             "Password=0;"
    Set rs = New ADODB.Recordset
    rs.Open s, conStr, adOpenKeyset
    
    Debug.Print rs!orderid
    
    Do While Not rs.EOF
        'Order_Det - имя линкованной таблицы в базе Акцесс
        CurrentDb.Execute "update Order_Det set discount= " & _
        rs!discount + 1, dbFailOnError
        rs.MoveNext
    Loop
    rs.Close: Set rs = Nothing
1:  If Err <> 0 Then _
    Debug.Print "4: " & rs!orderid, Err.Description, Err.Number
End Sub


Код: vbnet
1.
2.
10248 
4: 10248      ODBC - ошибка вызова.        3146 

...
Рейтинг: 0 / 0
19.04.2014, 13:44
    #38619476
1234_5678
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 3146,"ODBC - ошибка вызова"
Ну, началась угадайка...
в моём понимании "ODBC - ошибка вызова" возникает, когда что-то с таблицей на сиквеле "не так" и до кода с "выделенным красным" дело вообще не дойдёт, всё произойдёт на строке с попыткой открыть соединение
проверить сейчас не могу: сиквел-сервер - на работе.
...
Рейтинг: 0 / 0
19.04.2014, 13:53
    #38619479
Ошибка 3146,"ODBC - ошибка вызова"
автор времянка очищается, но новых записей в ней не оказывается.
авторвсё произойдёт на строке с попыткой открыть соединение
Где логика?
...
Рейтинг: 0 / 0
19.04.2014, 18:32
    #38619574
1234_5678
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 3146,"ODBC - ошибка вызова"
Угадать<>Понятьавтор времянка очищается, но новых записей в ней не оказывается.
авторвсё произойдёт на строке с попыткой открыть соединение
Где логика?сами то поняли, что спросили?!
Времянка у меня очищается до обращения к линкованной таблице SQL-сервера, а пустой она остаётся, потому что это самое обращение заканчивается ошибкой и заполнение времянки не происходит.
Это - к первой цитате вашего сообщения.
Вторую цитату Вы выдрали из последнего поста, когда мы уже обсуждаем отказ от линкованной таблицы и подключение через АДО.
...
Рейтинг: 0 / 0
19.04.2014, 20:29
    #38619616
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 3146,"ODBC - ошибка вызова"
1234_5678
какие проблемы?
найти "неправильную" запись?
дак можно проще при вылете сравнить две таблицы и всё найти
...
Рейтинг: 0 / 0
19.04.2014, 20:57
    #38619628
1234_5678
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 3146,"ODBC - ошибка вызова"
вадя1234_5678
какие проблемы?
найти "неправильную" запись?
дак можно проще при вылете сравнить две таблицы и всё найтихм...вообще то проблема при подключении к SQL-серверу...
где искать эту "неправильную" запись?
и есть ли она вообще?
какие 2 таблицы сравнивать, времянку в базе и таблицу на сиквеле? а зачем? и как их можно сравнить, если ко второй нет соединения?
и кто установил, что вся проблема в "неправильной" записи?
не гуруЭтот же номер ошибки бывает, например, при нарушении условия на значение поля (констрэинт) в бд МС СКЛ
вот причём тут это - какое нарушение на значение может возникнуть при чтении таблицы? вадяnull это как вариант,
возможно, что есть несовпадения типа данных или ещё какие опять непонятка - несовпадение чего с чем? я читаю с сиквела текст и пытаюсь его добавить в числовое поле времянки?!
а откуда взялся текст в числовом поле сиквельной таблицы и как удалось это значение там сохранить?
...
Рейтинг: 0 / 0
19.04.2014, 22:01
    #38619654
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка 3146,"ODBC - ошибка вызова"
ты всё таки определись ошибка подключения или ?
судя по первому посту - ошибка с данными. может быть и первая же запись бракованная, я б вручную проверил.
если грешить на подключение - то странно, что редко.
возможно что-то связанно с доступностью таблицы исходника...
либо с сетью, если на разных машинах.
как нет соединения если ты заполняешь?
еслиб не было соединения - тыб всегда не смог занести данные
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ошибка 3146,"ODBC - ошибка вызова" / 25 сообщений из 32, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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