Продолжая использовать наш сайт, вы даете согласие на обработку файлов cookie, которые обеспечивают правильную работу сайта. Благодаря им мы улучшаем сайт!
Принять и закрыть

Читать, слущать книги онлайн бесплатно!

Электронная Литература.

Бесплатная онлайн библиотека.

Читать: S. D. F. - W Cat на бесплатной онлайн библиотеке Э-Лит


Помоги проекту - поделись книгой:

- Ну, занят файл, значит, занят, мы то ящик покупаем не для собственного удовольствия, а для удовлетворения запросов системы, ну и ладно…

- Ибо сказано: Если у тебя есть фонтан – заткни его, и компьютеру надо отдохнуть…

- Все выключай, и иди погуляй.

«Продолжение следует»

ББД продолжение

- Извини, выключать комп было совершенно не нужно. Достаточно было закрыть Delphi, именно он занимал файл.

* Ладно, проехали. У меня тут как раз возник вопрос. Все сработало, файл базы создался, но на фейсе программы ничего не изменилось.

- Да, вот тут, ты прав. Недоработка. Но, я тоже обдумал… надо ввести изменения.

165 try

170    IBDatabase1.CreateDatabase;

180    IBDatabase1.Connected:=True;

190    IBTransaction1.Active:=True;

192 except

194   ShowMessage('Не нахожу dll');

195   exit;

196  end;   // try 

187  FMain.Caption := fn;

198       ShowTables;

200 end;

- Во-первых давай позаботимся о том, чтобы исключительное положение, которое у нас возникло, было бы хоть как ни будь обработано ( строки 165, 192-196).

- Строка 198 выдаст название новой базы в заголовке программы и сообщит что таблиц, в этой базе пока нет.

procedure ShowTables;

begin

 with FMain.ListBox1 do

  begin

   Clear;

   Items.Add('Empty');]

  end;

end;

- Сразу скажу, что процедуру ShowTables мы очень скоро будем существенно менять, посему не буду нумеровать строки…

- * -

* Все сработало, но…

- Да, хвалится пока еще нечем. Надо делать следующий шаг.

Задача: открыть существующую базу данных.

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:



Поделиться книгой:

На главную
Назад