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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 10.01.2007, 13:38   #1
Dimm
 
Регистрация: 10.01.2007
Сообщений: 5
Вопрос Как из Delphi программно создать связь между двумя базами Access?

Сам Access позволяет создать связь с таблицей из другой базы.
Как сделать это программно из Delphi?
Dimm вне форума
Старый 11.01.2007, 06:57   #2
Virtson
Владимир М.
Участник клуба
 
Аватар для Virtson
 
Регистрация: 30.10.2006
Сообщений: 1,289
По умолчанию

что значит связь с таблицей из другой базы?
пример.
Берегите друг друга!
Virtson вне форума
Старый 11.01.2007, 08:27   #3
Dimm
 
Регистрация: 10.01.2007
Сообщений: 5
По умолчанию

Открываем Access.
Правым кликом вызываем меню.
Выбираем пункт "Связь с таблицами..."
Указываем путь к файлу *.mdb, с которым хотим установить связь.
Выбираем таблицу, с которой хотим установить связь.
Готово.
Dimm вне форума
Старый 11.01.2007, 13:07   #4
Virtson
Владимир М.
Участник клуба
 
Аватар для Virtson
 
Регистрация: 30.10.2006
Сообщений: 1,289
По умолчанию

Access просто запоминает путь до 2 файла БД и названия таблиц.
похоже, что в базу прописывается.

а как в программе используется ?
Берегите друг друга!
Virtson вне форума
Старый 12.01.2007, 10:03   #5
Dimm
 
Регистрация: 10.01.2007
Сообщений: 5
По умолчанию

Верно. Access запоминает путь. Делает аналог ссылки на указанную таблицу.

Есть БД, в ней хранятся быстро устаревающие данные.
Старые данные замедляют работу.
Стирать их нельзя. Они (редко) нужны для построения отчетов.

Я предполагаю работать с основной БД, а устаревшую информацию сливать в другие *.mdb файлы. На каждый год по файлу.

При построении отчета, я просто хочу подключать нужный *.mdb файл к основному. Вот тогда я и сделаю:
SELECT Таблица1.Num, Таблица2.RAsmer
FROM Таблица1 INNER JOIN Таблица2 ON Таблица1.Num = Таблица2.Num;

Руками можно подключить базу следующим образом:
Открываем Access.
Правым кликом вызываем меню.
Выбираем пункт "Связь с таблицами..."
Указываем путь к файлу *.mdb, с которым хотим установить связь.
Выбираем таблицу, с которой хотим установить связь.
Готово.

Но это слишком сложно для пользователей.
Мне нужен программный способ установления связей между базами.
Dimm вне форума
Старый 12.01.2007, 12:48   #6
Virtson
Владимир М.
Участник клуба
 
Аватар для Virtson
 
Регистрация: 30.10.2006
Сообщений: 1,289
По умолчанию

интересно. схожие задачи.

динамически создаю таблицу.
переписываю старые данные (только основные поля).
но все в одной БД.

до вашего решения сам не дошел.
найду решение - обязательно скажу.
Берегите друг друга!
Virtson вне форума
Старый 12.01.2007, 14:35   #7
Dimm
 
Регистрация: 10.01.2007
Сообщений: 5
По умолчанию

Очень на это надеюсь.

Вроде я нащупал кое-что.
2 варианта

В Delphi, закладка Servers - AccessApplication
но у меня нет описания...

или через CreateOleObject
---------------------------
var AccessApp:Variant;
...
AccessApp := CreateOleObject('Access.Application ');

AccessApp.OpenCurrentDatabase('D:\M asterDB.mdb', false, '');
for i := 0 to AccessApp.CurrentDb.TableDefs.Count - 1 do
if AccessApp.CurrentDb.TableDefs[i].Attributes = 1073741824 then //прилинкованная таблица
begin
tblName := AccessApp.CurrentDb.TableDefs.Item[i].Name;
AccessApp.CurrentDb.TableDefs.Delet e(tblName);
AccessApp.CurrentDb.CreateTableDef( tblName);
AccessApp.CurrentDb.TableDefs.Item[i].Properties.Item['Connect'].value := '; DATABASE=D:\SecretDB.mdb';
AccessApp.CurrentDb.TableDefs.Item[i].Properties.Item['SourceTableName'].Value := tblName; // !!! Невозможно присвоить значение, если объект является частью семейства
AccessApp.CurrentDb.TableDefs.Appen d(tblName);
---------------------------
Но пока этот код выдает ошибки.
Dimm вне форума
Закрытая тема


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Связь между формами KiberJo Общие вопросы Delphi 20 22.07.2008 21:40
Копирование файлов и каталогов перетаскиваением между двумя окнами SANTA_KLAUD Общие вопросы Delphi 3 28.05.2008 21:52
Как программно через delphi создать папку на диске? VenMaster Общие вопросы Delphi 5 25.05.2008 21:09
Связь Delphi с Access Light БД в Delphi 7 14.04.2008 18:09
Надо в RichEdit Удалить все строки между двумя пустыми Stas))) Компоненты Delphi 7 28.05.2007 16:49