Форум: "Базы";
Текущий архив: 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.044 c