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 не те же драйвера? В общем запутался !!! |
|
|