![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите с Database [D5, D6, Paradox, ]
diMAN © (2001-12-13 15:48:00)Я использую Delphi 6 и работаю с базами данных в формате Paradox.
Когда все таблицы хранились в одной директории, для управления ими я использовал объект TDatabase.
Сейчас возникла необходимость разделить таблицы по двум директориям (справочники - отдельно, рабочие данные - отдельно).
Подскажите пожалуйста простой, но эффективный способ чтобы решить эту проблемму.
Я имею ввиду работу с транзакциями и с запросами, ведь теперь у меня два объекта TDatabase.
diMAN (2001-12-29 11:24:00) [1]>Desdechado Я это и хотел сказать, что почти все таблицы абсолютно идентичны.
>Nemesis Подскажи как можно работать с двумя алиасами, но чтобы транзакция выполняла своё назначение, т.е. обеспечивала неделимое обращения к базе данных.
Desdechado (2001-12-28 13:01:00) [2]2 diman
а что это меняет? разве только таблицы для опта и розницы АБСОЛЮТНО ИДЕНТИЧНЫ, тогда увы.
Nemesis (2001-12-28 12:01:00) [3]А можно работать и с двумя алиасами: просто синтаксис запросов поменяется.
Можна сотворить простеньки запрос на SQL билдере и ... синтаксис станет понятен. Я так делал даже для sQL 7.0
diMAN (2001-12-27 21:50:00) [4]>Desdechado Предприятие работает в сфере оптовой и розничной торговли, поэтому одна программа (одни таблицы) предназначена для учёта по оптовой торговле, а вторая программа (вторые таблицы) предназначены для учёта по розничной торговле.
Desdechado (2001-12-27 17:16:00) [5]а почему обе программы не работают с ОДНОЙ БД, используя только СВОИ таблицы и не трогая чужих?
Если справочники общие, явный намек на объединение.
diMAN (2001-12-27 15:17:00) [6]>Delirium У меня две программы работают с одними и теми же справочниками, а другие таблицы у каждой из них - свои, вот поэтому у меня есть три каталога: Base1 - таблицы первой программы, Base2 - справочники, Base3 - таблицы второй программы. Таблицы первой и второй программ имеют одинаковые имена. Поэтому Ваш совет свалить всё в одну кучу не подходит.
Delirium (2001-12-26 12:41:00) [7]Можно просто скопировать всё файлы к Exe-шнику, тогда пути прописывать не обязательно.
diMAN (2001-12-26 12:35:00) [8]Последовал совету panov и сделал Database1, который настроил на c:\AllBases\Base1 и присвоил ему алиас Base1 и DatabaseName - Base1, для всех таблиц указал в качестве DatabaseName - Base1, а имена таблиц, находящихся в c:\AllBases\Base2 записал в виде TableName = ..\Base2\table.db
Всё работает хорошо, единственное, что мне не нравится, во всех запросах, которые используют таблицы из Base2, для этих таблиц нужно указывать в теле SQL-запроса имя таблицы в виде "..\Base2\table.db". Вопрос, как это можно обойти или как сделать по-другому?
panov (2001-12-19 07:15:00) [9]Вполне можешь использовать разные каталоги для настольной БД.
Прописываешь алиас в TDatabase
В TTable и TQuery указываешь ссылку на TDatabase.
В TTable.TableName указываешь относительный путь таблицы, напр.
Table1.TableName := "banks\banks.DBF";
Table2.TableName := "customers\code.DBF";
И можешь работать с таблицами как с единой БД.
Дремучий (2001-12-18 23:18:00) [10]я бы просто отказался от деления данных
в 1С все валяется в одном каталоге...
diMAN (2001-12-18 21:13:00) [11]А как в этом случае управлять транзакциями?
Так что-ли:
Database1.StartTransaction;
Database2.StartTransaction;
...
...
Database1.Commit;
Database2.Commit;
Не приведёт ли это к тому, что если первая транзакция завершится успешно, а вторая - нет, то нарушится логика работы программы. Т.е. при таком подходе по-моему теряется смысл транзакции, как неделимого обращения к базе данных.
TonnyS (2001-12-13 18:43:00) [12]я использую query, для запросов к разным папкам пишется полный путь к таблицам. Что-то типа этого:
const
p1 : string="d:\data1\";
p2 : string="d:\data2\";
...
query1.sql.add("select t1.*, t2.*");
query1.sql.add("from ""+p1+"tbl1.db" t1, ""+p2+"tbl2.db" t2");