C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Nested table или Master/Detail ?, Что и когда дучше использовать?
CoderDecoder
Отправлено: 31.10.2003, 13:21


Ученик-кочегар

Группа: Участник
Сообщений: 26



У меня следующая задача:

программа по учету продажи мебели. Вроде бы всё просто, но ...

необходимо разделять мебель на составляющие (Стол, Стулл, Горка и т.д.). В момент какой либо операции, скажем продажи, пользователь должен иметь возможность продать из комплекта (например спальной мебели) только некоторые комплектующие (например кровать и комод, а шифонер и тумбочка остается на складе). Я реализовал это через компонет TClientDataset, где одно из полей таблицы является также DataSet и связана со второй таблицей. Вроде бы всё работает, но иногда пропадают записи из таблицы комплектующих или добавляются в ту же таблицу, но комплектующим другого наименования мебели. Весь код проверяю, ну нет зацепки ... Думаю может глюки компонента.
Вот я и решил перейти на TTable, только вот хочу узнать, что лучше использовать NestedTable или Master/Detail relationship.

Подскажите, кто имел дело с такими задачами что и где лучше использовать.
Admin
Отправлено: 01.11.2003, 20:24


Владимир

Группа: Администратор
Сообщений: 1190



Кому как привычней.
Я привык работать и думать через master/detail.
И потом с какой базой данных и через какие компоненты.

Посмотрите пример http://cbuilder.ru/Upload/Comp.rar (102 Кб)

Там через master/detail работа с базой FireBird (InterBase)
через компоненты FIBPlus. Комплектация компьютеров на
предприятии через комплектующие (составляющие),
ввод этих комплектующих через накладные в базу,
комплектация / разукомплектация из них компьютеров,
ремонт комплектующих, списание, история (лог) движения.
(Ввод через клавишу Insert, удаление через Delete )

---

Что касается ссылочной целостности базы данных, то в приличной
базе данных (типа FireBird/InterBase) для этого полезно использовать
механизмы внешних ключей и триггеров.


QUOTE

Вроде бы всё работает, но иногда пропадают записи из таблицы комплектующих или добавляются в ту же таблицу, но комплектующим другого наименования мебели. Весь код проверяю, ну нет зацепки ... Думаю может глюки компонента.


Насчет глюков компонента сомневаюсь, скорее всего код.
Хотя важно и что за база — и если работаете через ADO,
то без Update к С++Builder глюки могут быть,
или если база — Paradox.
CoderDecoder
Отправлено: 19.12.2003, 11:58


Ученик-кочегар

Группа: Участник
Сообщений: 26



База Paradox. Решил использовать Nested, так как в Mster/Deatail связь устанавливается по уникальным значениям, что мне не подходит, так как у меня скажем в таблице Продажа будет множество записей по одному скажем товару, у которого комплектующие естественно одинаковые. А проблема вышла с NestedTable. Стоит TTable+DataSource к нему (основная таблица скажем Продажа), далее ставлю TNestedtable+DataSource (таблица комплектующих). В основной таблице создаю в FieldEditor-e ещё одно поле type — DataSet, size — 10.
При активации таблицы гооврит такого поля нет. В Database Desktope-e так же добавляю поле, но не знаю какой тип ставить, перепробовал все — exception: ожидается DataSet, в действительности — String (если ставить type Alpha). В хелпе сказано, что Nesned работает только с базами , у которых есть драйвер BDE и пример Oracle8. А что у Paradox-a не те же драйвера? В общем запутался !!!

Вернуться в Работа с базами данных в C++Builder