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. И будет тебе счастье.
- * -
* Ну, что, сразу нельзя было сказать?
- Забыл, бывает…
- Как, заработало?
* Да, но гора родила мышь. Ввели много дополнительных слов, а результат тот же.
- Ничего, скоро мышка превратится в кошку, затем в собачку а там и до крокодила недалеко.
* Не п*ди, что будем делать дальше?
- Дальше?
Готовимся выполнять SQL запросы.
- Для начала, что попроще.
- На закладке History помести TMemo – во всю ее ширину и высоту, да, назови это дело His.
- А на закладке SQL надо расположить тоже TMemo (у меня оно названо Memo1) и для начала пару кнопок “Run SQL” и “Clear SQL”.
- Теперь делаем процедуры кнопок:
procedure TFMain.Button1Click(Sender: TObject);
begin // кнопка run SQL
RunSQL( MakeSQL);
end;
* Опять временно?
- Ну, не хочу тебя сразу пугать, все по очереди.
- Обрати внимание на комментарий к слову begin – рекомендую так подписывать процедуру, если название ее мало информативно.
* А вторая кнопка?
- Ну, даже неудобно…
procedure TFMain.Button2Click(Sender: TObject);
begin
Memo1.Clear;
end;
* Да, проще некуда. Так теперь по очереди RunSQL( MakeSQL);
- Недавно переделал, довольно много повкалывал с этими 30 строками…
010 function RunSQL( S:string):boolean;
020 var
030 b : boolean; // отслеживание ошибки
040 Mistake : string; // сообщение ошибки
050 begin
060 with DataModule2.IBSQL1 do
070 begin
080 Close;
090 SQL.Clear;
100 SQL.Add(S);
110 try
120 ExecQuery; // попытка выполнения запроса
130 b := true; // ошибки нет
140 except // Обработка ошибки
150 on E: Exception do
160 begin
170 b := false; // к сожалению, ошибка
180 Mistake := E.ClassName+' raised exception: '+E.Message;
190 end;
200 end; // try
210 end; // with DataModule2
220 result := not b;
230 if b
240 then