powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ошибка 3146,"ODBC - ошибка вызова"
32 сообщений из 32, показаны все 2 страниц
Ошибка 3146,"ODBC - ошибка вызова"
    #38617782
1234_5678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Линкованная (через 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
Ошибка 3146,"ODBC - ошибка вызова"
    #38617787
Фотография гурД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Ошибка 3146,"ODBC - ошибка вызова"
    #38617853
1234_5678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Смысл статьи приблизительно понял, но - очень приблизительно.
1 В папке Windows файла Odbc.dll у меня нет, есть только ODBC.INI
2 В папке WINDOWS\system вообще нет ничего похожего
3.В папке WINDOWS\system32 есть файл Odbc32.dll

Фразу: "Если первый файл Odbc.dll возможные пути является ODBC Driver Manager 1.x, то, скорее всего возникают проблемы." вообще не понял.
...
Рейтинг: 0 / 0
Ошибка 3146,"ODBC - ошибка вызова"
    #38617901
не гуру
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Этот же номер ошибки бывает, например, при нарушении условия на значение поля (констрэинт) в бд МС СКЛ. Так что общих рекомендаций нет - ищите конкретные ошибки.
...
Рейтинг: 0 / 0
Ошибка 3146,"ODBC - ошибка вызова"
    #38617930
1234_5678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хм... хороший совет.
Если учесть, что из SQL-таблицы я просто читаю, то никаких "условий на значение" тут и рядом не стояло.
Где ж их найти, ошибки эти?
...
Рейтинг: 0 / 0
Ошибка 3146,"ODBC - ошибка вызова"
    #38617972
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
add_In_tmp_SQL_Table
текст?
...
Рейтинг: 0 / 0
Ошибка 3146,"ODBC - ошибка вызова"
    #38617980
1234_5678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
запроса текст? вот:
Код: 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
Ошибка 3146,"ODBC - ошибка вызова"
    #38618057
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а ddl временной таблицы?
есть вероятность наличия данных c null
...
Рейтинг: 0 / 0
Ошибка 3146,"ODBC - ошибка вызова"
    #38618155
Фотография гурД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1234_5678Фразу: "Если первый файл Odbc.dll возможные пути является ODBC Driver Manager 1.x, то, скорее всего возникают проблемы." вообще не понял.
Так и знал, что нильзя давать в автоматическом переводе ))
http://support.microsoft.com/kb/160762/ en
...
Рейтинг: 0 / 0
Ошибка 3146,"ODBC - ошибка вызова"
    #38618170
1234_5678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадяddl временной таблицыстесняюсь спросить: а это что?
...
Рейтинг: 0 / 0
Ошибка 3146,"ODBC - ошибка вызова"
    #38618192
1234_5678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадяесть вероятность наличия данных c nullвот это вряд-ли: на сиквеле - база 1с, в перечисленных полях запроса не может быть Null-ей. Сумма, дата, фирма...
Хотя...если допустить, что кто-то "на той стороне" завёл, допустим, сумму, а дату не указал...ну...пусть так и что? На "моей стороне" в таблице нет ограничений "обязательное значение" и т.п.
...
Рейтинг: 0 / 0
Ошибка 3146,"ODBC - ошибка вызова"
    #38618225
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1234_5678вадяесть вероятность наличия данных c nullвот это вряд-ли: на сиквеле - база 1с, в перечисленных полях запроса не может быть Null-ей. Сумма, дата, фирма...
Хотя...если допустить, что кто-то "на той стороне" завёл, допустим, сумму, а дату не указал...ну...пусть так и что? На "моей стороне" в таблице нет ограничений "обязательное значение" и т.п.

null это как вариант,
возможно, что есть несовпадения типа данных или ещё какие
а так как это происходит редко - то есть вероятность, что кто-то что-то не правильно вводит/правит
ddl
...
Рейтинг: 0 / 0
Ошибка 3146,"ODBC - ошибка вызова"
    #38618617
не гуру
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторМожно ли как-то получит более подробное описание ошибки?
Можно через АДО.
Код: 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
Ошибка 3146,"ODBC - ошибка вызова"
    #38619133
1234_5678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: vbnet
1.
2.
3.
4.
5.
"Provider = SQLOLEDB;" & _
                    "Data Source=SERVSQL;" & _
                    "Initial Catalog=<Имя базы>;" & _
                    "User Id=<Мой логин>;" & _
                    "Password=<Мой пароль>;"....

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

получаю значение -1
а записи в таблице есть.
...
Рейтинг: 0 / 0
Ошибка 3146,"ODBC - ошибка вызова"
    #38619183
1234_5678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
уже нашёл:
rs.Open s, con, adOpenKeyset
...
Рейтинг: 0 / 0
Ошибка 3146,"ODBC - ошибка вызова"
    #38619231
1234_5678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тогда, с учётом всего сказанного получается так:
Код: 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
Ошибка 3146,"ODBC - ошибка вызова"
    #38619279
1234_5678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Примечание к коду:
Может можно и сразу добавить все записи в таблицу, но добавление их по одной - надежда, что в сообщении об ошибке, кроме "развёрнутого" текста, удастся получить и номер конкретной записи, на которой эта ошибка возникла...
...
Рейтинг: 0 / 0
Ошибка 3146,"ODBC - ошибка вызова"
    #38619464
не гуру
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторвсё правильно?
И близко не росло, как говаривала наша ботаничка.

Вот проверка Вашего примера, (могли-бы и сами проверить). Единственно, что можно - понять на какой ИДОРДЕР возникает ошибка - и то, если добавить выделенное красным.
Попробуйте сами понять, почему нет описания ошибки.
Код: 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
Ошибка 3146,"ODBC - ошибка вызова"
    #38619476
1234_5678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну, началась угадайка...
в моём понимании "ODBC - ошибка вызова" возникает, когда что-то с таблицей на сиквеле "не так" и до кода с "выделенным красным" дело вообще не дойдёт, всё произойдёт на строке с попыткой открыть соединение
проверить сейчас не могу: сиквел-сервер - на работе.
...
Рейтинг: 0 / 0
Ошибка 3146,"ODBC - ошибка вызова"
    #38619479
автор времянка очищается, но новых записей в ней не оказывается.
авторвсё произойдёт на строке с попыткой открыть соединение
Где логика?
...
Рейтинг: 0 / 0
Ошибка 3146,"ODBC - ошибка вызова"
    #38619574
1234_5678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Угадать<>Понятьавтор времянка очищается, но новых записей в ней не оказывается.
авторвсё произойдёт на строке с попыткой открыть соединение
Где логика?сами то поняли, что спросили?!
Времянка у меня очищается до обращения к линкованной таблице SQL-сервера, а пустой она остаётся, потому что это самое обращение заканчивается ошибкой и заполнение времянки не происходит.
Это - к первой цитате вашего сообщения.
Вторую цитату Вы выдрали из последнего поста, когда мы уже обсуждаем отказ от линкованной таблицы и подключение через АДО.
...
Рейтинг: 0 / 0
Ошибка 3146,"ODBC - ошибка вызова"
    #38619616
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1234_5678
какие проблемы?
найти "неправильную" запись?
дак можно проще при вылете сравнить две таблицы и всё найти
...
Рейтинг: 0 / 0
Ошибка 3146,"ODBC - ошибка вызова"
    #38619628
1234_5678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя1234_5678
какие проблемы?
найти "неправильную" запись?
дак можно проще при вылете сравнить две таблицы и всё найтихм...вообще то проблема при подключении к SQL-серверу...
где искать эту "неправильную" запись?
и есть ли она вообще?
какие 2 таблицы сравнивать, времянку в базе и таблицу на сиквеле? а зачем? и как их можно сравнить, если ко второй нет соединения?
и кто установил, что вся проблема в "неправильной" записи?
не гуруЭтот же номер ошибки бывает, например, при нарушении условия на значение поля (констрэинт) в бд МС СКЛ
вот причём тут это - какое нарушение на значение может возникнуть при чтении таблицы? вадяnull это как вариант,
возможно, что есть несовпадения типа данных или ещё какие опять непонятка - несовпадение чего с чем? я читаю с сиквела текст и пытаюсь его добавить в числовое поле времянки?!
а откуда взялся текст в числовом поле сиквельной таблицы и как удалось это значение там сохранить?
...
Рейтинг: 0 / 0
Ошибка 3146,"ODBC - ошибка вызова"
    #38619654
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты всё таки определись ошибка подключения или ?
судя по первому посту - ошибка с данными. может быть и первая же запись бракованная, я б вручную проверил.
если грешить на подключение - то странно, что редко.
возможно что-то связанно с доступностью таблицы исходника...
либо с сетью, если на разных машинах.
как нет соединения если ты заполняешь?
еслиб не было соединения - тыб всегда не смог занести данные
...
Рейтинг: 0 / 0
Ошибка 3146,"ODBC - ошибка вызова"
    #38619685
1234_5678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сложно определиться - какая причина. да и тут несколько разных причин назвали...
я и создал пост, чтобы подсказали: как получить более вразумительное сообщение
процедура запускалась в 4 утра, 5 и 6 - ошибка таже, завтра поставил шедуллер на 7 утра...
(а вот в рабочее время этого безобразия нет, почему то)
авторкак нет соединения если ты заполняешь?вадя!!! что я заполняю?! как раз и не заполняется ничего - на строке запуска запроса на добавление из прилинкованной таблицы сиквела во временную таблицу в базе Акса.
на сеть не грешим, остальные же отчёты создаются, где не участвует эта.....1С.
мне посоветовали тут вместо связанной таблицы использовать АДО, типа, тогда и сообщение будет более вразумительным...
но теперь оказывается, что моя процедура всё-равно вернёт только сообщение "ODBC - ошибка вызова". Почему - не объяснили...
...
Рейтинг: 0 / 0
Ошибка 3146,"ODBC - ошибка вызова"
    #38619691
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1234_5678,

почитал топик, подумал, я б на вашем месте начал с проверки наличия соединения с сервером в момент начала выполнения запланированного задания

http://www.sql.ru/forum/933468/proverka-soedineniya-ado
...
Рейтинг: 0 / 0
Ошибка 3146,"ODBC - ошибка вызова"
    #38619697
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1234_5678,
может банально оказаться, что в нерабочее время работает и сервер и ваша станция, с которой запускается запланированная задача, а какой-нибудь промежуточный хаб (или свитч, коммуникатор) находится в комнате чересчур "ответственных" сотрудников, которые, уходя с работы, вырубают всё электричество у себя в комнате (типа - как бы чего не вышло) , а утром , приходя на работу, врубают всё снова, тогда связь с сервером можно проверить простым ping-ом ip-адреса сервера, можно это сделать bat- файлом через запланированное задание с перенаправлением вывода результата в файл, который потом проанализировать, чтобы убедиться потом , что связь есть (ну, или её нет)
...
Рейтинг: 0 / 0
Ошибка 3146,"ODBC - ошибка вызова"
    #38619730
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторОчень редко, но выскакивает указанная ошибка, времянка очищается, но новых записей в ней не оказывается.

процедура запускалась в 4 утра, 5 и 6 - ошибка таже, завтра поставил шедуллер на 7 утра...
(а вот в рабочее время этого безобразия нет, почему то)
...
Рейтинг: 0 / 0
Ошибка 3146,"ODBC - ошибка вызова"
    #38619731
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
противоричивые данные, как по ним можно дать рекомендации
поэтому присоединяюсь к мнению guest_rusimport
автори на сеть не грешим, ни есть правильное утверждение.
...
Рейтинг: 0 / 0
Ошибка 3146,"ODBC - ошибка вызова"
    #38620238
1234_5678Угадать<>Понятьпропущено...

пропущено...

Где логика?сами то поняли, что спросили?!
Времянка у меня очищается до обращения к линкованной таблице SQL-сервера, а пустой она остаётся, потому что это самое обращение заканчивается ошибкой и заполнение времянки не происходит.
Это - к первой цитате вашего сообщения.
Вторую цитату Вы выдрали из последнего поста, когда мы уже обсуждаем отказ от линкованной таблицы и подключение через АДО.

1. Ну, я думал, что у Вас времянка тоже на сервере (предупреждать надо)
2. Вообще - то если сервер остановлен или нет связи то возникает друга ошибка:
№ 3151 - ODBC - ошибка подключения
...
Рейтинг: 0 / 0
Ошибка 3146,"ODBC - ошибка вызова"
    #38621440
vladK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрите DAO.Errors, там м.б. ещё ошибка из которой ясно что к чему, а в VBA.Err остаётся только "Ошибка вызова".

http://support.microsoft.com/kb/209855

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Dim errX As DAO.Error

If Errors.Count > 1 Then
    For Each errX In DAO.Errors
        MsgBox "ODBC Error: " & errX.Number & ", " & errX.Description
    Next errX
Else
    MsgBox Err.Number & ", " & Err.Description
End If
...
Рейтинг: 0 / 0
32 сообщений из 32, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ошибка 3146,"ODBC - ошибка вызова"
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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