Вниз
Скачать: CL | DM;

Как из Delphi программно создать связь между двумя базами Access?   Найти похожие ветки 

← →
Dmitriy_info   (2007-01-10 13:44) [0]

Сам Access позволяет создать связь с таблицей из другой базы.
Как сделать это программно из Delphi?


← →
Правильный Вася   (2007-01-10 13:45) [1]

выполнить соответствующую SQL-команду?


← →
Savek   (2007-01-10 16:01) [2]

Если нет паролей можно гетерогенный запрос отослать...

select * from table
union
select * from table in "c:\...OtherBase.mdb"


← →
Dmitriy_info   (2007-01-11 09:44) [3]

to Savek

Интересно! Я не знал про возможность указывать путь напрямую.
Но минус в том, что все базы запаролены.

to Правильный Вася

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

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

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

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

Но это слишком сложно для пользователей.
Мне нужен программный способ установления связей между базами.


← →
Правильный Вася   (2007-01-11 10:47) [4]


> Правым кликом вызываем меню.Выбираем пункт "Связь с таблицами.
> .."Указываем путь к файлу *.mdb, с которым хотим установить
> связь.Выбираем таблицу, с которой хотим установить связь.

для этого явно есть некий SQL, который можно выполнить самому


← →
ЮЮ ©   (2007-01-11 11:05) [5]

На каждый месяц по файлу.

Остановись хотябы, на
 текущая
 архив за год
 более старые архимы


← →
Dmitriy_info   (2007-01-11 11:18) [6]

to Правильный Вася

> для этого явно есть некий SQL, который можно выполнить самому

Какой именно. Можно по конкретнее?

to ЮЮ

> Остановись хотябы, на  текущая  архив за год  более старые
> архимы

Я привел пример подчеркивающий работу с некоторым количеством файлов.
Не стоит обсуждать идеалогию примера. Она выдумана для уточнения моего вопроса.
Мне нужен механизм связывающий две или более БД программно.

Надеюсь на получение ответов подкрепленных примерами.


← →
Savek   (2007-01-11 11:24) [7]

Мой предшественник так и делал, в результате получилось янв1998.mdb ... дек2004.mdb куча баз. О какой то статистике не могло быть и речи (перебор занимал полдня). Пришлось слить все это творчество в одну базу Архив.mdb с двумя таблицами Master и Detail. На запрос уходит десятки секунд(!) при количестве записей подчиненной таблице порядка 1млн.

Советую задуматься над структурой


← →
sniknik ©   (2007-01-11 11:33) [8]

> Но минус в том, что все базы запаролены.
с паролем на базу
select * from table in "" [MS Access;DATABASE=c:\...OtherBase.mdb;PWD=111]

> для этого явно есть некий SQL, который можно выполнить самому
если и есть то я его не видел, т.е. именно для создания аналогичного линка как описано, встречал только через обьекты dao (наверняка есть и в jet, если поискать...)
пример их хелпа (бейсик)
   ...
   Dim dbsCurrent As Database
   Dim tdfLinked As TableDef

   " Open a database to which a linked table can be
   " appended.
   Set dbsCurrent = OpenDatabase("DB1.mdb")

   " Create a linked table that points to a Microsoft
   " SQL Server database.
   Set tdfLinked = _
       dbsCurrent.CreateTableDef("AuthorsTable")
   tdfLinked.Connect = _
       "ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers"
   tdfLinked.SourceTableName = "authors"
   dbsCurrent.TableDefs.Append tdfLinked
...


← →
sniknik ©   (2007-01-11 11:39) [9]

> наверняка есть и в jet, если поискать...
ага, есть, тот же TableDef Object (счас посмотрел). вот примера в нем нет (но должен быть аналогичным)


← →
Dmitriy_info   (2007-01-11 11:53) [10]

Я сжимаю базу при помощи "jro.JetEngine".
...
var
 V: Variant;
begin
V:=CreateOleObject("jro.JetEngine");
V.CompactDatabase("...", "..."); // сжимаем
...

Или "access.application".
Может с его помощью можно связь установить?


← →
sniknik ©   (2007-01-11 12:54) [11]

jro немного не то, там фактически одна уже используемая тобой функция да репликация.
см. хелп (JETSQL40.CHM).

> Или "access.application".
а это зачем?
> Может с его помощью можно связь установить?
наверняка можно тк. это сам access (программа) и есть, но вот делать этого я бы не стал, какой смысл вообще притягивать прогу ms offise-а для работы с базой. она тогда должна распространятся с твоей программой... тк. как бы частью ее становится.


← →
Dmitriy_info   (2007-01-17 10:21) [12]

to Savek
Вы привели пример SQL с явным указанием пути к БД.
А как быть, если нужно ввести пароль?



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.029 c
15-1173978662
Vendict
2007-03-15 20:11
2007.04.08
Подскажите программу.


15-1173699650
Knight
2007-03-12 14:40
2007.04.08
Книга Фаронова по базам данных стоит того?


15-1174169491
MikePetrichenko
2007-03-18 01:11
2007.04.08
Весеннее обострение?


15-1173640857
Cyrax
2007-03-11 22:20
2007.04.08
Активные форумы по CASE-системам...


10-1131006759
Misha_00
2005-11-03 11:32
2007.04.08
Передать имя пользователя чере сервер приложений в базу




   Наверх