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

Cat W

Шрифт:

– * -

* Ну, что, сразу нельзя было сказать?

– Забыл, бывает…

– Как, заработало?

* Да, но гора родила мышь. Ввели много дополнительных слов, а результат тот же.

– Ничего, скоро мышка превратится в кошку, затем в собачку а там и до крокодила недалеко.

* Не п*ди, что будем делать дальше?

– Дальше?

Готовимся выполнять 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

250 begin // запрос выполнен

260 Hi.Lines.Add('ok');

270 Memo1.Clear; // и переход на закладку History

280 if DataModule2.IBSQL1.SQLType = SQLSelect

290 then PrintSELECT(S) // распечатка результата запроса SELECT

300 else PageControl1.ActivePageIndex := 3;

310 end

320 else

330 begin // была ошибка

340 ShowMessage(Mistake); // сообщение об ошибке

350 Hi.Lines.Add('Error');

360 Hi.Lines.Add(Mistake); // запись в историю

370 end;

380 Hi.Lines.Add('------------');

390 end;

– Самое интересное происходит, когда запрос НЕ выполняется.

* Прочитал, все понятно, и над чем тут было биться?

– Все понятно? Отлично, объясни тогда строки 280, 290.

* Так, интересно. Определяется тип запроса и если это SELECT. Нечестно, ты еще ничего не сказал о PrintSELECT.

– Давай, это исправим:

010 procedure PrintSELECT(S:string);

020 var

030 i : integer;

040 a : string;

050 LHTML : TStringList;

060 begin

070 LHTML := TStringList.Create;

080 HTMLHead(LHTML);

090 LHTML.Add('<center> '+ s + '');

100 with DataModule2.IBSQL1 do

110 if RecordCount > 0 then

120 BEGIN

130 LHTML.Add('<h2>'+UniqueRelationName+'</h2>');

140 LHTML.Add('<center><table cellspacing=0 cellpadding=0 ><tr>');

150 S := ''; // формирование заголовка таблицы

160 for i := 0 to Current.Count-1 do

170 S := S + '<th>'+ Fields[i].Name +'</th>';

180 S := S + '</tr>'; // конец заголовка таблицы

190 LHTML.Add(S); // печать заголовка таблицы

200 while not EOF do

210 begin

220 S := '<tr>'; //

230 for i := 0 to Current.Count-1 do

240 begin // формирование строки данных

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

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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