Н. 3, Елманова. C++Builder 3.0, архитектура "клиент/сервер" и Internet
Tablel->TableName="CLIENTS";
Table2->TableName="CLIENTS.DBF";
Tablel->0pen();
Table2->0pen();
}
//--------------------------------.--.-....--.............
void _fastcall TForml ::Button2Click(TObject *Sender)
Tablel->Close();
Table2->Close();
Tablel->TableName="HOLDINGS" ;
Table2->TableName="HOLDINGS.DBF";
Tablel->0pen();
Table2->0pen();
}
//---------------------•-----.---.---.---.-................
void _fastcall TForml::Button5Click(TObject *Sender)
Tablel->EmptyTable();
}
//------------------------------..--..--...-..............
void _fastcall TForml::Button3Click(TObject *Sender)
BatchMovel->Execute();
}
//--------------------------.---..--.---..--...-..........
void _fastcall TForml::Button4Click(TObject *Sender)
Close();
}
//--------------------------.-...---...--..--.............
Скомпилируем и запустим приложение. Кнопки CLIENTS и HOLDINGS осуществляют выбор между той или иной парой таблиц. При нажатии кнопки "Добавить" происходит перенос данных из активной в данный момент таблицы dBase (CLIENTS или HOLDINGS) в соответствующую таблицу Oracle. Отметим, что наличие поддержки ссылочной целостности можно проверить, попытавшись перенести данные из таблицы HOLDINGS до того, как перенесены данные из таблицы CLIENTS. При этом перенос осуществлен не будет и в процессе выполнения приложения
98
Перенос приложений и унаследованных данных в архитектуру клиент/сервер
появится    диагностическое    сообщение     примерно    следующего     вида (рис. 5.19).
Рис. 5.19. Диагностическое сообщение при попытке добавления записей в detail-таблицу при пустой master-таблице
Примерно такие же последствия будет иметь попытка очистить таблицу CLIENTS после того, как перенесены записи в таблицу HOLDINGS.
После переноса данных на сервер можно вернуться к созданному ранее приложению с формой master-detail и попробовать снова проделать действия, приводящие к нарушению ссылочной целостности.
Теперь, если мы попытаемся удалить запись из таблицы CLIENTS при наличии связанных с ней записей в таблице HOLDINGS, нам это не удастся. При этом клиентским приложением будет выдано диагностическое сообщение о наличии записей в дочерней таблице (рис. 5.20).
Рис. 5.20. Диагностическое сообщение при попытке удаления записей из master-таблицы при наличии связанных с ней записей в detail-таблице
Точно так же окажется невозможным добавить запись с произвольным значением поля ACCJMBR в таблицу HOLDINGS. Причина такого поведения созданной информационной системы очевидна: при проектировании базьТ'данных с помощью CASE-средства помимо самих таблиц и индексов были созданы также ^пециальные объекты базы данных, называемые серверным^ ограничениями (Constraints) и триггерами. Триггер - это специ-альная*'гТроцедура, выполняющаяся при наступлении определенного события, например при попытке удаления записи в таблице CLIENTS. При описании свойств связи между таблицами мы выбирали, как сервер будет реагировать на подобные события, и в соответствии с нашим выбором были
99