Вход/Регистрация
S. D. F.
вернуться

Cat W

Шрифт:

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. И будет тебе счастье.

  • Читать дальше
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: