procedure TForml.FormCreate(Sender: TObject);
begin
DateSeparator:= '. ';
ShortDateFormat:= 'dd.mm.yyyy';
ShortTimeFormat:= 'hh:mm:ss';
end;
Таким образом можно игнорировать неопределенность текущей настройки операционной системы на конкретном компьютере.
В InterBase значения типа DATE совместимы со строковыми типами. Поэтому, если в SQL-операторах InterBase требуется интерпретировать значения типа DATE как строку, нет необходимости в приведении типов. Например, можно так записать в символьный столбец S значение типа DATE (символы I I означают операцию конкатенации, или сцепления, строк, функция NOW возвращает текущие дату и время):
UPDATE DEAL
SET S = "Дата отгрузки " I I NOW;
Как уже говорилось, в InterBase нет автоинкрементного типа. Поля автоинкрементного типа автоматически заполняются уникальными числовыми значениями при вводе очередной записи. Такие поля обычно используются для создания первичных ключей. Вместо автоинкрементных полей InterBase предоставляет механизм генераторов — особых программ, которые хранят некоторое значение вплоть до момента, когда оно будет использовано, после чего изменяют хранимое значение на заданную величину.
Генератор создается следующим оператором:
CREATE GENERATOR Имя_генератора
После создания генератора ему необходимо присвоить начальное значение таким оператором:
SET GENERATOR Имя_генератора ТО Начальное_значение
Для получения очередного значения генератора используется такая функция:
GEN_ID(Имя_генератора, Шаг)
Здесь Шаг — целое число, на которое изменяется текущее значение генератора. Проиллюстрируем использование генератора на примере поля ID_C таблицы CLIENT.
Создаем генератор:
CREATE GENERATOR GEN_CLIENT_ID_C;
SET GENERATOR GEN_CLIENT_ID_C TO 1;
Однажды созданный генератор хранится в БД наряду с другими ее сущностями — таблицами, индексами, хранимыми процедурами и т. п. Используем генератор при вводе очередной записи:
CREATE TRIGGER TRIG_CLIENT FOR CLIENT
ACTIVE BEFORE INSERT POSITION 0
AS BEGIN
IF (NEW.id_c IS NULL) THEN NEW.id_c = GEN_ID(gen_client_id_c,1);
END
Доменами называются заранее созданные описания столбцов. Наряду с другими сущностями БД, домены должны иметь уникальные имена. Однажды созданный домен хранится в БД и может использоваться вместо типа столбца. С помощью доменов достигается унификация типов данных, хранящихся в различных столбцах, возможно, разных таблиц.
CREATE DOMAIN D_GANR AS
VARCHAR(10) CHARACTER SET NONE
NOT NULL
CHECK (VALUE IN ('comedy', 'action', 'melodrama', 'fantasy', 'horror'))
COLLATE NONE
В InterBase нет столбцов денежного типа (Currency). Вместо них обычно используются столбцы FLOAT или DOUBLE PRECISION. При выводе их значений в визуализирующих компонентах они представляют денежные суммы как значения с плавающей запятой, что в большинстве случаев мешает их восприятию. Вернуть этим столбцам нормальный денежный вид можно либо в обработчике события OnGetText объекта-поля, либо с помощью его (объекта-поля) свойства DisplayEdit. В обработчике можно использовать оператор такого вида:
procedure TForml.QUSUMMAGetText(Sender: TField;
var Text: String;
DisplayText: Boolean);
begin
Text:= FloatToStrFfquSumma.AsFloat,
ffCurrency, 10, 2)
end;
В свойстве DisplayEdit можно указать следующую маску:
# # #, # # #. 0 0 ' р. '
Конечный результат будет одинаков, но указать маску, как мне кажется, проще.
Визуальные средства разработки запросов обеспечивают реально удобное представление решаемой задачи, помогают определить связи и условия запроса. Но в Interbase нет как таковых визуальных средств разработки запросов. Однако можно обращаться с Interbase при помощи ibExpert. Это гибкий и мощный инструмент. В нем присутствует возможность разрабатывать структуру самой БД, сохранять и выполнять скрипты на SQL, использовать множество встоенных утилит, облегчающих работу, как разработчика, так и администратора.
Загрузив ibExpert в меню Tools->Query Builder, нужно перетащить требуемые таблицы. Определить связи между ними и отметить поля, необходимые для вывода. Они появятся внизу на вкладке Selection. А на закладке Edit можно будет просмотреть текст запроса. На закладке Perfomance Analisys есть очень полезная информация о быстродействии и количестве чтений с каждой таблицы.
Есть два способа добиться хорошего оформления таблиц. Попробовать самостоятельно улучшать стандартный DBGrid или использовать компоненты сторонних производителей, предоставляющих альтернативу стандартному компоненту. При выполнении работы надо учитывать современные тенденции и стандарты, то есть делать так, чтобы программа выглядела современной, похожей на офисные приложения. Используя компоненты от EhLib можно улучшить стандартный DBGrid, добавив новые возможности: автоматический расчет итоговых значений (сумма, среднее значение, количество записей), экспорт данных и т.д.
Устаревший дизайн стандартной таблицы теперь можно легко заменить стильной конструкцией DBGridEh, изменив свойство Flat. Также есть богатый выбор различных цветовых схем выделения данных.
Практически всегда, разрабатывая приложения для работы с базами данных, приходится выделять каким-нибудь образом данные, подпадающие под некоторое условие. Это может быть и уровень продаж определенной менеджера, достигший критически низкого уровня, и «минусовые» остатки на складе. Чтобы не пропустить такие происшествия, программа должна правильно выделять это в таблице. Для этого достаточно прописать в событии OnGetCellParams нужное условие и параметры выделения (размеры, цвет шрифта, цвет фона).
Важнейшим элементом работы с прикладными программами является возможность переноса данных в офисные приложения, например, в Microsoft Office. То есть часто бывает недостаточно просто создать отчет и вывести его в таблицу. Как правило, потом требуется, чтобы он был предоставлен в виде документа Excel для последующих манипуляций. Можно создавать различные OLE – объекты и, перебирая нужные записи в DataSet, копировать их в ячейки Excel. Этот способ довольно гибкий, так как позволяет формулировать качественные отчеты, предварительно оформив их. То есть добавлять заголовки, формулы, делать выделение критических данных и т.д. Но вот копирование по строкам сильно замедляет создание отчета, особенно если данных много. К тому же уйдет много времени на программирование переноса данных. Поэтому когда речь идет не о создании красивого оформления, а о скорости и простоте экспорта данных лучше использовать средства EhLib. Эта библиотека позволяет одним вызовом функции записывать содержимое таблицы в форматы.xls,.rtf,.html,.txt,.csv.
Также полезна функция копирования в буфер выделенных данных. Например, при наличии нескольких офисов, которые в течении дня обмениваются данными о наличии у них количества товара. Менеджерам достаточно скопировать нужные данные и вставить их в любое приложение: почтовый клиент, ICQ.
При работе с большими объемами данных бывает очень удобно не только отсортировывать данные по какому-либо полю, но и группировать («свернуть») по значениям одного из полей, чтобы потом можно было развернуть любую из подгрупп щелчком и просмотреть её содержимое. К примеру, организуя рассылку товаров по множеству городов по неким направлениям, не всегда удобно листать отсортированный по городам массив данных. Удобнее сгруппировать данные по городу и разворачивать города только нужного направления. Используя DropDownBox в DBGridEh, можно легко решать подобные задачи.
Менеджеру будет удобнее просматривать отчёты о продажах используя привычный Excel.(Рис.1) Для начала нужно установить драйвер ODBC Firebird. Запустить Excel. Выбрать меню Данные, Импорт внешних данных, Создать запрос. После проверки запроса необходимо обязательно сохранить запрос (кнопка с изображением дискеты). Запрос будет сохранен вместе со всеми параметрами алиаса, поэтому для "распространения" запроса на несколько компьютеров вовсе необязательно создавать алиас ODBC на каждом (конечно, ODBC-драйвер и клиентскую часть IB/FB все равно придется устанавливать на этих компьютерах).
CREATE PROCEDURE NEW_PROCEDURE
returns (
kld numeric(15,0),
movie varchar(50),
famio varchar(50))
as
declare variable idm integer;
declare variable cl integer;
declare variable dt date;
begin
for select deal.cl_id, deal.d_d, deal.id_m
from deal
into:cl,:dt,:idm
do
begin
kld = current_date - dt;
if (:kld > 12) then
begin
select client.fio from client where client.id_c =:cl
into:famio;
select movie.name_film from movie where movie.id =:idm
into:movie;
suspend;
end
end
end^
Инструкция пользователя
Пользовательский интерфейс построен в соответствии с классическими требованиями и правилами системы Windows, правилами системы Delphi. Основными задачами при построении интерфейса были: простота, удобство.Программный проект включает в себя 7 оконных форм (одна из них форма главного меню), 4 из них являются непосредственно рабочими (т.е. здесь происходит ввод, обработка и корректирование данных), 3 – формы отображения обработанных данных.При открытие программы появляется главная форма (fmMain) (Рис. 1), на которой расположены таблицы и соответствующие им элементы управления. Если есть задолжники, у которых на руках находятся диски, то вместе с главной формой появляется дочерняя форма «Задолжники»где можно увидеть наименование диска и данные задолжника и количество дней. Для удобства пользователя главная форма содержит несколько вкладок, где и находятся таблицы. Работать с базой можно как непосредственно из главной формы, так и вызвав отдельное окно из главного меню формы. Так пункт меню «Файл» содержит такие подпункты как «Новое» и «Выход». Сделать новую запись в таблице Клиенты(CLIENT) можно выбрав «Файл» -> «Новое..» -> «Клиент». После чего появится окно «Клиент» (Рис. 2), где пользователю представляется возможность заполнения каждого из предложенного полей. Кнопки «Удалить» и «Исправить» в режиме вставки не активны.Процесс редактирования данных происходит в том же самом окне, при выборе меню «Правка» -> «Изменить..» -> «Клиент». В этом же окне появляются уведомления пользователя о недопустимых ошибках. В таблице Клиенты(CLIENT) обязательно для заполнения поле ID_C, если пользователь забывает заполнить это поле, программа уведомит его об этом.Кнопка «Удалить» позволяет удалить запись из базы. Нельзя удалить данные о клиенте, если в таблице «Счета» есть связанные с ним записи, программа предупреждает об этом пользователя, показывая соответствующее сообщение (Рис. 4). В режиме изменение неактивна кнопка «Запись» и появляется дополнительная панель с кнопками навигации по таблице. И, наконец, для завершения работы с формой «Клиент» нужно нажать кнопку закрытия окна, и пользователь попадает на форму главного меню.