Чтение онлайн

ЖАНРЫ

Cat W

Шрифт:

– Спокойствие, только спокойствие... бывало и у меня такое.

– Для комфортной работы Firebird хочет иметь доступ к своим dll а именно:

gds32.dll

icudt30.dll

icuuc30.dll

и желательно:

firebird.msg

Конечно, лучше всего поместить эту компанию, в папочку WINDOWS\system или WINDOWS\system32, в этом случае, в дальнейшем ни о чем не надо беспокоится, НО если тебе надо показать твою гениальную программу заказчику, (а на его месте я бы не разрешил лазить тебе в системные папки) лучше держать

эту свору в демонстрационной папке.

– * -

* У меня проблемы стал копировать dll, а система и говорит файл gds32.dll мол у меня есть только постарее да поменьше, можно ли заменить, ну я слов то не померил, и системе той поверил. А эта Редиска и говорит что она занята, т.е. файл занят.

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

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

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

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

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

– Извини, выключать комп было совершенно не нужно. Достаточно было закрыть 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:

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');

Поделиться с друзьями: