powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / ODBC call failed
17 сообщений из 17, страница 1 из 1
ODBC call failed
    #39777206
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
Уважаемый форум,

Никак не могу понять, что за хрень...
Есть база Access Office 365 с таблицами, связанными с SQL server-ом. При запуске базы эти таблицы должны перелинковаться к серверу:

Код: sql
1.
2.
3.
4.
5.
6.
For Each tb In CurrentDb.TableDefs
    If Left(tb.Connect, 4) = "ODBC" Then
       tb.Connect = "ODBC;DRIVER=SQL Server Native Client 10.0;SERVER=SQLserver;;Trusted_Connection=Yes;APP=Microsoft Office 2016;DATABASE=MyDB;"
       tb.RefreshLink                      <= здесь вылетает ошибка ODBC call failed с кодом 3146 
End If
Next tb



Если руками создать файл .dsn и перелинковать таблицы, на этом месте все равно ошибка. Убираю этот код и все работает. Вопрос: как правильно организовать перелинковку таблиц к серверу, чтобы на любой машине работало полностью автоматически, без вызова менеджера связей таблиц и т.д. Спасибо!
...
Рейтинг: 0 / 0
ODBC call failed
    #39778964
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
Что, никто не знает? Офигеть... :(
...
Рейтинг: 0 / 0
ODBC call failed
    #39779095
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFK
Код: sql
1.
2.
3.
4.
5.
6.
For Each tb In CurrentDb.TableDefs
    If Left(tb.Connect, 4) = "ODBC" Then
       tb.Connect = "ODBC;DRIVER=SQL Server Native Client 10.0;SERVER=SQLserver;;Trusted_Connection=Yes;APP=Microsoft Office 2016;DATABASE=MyDB;"
       tb.RefreshLink                      <= здесь вылетает ошибка ODBC call failed с кодом 3146 
End If
Next tb



А почему у Вас дважды ;; идут?
Как называется у Вас сервер? Именно "SQLserver"?
Вы точно установили драйвер "SQL Server Native Client 10.0"?
...
Рейтинг: 0 / 0
ODBC call failed
    #39779241
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
studieren,

Двойные ; уже давно заметил и убрал.
Имя сервера, ясное дело, не SQLServer, а конкретное имя сервера.
Драйвер есть точно, так как его показывает в списке доступных драйверов, если создавать линк руками через .dsn файл.
...
Рейтинг: 0 / 0
ODBC call failed
    #39779295
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте вручную линковать хотя бы одну таблицу, а потом посмотрите через "Диспетчер связанных таблиц" строку подключения. Думаю, что проблема всё-таки в Вашей строке подключения.

А если и это не поможет, то попробуйте вот такое шаманство. Не уверен, что поможет.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
Dim DB As DAO.Database
Set DB = CurrentDB
For Each tb In DB.TableDefs
    If Left(tb.Connect, 4) = "ODBC" Then
       tb.Connect = "ODBC;DRIVER=SQL Server Native Client 10.0;SERVER=SQLserver;;Trusted_Connection=Yes;APP=Microsoft Office 2016;DATABASE=MyDB;"
       tb.RefreshLink
End If
Next tb
...
Рейтинг: 0 / 0
ODBC call failed
    #39779475
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
studieren,

Пробовал. Линкую таблицы вручную через .dsn, запускаю код - все работает. Вопрос в том, чтобы не линковать таблицы вручную на каждой пользовательской машине - это раз. Во-вторых, при каждом запуске необходимо делать refresh для линкованых таблиц, чтобы актуализировать данные в них. А если линк слетит, это опять вручную линковать. Поэтому хотелось бы добиться автоматической линковки и refresh. Что интересно, такая трабла только в одном офисе, в остальных все работает на ура на полном автомате.

Насчет кода: а в чем принципиальная разница? Я использую АДО, вы - ДАО.
...
Рейтинг: 0 / 0
ODBC call failed
    #39779489
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFKВопрос в том, чтобы не линковать таблицы вручную на каждой пользовательской машине - это раз. Во-вторых, при каждом запуске необходимо делать refresh для линкованых таблиц, чтобы актуализировать данные в них. А если линк слетит, это опять вручную линковать. Поэтому хотелось бы добиться автоматической линковки и refresh.

попробуй refresh не использовать совсем, при старте тупо удаляй таблицы игнорируя ошибки (даже если таблицы не привязаны) и тут же привязывай... ну, смысл вместо refresh - комбинация удалить/привязать
...
Рейтинг: 0 / 0
ODBC call failed
    #39779578
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFKНасчет кода: а в чем принципиальная разница?
Разница в том, что ты получаешь Database каждый раз по новому, а studieren 21819701 предлагает получить единажды и использовать ея всё время (он же выделил различие). Порой разница разительная...
IFKЯ использую АДО, вы - ДАО.Где?
...
Рейтинг: 0 / 0
ODBC call failed
    #39779661
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
ПанургIFKНасчет кода: а в чем принципиальная разница?
Разница в том, что ты получаешь Database каждый раз по новому, а studieren 21819701 предлагает получить единажды и использовать ея всё время (он же выделил различие). Порой разница разительная...
IFKЯ использую АДО, вы - ДАО.Где?


Пардон, я просто не привел вначале строки
Код: sql
1.
2.
Dim db As New ADODB.Connection
Set db = CurrentProject.Connection



Все бы хорошо, но непонятно, почему на одних машинах работает, а на других - нет. Отсюда и вопрос, как сделать правильно и/или как проверить, чего не хватает на тех компах, где не работает?
...
Рейтинг: 0 / 0
ODBC call failed
    #39779718
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А может попробовать так Связать ACCESS 2010 с SQL Server 2008 R2
...
Рейтинг: 0 / 0
ODBC call failed
    #39779741
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFKПардон, я просто не привел вначале строки
Код: sql
1.
2.
Dim db As New ADODB.Connection
Set db = CurrentProject.Connection

Да нет уж. Даже если ты провозгласил переменную db как Connection (обычно всё таки традиционно это объект DAO.Database , ну да ладно), то это не значит что и ранее приведённый тобой код от этого использует ADO !
...
Рейтинг: 0 / 0
ODBC call failed
    #39779746
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
Панург,

Хм. Объяснитесь, пожалуйста. В референсах тоже ДАО не включено. :)
...
Рейтинг: 0 / 0
ODBC call failed
    #39779780
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFKХм. Объяснитесь, пожалуйста. В референсах тоже ДАО не включено. :)А чего объяснятся? Не обязательно подключать библиотеки, чтобы работать с их объектами.


IFK
Код: sql
1.
2.
3.
4.
5.
6.
For Each tb In CurrentDb.TableDefs
    If Left(tb.Connect, 4) = "ODBC" Then
       tb.Connect = "ODBC;DRIVER=SQL Server Native Client 10.0;SERVER=SQLserver;;Trusted_Connection=Yes;APP=Microsoft Office 2016;DATABASE=MyDB;"
       tb.RefreshLink                      <= здесь вылетает ошибка ODBC call failed с кодом 3146 
End If
Next tb

Это код основывается на объектах библиотеки DAO. (Интересно как у тебя типизирована переменная tb ? Хотя, при некоторых условиях это не обязательно.)
...
Рейтинг: 0 / 0
ODBC call failed
    #39779818
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
Панург,

угу, уже сам понял, что ступил. :)
Код: sql
1.
Dim tb as TableDef
...
Рейтинг: 0 / 0
ODBC call failed
    #39779844
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
studierenПопробуйте вручную линковать хотя бы одну таблицу, а потом посмотрите через "Диспетчер связанных таблиц" строку подключения. Думаю, что проблема всё-таки в Вашей строке подключения.

А если и это не поможет, то попробуйте вот такое шаманство. Не уверен, что поможет.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
Dim DB As DAO.Database
Set DB = CurrentDB
For Each tb In DB.TableDefs
    If Left(tb.Connect, 4) = "ODBC" Then
       tb.Connect = "ODBC;DRIVER=SQL Server Native Client 10.0;SERVER=SQLserver;;Trusted_Connection=Yes;APP=Microsoft Office 2016;DATABASE=MyDB;"
       tb.RefreshLink
End If
Next tb



Попробовал и так - результат один и тот же. Код отрабатывает без ошибки, но при попытке открыть таблицу вываливается ошибка ODBC call failed. Переподключаю руками через .dsn - все открывается. Если перезаписать файл базы, то все повторяется с начала. Перестал понимать вообще что-либо. :(
...
Рейтинг: 0 / 0
ODBC call failed
    #39779891
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFK...
Попробовал и так - результат один и тот же. Код отрабатывает без ошибки, но при попытке открыть таблицу вываливается ошибка ODBC call failed. Переподключаю руками через .dsn - все открывается. Если перезаписать файл базы, то все повторяется с начала. Перестал понимать вообще что-либо. :(

Ну тогда однозначно, у Вас неправильная строка подключения. Вы не тем текстом хотите подключиться к серверу и поэтому получаете ошибку ODBC.
...
Рейтинг: 0 / 0
ODBC call failed
    #39779941
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
Джентльмены, поборол проблему следующим образом:
- батник создает новое системное dsn подключение строкой

Код: sql
1.
%WINDIR%\System32\odbcconf.exe CONFIGDSN "SQL Server" "DSN=имя дсн|Description=описание дсн|SERVER=имя сервера|Trusted_Connection=Yes|Database=имя базы"


- аксесс запускает батник и обновляет связанные таблицы

Все работает, всем спасибо!
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / ODBC call failed
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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