S. D. F. - [3]

Шрифт
Интервал

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

- * -

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

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

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

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

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

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

- Дальше?

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

'+ s + '

');

100 with DataModule2.IBSQL1 do

110 if RecordCount > 0 then

120   BEGIN

130    LHTML.Add('

'+UniqueRelationName+'

');

140    LHTML.Add('

');

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

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

170           S := S + '

';

180     S := S + '

'; // конец заголовка таблицы

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

200     while not EOF do

210      begin

220       S := '

';   //

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

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

250          a := Fields[i].AsString;

260          if a = '' then a := ' - ';

270          S := S + '

';

280         end; // for

290       Next;

300       S := S + '

';

310      LHTML.Add(S);

320      end; // while

330   LHTML.Add('

'+ Fields[i].Name +'
'+a+'
');

340  END

350  ELSE

360  LHTML.Add('

EMPTY

');

370  LHTML.Add('');

380  LHTML.SaveToFile(Path+'~.htm');

390    Web.Navigate(Path+'~.htm');


Еще от автора W Cat
Задачник по программированию для школы

Задачи для школьника, должны быть веселы!На наших занятиях, запрещена фраза "мы это не проходили" - если это надо для решения задачи - "пройди", источников море, учитель подскажет.Не получается? Возможно, ты выбрал задачу не по силам, ничего - это тоже опыт, отложи, попробуй следующую. Мало решить задачу, придумай свою...Ученик должен уметь: (поставить задачу + решить задачу + учиться) * n ...


Система Диофанта

Если вы хотите поразить одноклассников молниеносным решением квадратных уравнений [КУ], давайте развлечемся.


Рекомендуем почитать
Зеленое пятно окна

Автор стихов, представленных в этой книге, — Павел Егоров из Череповца. Его поэтическое творчество — это не юношеская проба пера, а выстраданные зрелым человеком раздумья о сущности бытия, сложности и противоречивости человеческих чувств. Кандидат филологических наук Ирина Остренко.


Проект - Совесть

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


Красивая жизнь

Любовь нельзя купить… особенно если ее уже тебе подарили… и тем более если она взаимна…


Рассеченная плоть

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


Доминант

Оконченное произведение. Грядет вторая эра воздухоплавания. Переживут ли главные герои катаклизм? Что ждет их в новом мире? Открытие забытых небесных островов, продолжение экспансии островитян, восстания челяди,битва держав за место под солнцем на осколках погибающего континента. Грядущий технологический скачек, необычная заморская магия, новые города, культуры и жизненный уклад содрогнут когда-то единую Некротию...


Запретная Родина

Смешиваясь, черное и белое создают серые будни. Или это не так? Возможно, именно благодаря их соединению рождаются красочные оттенки жизни? Фрэйа снова отправится в иные миры – находить собственную гамму любви, учиться слушать голоса своих душ. Ей предстоит узнать, что, несмотря на удивительные дары, открываемые в человеке Промежутком, реальности ценят искренность обычных человеческих чувств. В приключениях она обретет новые мечты и попытается отыскать сокрытое место, где возможно первозданное, чистое счастье – таинственную и прекрасную Родину.