Проблема при добавлении записи.

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Дмитрий Б.
Сообщения: 56
Зарегистрирован: 05 дек 2007, 18:09

Проблема при добавлении записи.

Сообщение Дмитрий Б. » 10 мар 2008, 12:27

Здравствуйте.
Есть две таблицы (не связанные между собой): PL и ОТ.
В таблице PL есть PrimaryKey(NO_PL, DT_PL).
В таблице OT - PrimaryKey(NO_PL, DT_OTL, NO_OTL).
где
NO_PL (varchar), DT_PL(date), DT_OTL (date), NO_OTL(varchar).
DT_PL и DT_OTL имеют одинаковые значения даты (используются для связи таблиц совместно с NO_PL).

Связь между таблицами осузествляется программно следующим образом:
Таблица PL (Поля (NO_PL, DT_PL)) <---> Таблица OT (Поля (NO_PL, DT_OTL))

На форме есть следующие компоненты:

Код: Выделить всё

TIBDatabase IBDatabase;
TIBTransaction IBTransaction;
TIBDataSet IBDataSetPL, IBDataSetOT;
TDataSource DataSourcePL, DataSourceOT;
TDBGrid DBGridPL, DBGridOT;
Связь компонентов:

Код: Выделить всё

IBDatabase(DefaultTransaction=IBTransaction)
IBTransaction(DefaultDatabase=IBDatabase)
DataSourcePL(DataSet=IBDataSetPL)
DataSourceOT(DataSet=IBDataSetOT)                                       >IBDataSetOT;
DBGridPL(DataSource=DataSourcePL)
DBGridOT(DataSource=DataSourceOT)
Программный код добавления записей в таблицу PL

Код: Выделить всё

    FormMain->IBDataSetOT->Insert();
    FormMain->IBDataSetOT->FieldByName("NO_PL")->AsString = Trim(LabEd_NoPL->Text);
    FormMain->IBDataSetOT->FieldByName("DT_PL")->AsDateTime = DT_Plavki->Date;
...
    FormMain->IBDataSetOT->Post();
    Close();
В этом случае все выполняется нормально (записи добавляются в таблицу).


Программный код добавления записей в таблицу OT

Код: Выделить всё

    FormMain->IBDataSetOT->Insert();
    FormMain->IBDataSetOT->FieldByName("NO_PL")->AsString = Trim(LabEd_NoPL->Text);
    FormMain->IBDataSetOT->FieldByName("DT_ZALIV")->AsDateTime = DT_Plavki->Date;
    FormMain->IBDataSetOT->FieldByName("NO_OTL")->AsString = Trim(LabEd_OTL->Text);
...
    FormMain->IBDataSetOT->Post();
    Close();
При выполнении этого кода запись КАК-БЫ добавляется в таблицу (отображается в DBGridOT), но почему-то не сохраняется в таблице ОТ базы данных.

Таким образом я попытался связать эти таблицы без использования вторичного ключа.

При выборе записи в таблице PL в таблице ОТ отображаются записи относящиеся к выбранной записи в таблице PL (по принцыпу мастер-деталь), а вот добавление не получается. :(

Пожалуйста Объясните, что я сделал не так, и как это можно разрешить.

Спасибо.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 10 мар 2008, 12:42

смотрите в IBSQLMonitor, что и в каком виде идет на сервер при добавлении такой "как бы детали".

Дмитрий Б.
Сообщения: 56
Зарегистрирован: 05 дек 2007, 18:09

Сообщение Дмитрий Б. » 10 мар 2008, 13:18

kdv писал(а):смотрите в IBSQLMonitor, что и в каком виде идет на сервер при добавлении такой "как бы детали".
А каким образом это осуществить, и что я там могу увидеть?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 10 мар 2008, 20:09

А каким образом это осуществить, и что я там могу увидеть?
www.ibase.ru/devinfo/ibx.htm#ibsqlmonitor

p.s. еще пару таких вопросов, и заблокирую аккаунт на форуме.
Вы хотя бы ПРИМЕРЫ в поставке дельфей смотрите, или их там просто для объема наваляли?

Дмитрий Б.
Сообщения: 56
Зарегистрирован: 05 дек 2007, 18:09

Сообщение Дмитрий Б. » 11 мар 2008, 17:58

kdv писал(а): p.s. еще пару таких вопросов, и заблокирую аккаунт на форуме.
Вы хотя бы ПРИМЕРЫ в поставке дельфей смотрите, или их там просто для объема наваляли?
Перед тем как задавать этот вопрос я смотрел в описание IBSQLMonitor, но там только описаловка:
злобный модератор вырезал ненужное цитирование
А так как в папке Builder6/Exemples/ я ниче не накопал, поэтому и спросил.

Не разобрались, а сразу драться :cry: .

Кстати проблему я решил.
Фишка была вот в чем. Свойство CachedUpdate компонента IBDataSetOT было равно true, что и вызвало такую проблему. После изменения на false - все получилось.

Все равно большое спасибо.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 11 мар 2008, 18:32

цитировать статьи с сайта тут не принято, тем более в таком объеме. Кроме того, статья моя, так что я знаю, что там написано.

Да, в BCB 6 такого примера может не быть, т.к. это старая версия.
Но пользоваться IBSQLMonitor очень легко, и как - написано прямо в начале его описания в моей статье:
"Для мониторинга необходимо в событии OnSQL сохранять EventText и EventTime либо в файле, либо в компоненте TMemo на какой-либо форме (например Memo.Lines.Add(EventText))"

этого достаточно для человека, минимально знакомого с программированием в VCL.

Дмитрий Б.
Сообщения: 56
Зарегистрирован: 05 дек 2007, 18:09

Re: Проблема при добавлении записи.

Сообщение Дмитрий Б. » 20 дек 2011, 17:21

Большое спасибо за пояснения.

Ответить