Книга: S. D. F.
Задача: открыть существующую базу данных.
Задача: открыть существующую базу данных.
010 procedure TFMain.OpenDB1Click(Sender: TObject);
020 begin
030 with OpenDialog1 do
040 begin
050 Filter := 'DB|*.fdb';
060 DefaultExt := 'fdb';
070 if Execute then
080 with DataModule2 do
090 begin
100 IBDatabase1.DatabaseName:= FileName;
110 IBDatabase1.Params.Clear;
120 IBDatabase1.Params.Add('USER Cats');
130 IBDatabase1.Params.Add('PASSWORD forever');
140 try
150 IBDatabase1.Connected:=True;
160 except
170 ShowMessage('Не могу работать!');
180 exit;
190 end; // try
200 IBTransaction1.Active:=True;
210 FMain.Caption := FileName;
220 ShowTables;
230 end; // DataModule2
240 end; // OpenDialog1
250 end;
- Открываем диалог загрузки файла – стр. 30
- Т.к. этот диалог будет использоваться и в других целях в строках 50, 60 уточняем, что сейчас будет речь идти о базе данных.
- Если в стр. 70 файл базы найден, вводим параметры базы строки 100-130 (обрати внимание пароль и пользователь должен быть тот же, что и при создании базы).
- Наученные опытом в строках 140-190 пытаемся соединится с базой. (обрати внимание на стр. 190 – желательно кончики программных блоков помечать – легче будет разбираться).
* А почему ты изменил 170 строку.
- Искл. состояние может возникнуть не только из-за dll, но и в случае если база будет не родная (не совпадает пароль и др.) т.е. это место надо переписать более тщательно, сделаем это позже.
* Нет ничего более постоянного …
- Согласен, давай изменим строку 160
160 except // в дальнейшем обработать 1. отсутствие dll. 2. несовпадение пароля 3. другие случаи
- Теперь пришла пора для вкусненького.
* Погоди, сбегаю за кетчупом.
- Боюсь, ни клаве ни монитору кетчуп не понравится.
- Открою тебе великую тайну:
- Когда мы создали пустую базу. База там уже есть.
* Я что-то подобное подозревал, файл то не очень маленький.
- Да, в этом файле есть служебная база в которой будут хранится сведения о нашей базе.
* База о базе. Логично. Ведь логичное же, что директор завода Жигулей ездит на Мерседесе.
- Переписываем ShowTables:
-
procedure ShowTables(fn:string);
begin
FMain.Caption := fn;
with FMain.ListBox1 do
begin
Clear;
PrintList('select DISTINCT R.RDB$RELATION_NAME '+
'from RDB$RELATION_FIELDS R '+
'where R.RDB$SYSTEM_FLAG = 0 order by R.RDB$RELATION_NAME');
end;
end;
* Опять нет нумерации, значит это тоже временно.
- Совершенно точно. А теперь функция PrintList:
010 function PrintList( iSQL:string):boolean;
020 begin
030 with DataModule2.IBSQL1 do
040 begin
050 result := false;
060 Close;
070 SQL.Clear;
080 SQL.Add(iSQL);
090 ExecQuery;
100 if RecordCount = 0 then
110 begin
120 FMain.ListBox1.Items.Add('Empty');
130 result := true;
140 exit;
150 end;
160 while not EOF do
170 begin
180 FMain.ListBox1.Items.Add( trim(Fields[0].AsString));
190 Next;
200 end; // while
210 end;
220 end;
- PrintList выполняет (стр. 90) наш первый SQL запрос (стр. 80). В случае, когда осмысленного ответа нет (стр. 100-150) выдается надпись - 'Empty' т.е. базы нет, а иначе (стр. 160-200) выдаем список таблиц в нашей базе.
* А что за страшную строку получает PrintList получает как параметр.
- Это тот самый запрос и есть. Пока разбирать его не будем.
- * -
(уточнение, “- * -“ равняется банке пива)
- Ну как, чего ты такой…
* Опять, не работает.
- Привыкай к тяготам лишениям нашей службы…
- Ну что там у нас
* Operation cancelled at user's request
- Н-да, и что характерно, каждый раз на этом месте…
- Так, у компонента IBDatabase1 измени свойство LoginPrompt на False. И будет тебе счастье.
- * -
* Ну, что, сразу нельзя было сказать?
- Забыл, бывает…
- Как, заработало?
* Да, но гора родила мышь. Ввели много дополнительных слов, а результат тот же.
- Ничего, скоро мышка превратится в кошку, затем в собачку а там и до крокодила недалеко.
* Не п*ди, что будем делать дальше?
- Дальше?
- Резервное копирование базы данных InterBase
- Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
- Резервное копирование многофайловых баз данных
- Восстановление из резервных копий многофайловых баз данных
- Владелец базы данных
- ЧАСТЬ IV. База данных и ее объекты.
- Перевод базы данных InterBase 6.x на 3-й диалект
- Типы данных для работы с датой и временем
- Практическая работа 53. Запуск Access. Работа с объектами базы данных
- Обзор основных причин повреждения базы данных
- Ошибки проектирования базы данных
- Профилактика повреждений баз данных InterBase