И, 3. Елманова. C-t-+Builder 3.0, архитектура "клиент/сервер" и Internet
Используя серверную СУБД и сгенерировав базу данных с учетом правил ссылочной целостности, мы, конечно, можем быть уверены, что ввести в базу данных некорректные значения полей DOCT_ID, DIAG_ID, STAT_ID, PURP_ID, PAT_ID сервер пользователю не даст. Однако это вовсе не означает, что можно поместить на форму набор компонентов TDBEdit для ввода данных в эти поля. Такая реализация интерфейса приведет к совершенно кошмарным условиям труда оператора, вводящего данные, - он должен помнить наизусть все табельные номера, номера карт и коды во вспомогательных таблицах и в случае ошибок сталкиваться с сообщениями, сгенерированными триггерами сервера. Более разумно использовать выбор нужного значения из списка, поэтому для ввода данных в эти поля поместим на форму компоненты TDBLookupCombBox и выберем в качестве значения ListSource источники данных, связанные с соответствующими словарными таблицами, в качестве значения KeyField - имена их первичных ключей, а в качестве ListField - имена полей, в которых хранятся соответствующие названия статусов, диагнозов, имена врачей и др. Теперь пользователь может выбирать значения полей DOCTJD, DIAG_ID, STAT_ID, PURP_ID, PAT_ID из выпадающих списков, в которых содержатся не коды, а символьные строки (рис. 4.10).
Рис. 4.9. Автоматизированное рабочее место медстатистика -I справочных таблиц
72
\j ириек1Ириваннн данных
Kj Ввод данных о посещениях
Рис. 4.10. Автоматизированное рабочее место медстатистика -ввод статистических талонов
Такая реализация автоматизированного рабочего места, разумеется, не является идеальной. Если список статусов и целей посещения обычно действительно невелик и выпадающий список здесь вполне уместен, то список пациентов,""скорее" всего, будет составлять не меньше сотни строк. Поэтому вполне уместно либо иметь этот список в отсортированном по алфавиту виде (например, создав соответствующий индекс в базе данных), либо использовать в качестве источника данных компонент TQuery с соответствующим предложением .Order by. В этом случае при наборе начала фамилии пациента" указатель в списке автоматически установится на ближайшую ^подходящую позицию. Примерно так же можно поступить и со списком 'диагнозов. Возможен также ввод каких-либо признаков (например, специальности врача или типа заболевания) и дальнейший выбор диагноза или фамилии врача из отфильтрованного списка, причем такая фильтрация записей может быть реализована как с помощью параметризованного запроса, выполняемого на сервере, так и с помощью локального фильтра в клиент-
73