Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.04.08;
Скачать: [xml.tar.bz2];

Вниз

Как из 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 вся ветка

Форум: "Базы";
Текущий архив: 2007.04.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.045 c
2-1174045916
Kolan
2007-03-16 14:51
2007.04.08
А AV в модуле rtl100.bpl что значит ? Дубль два.


2-1173889736
Kolan
2007-03-14 19:28
2007.04.08
XMLDocument преврашает знаки тега <> в &amp;laquo;&amp; lt;&amp;raquo;


15-1173859797
zdm
2007-03-14 11:09
2007.04.08
общий внешний вид bds как d7


2-1173859619
AHTOH
2007-03-14 11:06
2007.04.08
Работа с файлами в NT/XP с ограниченными правами


15-1173776402
Vlad Oshin
2007-03-13 12:00
2007.04.08
рассказ. Мишка едет домой.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский