Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.12.2009, 16:31   #1
voam
Пользователь
 
Регистрация: 04.12.2009
Сообщений: 40
По умолчанию Связывание с внешней БД

Добрый день!

Подскажите, пожалуйста, возможно ли в Access задать относительный путь к внешней БД при связывании?

Поясню конкретнее: например, внешняя БД (скажем, текстовый файл с данными) всегда будет находиться в той же директории, что и сама БД Access. При этом необходимо, чтобы в случае перемещения mdb и txt файлов в другую директорию связь именно с этим файлом txt сохранялась.

Заранее большое спасибо за помощь!
voam вне форума Ответить с цитированием
Старый 28.12.2009, 17:56   #2
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте voam.
Путь к прилинкованным (подключенным) объектам внешних источников, в MS Access не может быть "относительным".
Но это не самая большая проблема, перелинковать (изменить связь) можно как "инструментами" самого MS Access, так и программно.
Евгений.

Последний раз редактировалось Teslenko_EA; 28.12.2009 в 17:58.
Teslenko_EA вне форума Ответить с цитированием
Старый 28.12.2009, 20:02   #3
voam
Пользователь
 
Регистрация: 04.12.2009
Сообщений: 40
По умолчанию

Евгений, большое спасибо за ответ!

Был бы очень признателен, если бы Вы хотя бы вкратце описали процедуру программного обновления пути, а в идеале - привели фрагмент кода VBA, осуществляющего эту операцию

Сразу отмечу, что с Access я "на вы" и использую его исключительно для упрощения работы в Excel.

Заранее большое спасибо за ответ!
voam вне форума Ответить с цитированием
Старый 28.12.2009, 20:10   #4
Abrakadabra
Форумчанин
 
Регистрация: 26.04.2008
Сообщений: 487
По умолчанию

На практике можно сделать так:
При открытии файла проверяется линковка, при ее отсутствии предлагается ввести путь..
Abrakadabra вне форума Ответить с цитированием
Старый 28.12.2009, 21:18   #5
voam
Пользователь
 
Регистрация: 04.12.2009
Сообщений: 40
По умолчанию

Цитата:
Сообщение от Abrakadabra Посмотреть сообщение
На практике можно сделать так:
При открытии файла проверяется линковка, при ее отсутствии предлагается ввести путь..
Проектируемая БД используется как промежуточный этап в вычислениях Excel. К сожалению, в данном случае, если в момент обработки запроса в Excel текстовый файл окажется не найден по заданному в БД пути, предложения на обновление файла не возникнет. Зато возникнет ошибка. Скорее всего, в данном случае необходимо создать некий обработчик события ЗапускПриложения в Access. При этом будет осуществляться связывание с таблицей, находящейся по указанному в обработчике файле. Подскажите, пожалуйста, каким образом возможно это реализовать?..

Очень признателен за помощь!
voam вне форума Ответить с цитированием
Старый 28.12.2009, 22:13   #6
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

voam, "привели фрагмент кода ..." можно, но конструкция строки подключения зависит от типа внешнего источника (текстовый файл, таблица БД mdb, файл dbf,...) для разных типов источников она разная.
"Исправить" подключение к текстовому файлу можно подобной конструкцией:
Код:
Function relinkTxt() 'связь с текстовым файлом в каталоге БД
Const sTextFile = "db.txt", sTextTable = "db", sDB = ";DATABASE="
Dim dbs As Database, o As Object, s$
Set dbs = CurrentDb: s = dbs.Name
sPath = Left(s, Len(s) - Len(Dir(s)) - 1)
If Len(Dir(sPath + "\" + sTextFile)) = 0 Then Exit Function 'отсутствует файл
For Each o In CurrentDb.TableDefs
   If Len((o.Connect)) > 0 Then
   ElseIf o.Name = sTextTable Then
       s = Left(s, InStr(1, s, sDB)) + sDB + sPath
       o.Connect = s: o.RefreshLink:  Exit For
   End If
Next
Set dbs = Nothing
End Function
надеюсь Ваших познаний в VBA достаточно для её применения.
Удачи Вам.
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 29.12.2009, 09:41   #7
voam
Пользователь
 
Регистрация: 04.12.2009
Сообщений: 40
По умолчанию

Евгений, доброе утро!

Посмотрите, пожалуйста, вложение: в чем ошибка?.. У меня почему-то не срабатывает ...

Большое спасибо за помощь!
Вложения
Тип файла: rar Test.rar (10.5 Кб, 18 просмотров)
voam вне форума Ответить с цитированием
Старый 29.12.2009, 10:22   #8
voam
Пользователь
 
Регистрация: 04.12.2009
Сообщений: 40
По умолчанию

Если я правильно понял, код необходимо немного поправить. Внесенные изменения в новом вложении. Сам код VBA работает, однако не происходит его автоматического запуска вместе с запуском самой БД...
Вложения
Тип файла: rar Test.rar (12.3 Кб, 11 просмотров)
voam вне форума Ответить с цитированием
Старый 29.12.2009, 20:38   #9
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте voam.
код действительно можно "немного поправить", и восстановление связи выполнять запуском формы.
Евгений.
Вложения
Тип файла: rar Test_2.rar (14.2 Кб, 21 просмотров)
Teslenko_EA вне форума Ответить с цитированием
Старый 30.12.2009, 09:27   #10
voam
Пользователь
 
Регистрация: 04.12.2009
Сообщений: 40
По умолчанию

Евгений, спасибо!

Буду разбираться.
voam вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Позднее связывание _Art_ Общие вопросы C/C++ 1 19.12.2009 12:53
Доступ к DOM фрейма с внешней страницы wall66 JavaScript, Ajax 2 20.05.2009 12:47
проблема с адресом внешней ссылки Bezdar Microsoft Office Excel 0 06.04.2009 12:11
Приостановка цикла для выполнения внешней программы Uomo Общие вопросы Delphi 3 04.04.2008 11:48