* А, понял, примитивный пароль, кнопочки под левой рукой.
- Пароль не распознан. В доступе отказано…
* Ладно, вторая попытка, помнится есть расширение sdf – вроде это база данных?
- Уже теплее…
* Третья попытка, третья… сдаюсь.
- Вообще-то пароль SQL Delphi Firebird.
- Поставлена задача: написать программу для исполнения SQL запросов. Программа пишется в среде Delphi, а база будет функционировать под управлением СУДБ Firebird.
* Я знаю пароль, я вижу ориентир…
- Давай поиграем с SQL.
* Поиграем? Ну, давай… А почему с SQL?
- Ну, у меня возникла очередная задача – упорядочивание моей библиотеки книг FB2.
* Но эта задача, сто лет как решена, есть масса программ для работы с библиотеками.
- Вот это - не надо… Чукча не пользователь, чукча – программист.
* Может быть, чукча, написал свой офис и заодно операционку?
- Конечно, заманчиво… и в истории есть примеры,… но пока давай займемся SQL.
* Ну, кое-что я помню, меня этому учили…
- Как я тебя понимаю, мы все учились понемногу и главное как-нибудь.
* Так, с помощью, какой базы мы будем писать базу, погоди, я запутался…
- Я понял, ты имеешь в виду СУДБ (систему управления базами данных). Теоретически это не имеет значения SQL и в Африке SQL. Но, я предлагаю Firebird.
* Законный вопрос, а почему именно эта птичка?
- Как говорит Википедия: Firebird (FirebirdSQL) — компактная, кроссплатформенная, свободная система управления базами данных (СУБД), работающая на Linux, Microsoft Windows и разнообразных Unix платформах. Для меня большое значение имеет то, что она компактна и бесплатна (Firebird - является полностью свободным от лицензионных отчислений даже для коммерческого использования.).
* Есть ли у вас план, мистер Фикс?
- Есть ли у меня план? Да у меня целых три плана!
- Во-первых, написать программу для выполнения запросов SQL.
- Второе, проработать SQL с помощью книги Мартина Грубера «Понимание SQL»
- А потом – писать базу для FB2, но это уже за рамками этой книги.
* Ну вот. Так хорошо начиналось «Играть с SQL», а теперь опять, писать программу…
- Во-первых, отсылаю тебя к 5ой строке этого текста, а потом…
* Но есть же масса подобных программ…
- Есть. И одной из них я постоянно пользуюсь – это IBExpert. Отличная программа, и переплюнуть ее не берусь. Но есть неприятный момент, который меня постоянно раздражает каждый раз каждый новый вариант базы надо регистрировать,… да это всего несколько минут, но как я уже говорил, если выполнение рутинных действий (или ожидание) занимает более 10 секунд – для пользователя это непереносимо.
* А почему они так сделали, ведь не дураки там сидят?
- Это расплата за универсализм, повторюсь, отличная программа, но универсальная. Вспомни, как относились истинные меломаны к музыкальным комбайнам…
* Ну, а второй пункт, почему именно эта книга.
- Да надо, что-то выбрать, why not – книга то хорошая, и примеров там много.
* Хорошо, техническое задание написано - поехали!
- Как я уже сказал, меня достала IBExpert, и года два назад я написал обозреватель баз данных формата Firebird, про себя я его называю браузер баз данных. Ну, назови БДБ или ДББ или ББД – только в печь не сажай.
- Начинай новый проект. Новая форма. Ну, давай, я тебе разжевывать все не буду, получи рисунок, и сам расставляй компоненты.
Рис 1. Главная форма
Рис 2. Форма TDataModule
- В этом модуле IBTransaction1 должна быть привязана к IBDatabase1 и соответственно IBSQL1 привязывается к IBTransaction1 и IBDatabase1.
* Как это «привязаны»? Что ты имеешь в виду.
- Я имею в виду, что не буду по-шагово все разжевывать, давай-ка поработай сам, понять все не трудно… (я настаиваю на мысли – если дать готовые рецепты – учащийся ничего не запомнит, да, сейчас он позлится, «его заставили потрудится» - и эта эмоция запишет в память нужные знания)
Первая задача: создать новую базу данных.
Рис 2.
010 procedure TFMain.NewDB1Click(Sender: TObject);
020 var
030 fn : string;
040 begin
050 fn := InputBox('File Name',' Введите имя файла новой базы данных','');
060 if fn = '' then exit;
070 if UpperCase(ExtractFileExt(fn)) <> '.FDB'
080 then fn := fn + '.FDB';
090 with DataM do
100 begin
110 IBDatabase1.Params.Clear;
Читать дальше