И, 3. Елманова. C++Builder 3.0, архитектура "клиент/сервер" и Internet
с помощью которого вводятся данные в таблицу VISIT, сгенерируем оперг торы SQL для вставки, удаления и модификации записи и изменим опера тор SQL для вставки (свойство InsertSQL) следующим образом:
Insert  into VISIT
(TAG,   STAT_ID,   DIAG_ID,   PURP  ID,   PAT  ID     DOCT   ID DATE_VIZ)	~                ~                  ~     ' values
(seqtag.NEXTVAL,   :STAT_ID,   :DIAG  ID,   :PURP  ID,    -PAT  ID :DOCT_ID,    :DATE_VIZ)	~                  ~     '
Далее изменим свойство CachedUpdates этого компонента TTable н true и обеспечим возможность сохранять в базе данных изменения, накоп ленные в кэше, переопределив реакцию на нажатие кнопок компонент TDBNavigator либо введя для этой цели дополнительные интерфейсны элементы (например, кнопку):
void _fastcall TMAINFORM::Button1Click(TObject  *Sender)
DataModule2->Table1->ApplyUpdates(); DataModule2->Table1->CommitUpdates();
Метод ApplyUpdatesQ нужен для сохранения изменений в базе данных а метод CommitUpdates() - для очистки кэша.
Скомпилировав и выполнив приложение, можно убедиться в том, чт< первичные ключи в базе данных генерируются автоматически (например, < помощью Database Explorer). Окончательный вид приложения представл'е! на рис. 4.12.
76
О проектировании Дцанных
jfj Ввод данных о посещениях
\ Стат.таяоны || Диагнозы | Справочники ]
Н	•*	*-	и	+	-	.*.			(*	Сохранить
Номер талона     206
Статус    (Повторный     1ц
Диагноз    (Симулянт
d
Цель посещения    | Направление на ВТЭК
II
Пациент
Сидоров Сидор Сиаорович
2\
Врач    [Соловей-разбойник А. И.
d
Дата посещения |11.11-97
Следующий...
Выход
Рис. 4.12. Окончательный вид главной формы АРМ медстатистика
Этот способ создания первичных ключей намного более удобен, чем использование ручного ввода их значений. Однако и этот способ является не самым эффективным, так как операторы SQL для вставки записи с0дер-"жатсяГв клиентском приложении, а не на сервере.
*—Другой способ генерации ключей с использованием последовательности реализуется путем создания триггера, выполняющегося перед вставкой записи в таблицу, примерно следующего вида:
CREATE  TRIGGER  MEDIC1.VI_INS  after   INSERT
ON  MEDIC1.VISIT
FOR   EACH   ROW
BEGIN
UPDATE VISIT SET TAG=seqtag.nextval where TAG=10;
END;
77