Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

IBDataSet, Master-Detail и Insert [D7, FireBird 1.5]


Страницы:   1 2 3 4 5 6

grav ©   (2008-05-20 09:45:00) 

Есть три связанных IBDataSet.
MasterDS-DetailDS1-DetailDS2. Соответственно Предприятие-Здания-данные по зданию. Предприятий много, у каждого прежприятия зданий много, у каждого здания одна запись с данными (площадь, стоимость и т.д.).
Список предприятий не меняется. Здания могут добавляться, редактироваться и удаляться. Данные по зданию могут редактироваться, удаляться вместе со зданием и добавляться вместе со зданием.
Встака записей в таблицу здания проходит без проблем. Вставка в тблицу с данными по зданию проходит без ошибок, но в таблицу не попадают. Почему? Как отследить что не так, если никаких ошибок не выводится?


Reindeer Moss Eater   (2008-05-22 11:37:00) [41]

Чего не так то?

Тебе про это сама ошибка своим текстом рассказывает. Что там у тебя не так.


Sergey13   (2008-05-22 11:33:00) [42]

> [62] grav   (22.05.08 11:22)
> Чего не так то?

Например цикл как-нибудь криво написан. Но ты же реальный код не даешь - одни огрызки.


grav   (2008-05-22 11:22:00) [43]

Через раз это вот почему.
В таблицу в пределах одной транзакции вставляется несколько записей.
Если в предыдущей записи данные в поле присутствуют, то при вставке очередной записи с нулевым полем вылетает ошибка. Если запись с нулевым полем первая, то ошибку нет.
Чего не так то?


Reindeer Moss Eater   (2008-05-22 11:01:00) [44]

через раз ошибка конвертирования из строки "".

А ты вызывай exec через этот раз и будет счастье


grav   (2008-05-22 10:57:00) [45]

Вопрос не в тему.
Есть в таблице поле Load типа Integer. Произвожу вставку данных через параметр :LOAD из поля LoadEd (TEdit).
AddSQL.ParamByName('Load').AsString:=LoadEd.Text;

Когда поле LoadEd пустое, через раз работает без ошибок, через раз ошибка конвертирования из строки "".


Виталий Панасенко   (2008-05-21 14:51:00) [46]


> У меня сложилось впечатление, что Insert - означает использование
> запроса из InsertSQL и больше ничего. Post, видимо, аналогичен
> IBQuery.ExecSQL; Я прав?

примерно...это все сделано, ИМХО, для однотипности оперций..все наследники TDataSet имеют переопределенные методы insert/Append/AppendRecord/Delete/Edit.. только для разных движков содержимое разное.. для Paradox Edit еще и блокирует запись, для остальных по разному


grav   (2008-05-21 11:01:00) [47]


> Виталий Панасенко ©   (21.05.08 10:30) [55]
> А что, было так ?!

Да, было - grav   (20.05.08 11:46) [30]
Мне представлялось логичным это. Т.к. обычно для вставки я использовал IBQuery, последовательно исполняя запросы.
В чем вообще смысл Insert и Post?
Что происходит при выполнении данных команд (или чего это)?
У меня сложилось впечатление, что Insert - означает использование запроса из InsertSQL и больше ничего. Post, видимо, аналогичен IBQuery.ExecSQL; Я прав?


Sergey13   (2008-05-21 10:57:00) [48]

> [56] grav   (21.05.08 10:54)

Это просто компоненты типа датасет (со всеми вытекающими от сюда свойствами) которые не опираются ни на какие данные из БД. Типа временных таблиц, но не сервере, а на клиенте.


grav   (2008-05-21 10:54:00) [49]


> Sergey13 ©   (21.05.08 09:55) [54]


> Я такие вставки предпочитаю делать используя таблицы в памяти

Ну этого я не умею, первый раз слышу про такое. Надо будет почитать


Виталий Панасенко   (2008-05-21 10:30:00) [50]

А что, было так ?!

> MasterDS.Insert;
> DetailDS1.Insert;
> DetailDS2.Insert;
> ...
> MasterDS.Post;
> DetailDS1.Post;
> DetailDS2.Post;


Sergey13   (2008-05-21 09:55:00) [51]

> [53] grav   (21.05.08 09:34)
> И нельзя так:

Ну это в общем то и логично. Я и писал об этом

> [51] Sergey13 ©   (20.05.08 16:39)
> при заведении связанных М-Д данных пользоваться "гридовой"
> логикой не совсем правильно, ИМХО.

Ты вставляешь связанные многоуровневые данные. Данные верхнего уровня необходимы для данных нижнего. Но БД на момент ввода их не знает - отсюда и проблемы.
Я такие вставки предпочитаю делать используя таблицы в памяти (типа RxMemoryData). Заполняю их вводимыми сущностями, а потом (по кнопке Сохранить) одной транзакциейвставляю их в БД с помощью скрипта.


grav   (2008-05-21 09:34:00) [52]


> Sergey13 ©   (20.05.08 16:39) [51]


> В мастер новая запись вставляется, в первый детайл вставляется,
>  в во второй детайл не вставляется? Так?

Да, так.
Вот так вставляется >grav   (20.05.08 13:52) [42]
Видимо надо делать так:

MasterDS.Insert;
.....
MasterDS.Post;
DetailDS1.Insert;
...
DetailDS1.Post;
DetailDS2.Insert;
....
DetailDS2.Post;

И нельзя так:

MasterDS.Insert;
DetailDS1.Insert;
DetailDS2.Insert;
...
MasterDS.Post;
DetailDS1.Post;
DetailDS2.Post;


grav   (2008-05-20 17:50:00) [53]


> Anatoly Podgoretsky ©   (20.05.08 16:29) [50]


> Так как насчет девочки то?

Она в Нижнем Новгороде что ли?


Sergey13   (2008-05-20 16:39:00) [54]

> [42] grav   (20.05.08 13:52)

Я кажется понял твою проблему.
Итак:
В мастер новая запись вставляется, в первый детайл вставляется, в во второй детайл не вставляется? Так?
Похоже на то что первый детайл при посте не знает ID своей новой зписи. Он узнает ее при переоткрытии.
Установлено ли свойство GeneratorField (кажется так называется) у первого детайла (который здания)?
И вообще, при заведении связанных М-Д данных пользоваться "гридовой" логикой не совсем правильно, ИМХО.


Anatoly Podgoretsky   (2008-05-20 16:29:00) [55]

grav   (20.05.08 16:00) [47]
Жизнь она накажет строго.
Так как насчет девочки то?


Anatoly Podgoretsky   (2008-05-20 16:28:00) [56]

> grav  (20.05.2008 15:58:46)  [46]

Ни фига себе мелкие, на 54 миллиона записей ошибся


grav   (2008-05-20 16:03:00) [57]


> Anatoly Podgoretsky ©

Лучше бы по делу написали что нибудь. Вроде бы не раз от вас получал дельные советы.

Непонятна логика (правила) работы с IBDataSet. В интернете не нашел ничего.
Вот есть MasterDS-DetailDS1-DetailDS2. Делается вставка в DetailDS1 и DetailDS2.
Каков порядок Insert и Post в этих двух датасетах?


grav   (2008-05-20 16:00:00) [58]


> Anatoly Podgoretsky ©   (20.05.08 15:15) [45]

Не может. Производится целевое обследование, есть выборка и чуть более 6 тыс организаций. У всех есть здания, во всх зданиях есть объекты.


grav   (2008-05-20 15:58:00) [59]


> Anatoly Podgoretsky ©   (20.05.08 15:14) [43]

Мне вообще то 4-й десяток давно. Ну обшибся, с кем не бывает. Чего мелкие цифры считать то?


> Слушай, а где это детей допускают до таких больших проектов?

Это разве большой проект? Так, мелочь.


Anatoly Podgoretsky   (2008-05-20 15:15:00) [60]

> Sergey13  (20.05.2008 10:53:19)  [19]

Может, как и организация без зданий.


Страницы:   1 2 3 4 5 6

Наверх

Титульная страница Поиск, карта сайта Написать письмо