Alex-San |
Отправлено: 29.11.2003, 10:39 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 16
|
Добрый день!
У меня такой вопрос:
Есть мастер-таблица (справочник)
Есть детайл-таблица (рабочая)в которой все столбцы указаны как NOT NULL
Задача в том, чтобы создать для заполнения блок пустых записей, аналогичных по структуре детайл-таблице, в котором присутствуют поля справочника для заполнения и потом добавить их в детайл-таблицу, а не добавлять по одному как обычно
Мастер — таблица — марки автомобилей
Детайл- к-во и цвета
Блок примерно такой:
---------------------------
Модель !к-во! Цвет!
---------------------------
Ваз 2107 ! ! !
Ваз 2108 ! ! !
и т.д.
Подскажите как в Builder решить эту проблему? |
|
Admin |
Отправлено: 29.11.2003, 13:40 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Ну структура таблиц понятна.
CODE |
Marki
-------
ID Marka
1 ВАЗ2107
2 ВАЗ2108
3 ВАЗ2109
...
MVar
------
ID IDMarki MCount MColor
1 1 120 Red
2 2 50 Blue
3 1 15 Green
4 3 62 Red
5 2 50 Yellow
6 2 28 Red
|
А вот это непонятно, можно яснее ? :
QUOTE |
Задача в том, чтобы создать для заполнения блок пустых записей,
аналогичных по структуре детайл-таблице, в котором присутствуют
поля справочника для заполнения и потом добавить их в детайл-
таблицу, а не добавлять по одному как обычно |
|
|
Alex-San |
Отправлено: 29.11.2003, 15:19 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 16
|
Создать что-то типа курсора со структурой MVar, чтобы там все марки из справочника присутствовали...
А потом пользователь в DBGride заполняет поля с количеством и цветами....
Иначе придется добавлять каждую запись по отдельности, а это не есть хорошо..
И по кнопке сохранить все ненулевые (измененные) записи забрасываются в основную таблицу...
Не хочется создавать постоянные temp-таблицы. Может можно без них? |
|
Nick |
Отправлено: 30.11.2003, 09:08 |
|
Машинист паровоза
Группа: Участник
Сообщений: 247
|
Попробуй мое извращение.
DataSet — "Select m.id, m.Marka, v.MCount, v.MColor from marki m left join MVar v on m.id = v.IDMarki"
По событию onAfterPost вызывешь Процедуру на сервере
с параметром Марка, Количество, Цвет
Процедура должна сначала найти запись в детаил (MVar)
Если запись не найдена добавить иначе изменить.
В гриде запретить добавление и удаление. Marka — read only.
Процедуру написать ???
|
|
Alex-San |
Отправлено: 03.12.2003, 10:50 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 16
|
Победил!
Сделел временную таблицу с той-же структурой кроме ID.
При открвтии формы таблица чистится и через tibquery добавляются пустые записи, в которых уже проставлены марки.
в dbGridEh запрещено удаление и добавление, кроме того запрещено редактирование некоторых столбцов (ключевых).в компоненте tibdataset, который отобрадает таблицу CashedUpdate-false. Присле изменения запись сразу падает в временную таблицу.
Далее при сохранении блока вызывается хранимая процедура, которая контролирует заполненность полей и перебрасывает данные из временной таблицы в постоянную.
Задача теперь: как обойтись без временной таблицы? Хоть она и не тянет, но такой способ будет применяться еще в нескольких случаях для других таблиц, что потащит засобой столько-же временных таблиц..
Давным-давно я писал на фоксе и там было такое понятие как cursor — временная таблица в памяти. Жалко, что в семействе INTERBASE такого нет... |
|