S. D. F. - [4]

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

400    PageControl1.ActivePageIndex := 2;

410   LHTML.Free;

420 end;

* Не маленький кусочек.

- Но очень важный кусочек, пожалуй, это сердце программы. Я его многократно переписывал, теперь стыдно показать ранние версии, а сейчас я горжусь написанным. Только, некомпетентные люди считают труд программиста скучным, безэмоциональным, нет эмоции, под внешним спокойствием, бушуют…

* Да ладно, расхвастался, к делу. В начале готовится заголовок HTML.

- Ну это просто:

procedure HTMLHead(LHTML : TStringList);

begin

  LHTML.add('');

  LHTML.add('');

  LHTML.add('');

end;

- Тут, я ничего объяснять не буду HTML сегодня не наша тема.

- В цикле стр 200 – 320 выдается результат предшествующего запроса. Остальное все просто.

* Опять, таки не вижу, чему тут гордится.

- Мартышка, к старости, слаба глазами, стала? У меня есть предложение, после того как мы закончим разговор, отложи этот файл в далекую папку, и через пол года, напиши такую же программу самостоятельно, пользуясь справочниками, интернетом, но не этим текстом. Вот тогда, посмотрим.

* Хорошо! Спорим, что я напишу лучше!

- Вполне возможно. Я буду только рад. Выиграет только вселенский разум.

* Ладно, успокоились, что у нас еще есть неясного.

* А, что такое MakeSQL – по смыслу делается строка запроса?

- Да, это очень простая функция, и возможно это надо еще упростить…

010 function MakeSQL:string;

020 var

030  i : integer;

040 begin

050  result := '';

060  with FMain.Memo1 do

070  for i := 0 to Lines.Count - 1 do

080   if trim(Lines[i]) <> '' then

090    begin

100    FMain.His.Lines.Add(Lines[i]);

110   result := result + Lines[i] + ' ';

120  end;

130 result := trim(result);

140 end;

- Все, что находится в Memo1 записывается в одну строку(стр. 110) и одновременно сохраняется в истории(стр. 100).

* Так значит мы можем теперь выполнять SQL запросы?

- И да, и нет.

* ??

- Выполнять запросы можем, но не всегда увидим результат. Ну, еще не все готово.

* Так давай! Беги, покупай, эти тр-ан-зис-то-ры!

- Не спеши. Выполним, те SQL, что запланированы.

- Но сначала еще одна мелочь. Сделай обработчик для кнопки Show DB это на самой первой закладке.

procedure TFMain.Button3Click(Sender: TObject);

begin // Show DB

 ShowTables;

end;

???????

Первые запросы


- Ну, что, давай попробуем.

- Открой или сделай новую базу и выполни следующий запрос:

CREATE TABLE Salespeople

( snum integer,

sname char (10),

city char (10),

comm decimal );

* Говорит что все OK.

- Перейди на первую закладку и нажми кнопку Show DB.

* Ура!! Заработало!!

- Рано кричать, закрой программу, включи опять и открой твою базу.

* Есть, таблица сразу отобразилась.

* Есть вопросик, для чего у нас на форме CheckListBox1 и закладка Result.

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

- А пока потренируйся, введи еще пару таблиц, пока это без разницы, ну что-то типа «Коты Герои»(кличка, возраст, степень героизма, аппетит и т.д.) и т.д.

* А как?

- Начинай читать книги по SQL. Я предлагал только играться, (и сделать инструмент для игры) а правила игры вспоминай сам.

- А мне, пора возвращаться к своим, ко… нет к баранам.

Продолжаем клепать ББД


- Итак закладка Structure DB показывает имеющиеся в сей базе таблицы.

- Но, интересно узнать из каких полей состоит таблица.

- Именно эту информацию будет показывать CheckListBox1

* Но, кроме имен полей, хочется знать их типы, размеры и прочее.

- В числе прочей, эта информация появится на накладке Result, но как сказал классик «в очередь, с*ны дети, в очередь».

- Так, мне этот бардак надоел, делаем так, как я привык. Во-первых вставляем новый модуль:

unit gv; // Глобальные переменные

interface

var

 Path : string; // Путь к исполняемой программе

implementation

end.

* Да, знатный модуль.

- Смейся, смейся. При помощи этого модуля, я привык такой фокус делать, закачаешься, но сейчас это не к месту.

- Второе: делаем обработчик создания формы:

10 procedure TFMain.FormCreate(Sender: TObject);

20 begin

30  Path := ExtractFileDir(ParamStr(0)) + '\';

40  OpenDialog1.InitialDir := Path;

50   PageControl1.ActivePage := TabSheet1;

60 end;

- Строка 30 – инициализация пути к запускаемой программе.

* А для чего?

- Ну для начала изменим procedure TFMain.NewDB1Click:

150       IBDatabase1.DatabaseName:=  Path + fn;

* А зачем? И так все хорошо работало.

- Хорошо, да не очень. Если при сохранении указывается только имя файла, операционная система записывает его в текущую папку, если это папка, откуда программа запускалась, то все нормально, но если со времени запуска программы пользователь заходил в другие папки (текущая папка сменилась), то потом, найти созданный файл, большая проблема. И совсем другое дело, когда мы даем команду записать файл в конкретную папку.


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

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


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

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


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

«— Я вернусь обратно здоровым? — осторожно спросил Герман… — Безусловно! У нас большой процент полного выздоровления, и другие центры коррекции берут наши методы на вооружение. Вы пройдете несколько сеансов электрической стимуляции мозга, а также специальные курсы гормональной и психологической терапии. Все самые последние достижения науки служат у нас во благо Селекции!».


Эксперимент

«…Эдик гордился, что работает в Евроссийском медицинском центре — как-никак, самый большой на континенте! Умнейшие мозги от Ла-Манша до Камчатки — все здесь. За последние десять лет три лауреата Всемирной премии по биомедицине родом отсюда. Всемирку получить — это вам не на Марс ракету запендюрить! И ведь у него, Эдика, есть все шансы стать всемирщиком! Если он докажет шефу, что эксперимент удался».


Логика для школьника

От автора: "Я решил написать для подростков и юношества пособие по правильному мышлению — по логике. При этом решил вообще не пользоваться теми древними учебниками, положения из которых заставляли детей заучивать до 50-х годов прошлого века под видом того, что их учат типа «правильно мыслить». Так вот, я считаю необходимым дать этим молодым людям не наукообразную заумь, а те практические особенности того, как их обманывают, и те практические приёмы правильного мышления, которые считаю действительно важными.


Записки марсианина

Почему нас так волнует Марс? Почему мы с таким жадным любопытством воспринимаем любую новость об этой планете. Может, потому, что мы сами оттуда? Есть ли жизнь на Марсе? Наверное – нет. Существуют ли марсиане? Да. Это мы с вами. Мы – потомки тех, кто когда-то улетел с этой красной планеты, чтобы сохранить человеческую цивилизацию. Как это происходило, написано в этой книге.Все герои и события, описанные в книге – вымышленные. Любые совпадения являются случайными.


Дракон в одуванчиках

Продолжение истории о Василике. Что делать, если твоя мечта осуществилась и ты стала студентом МагАкадемии? Вести размеренную, полную новых знаний, лекций и вечеринок студенческую жизнь? Но это так скучно! Другое дело разгадать тайну исчезновения оборотней, спасти эльфов от проклятия, найти пару драконьих сокровищниц и… озвереть в самом прямом смысле этого слова.


Последний Крадар

Крадары, великая раса магов, о которых не осталось даже легенд. Волей случая после странного квеста и реролла я стал одним из них. Последним и первым Вечным, наследником богатства и могущества. Осталось самая малость — выжить.P.S. Это произведением является фанфиком по Миру Теллуры. Выражаю благодарность своему другу Марку Калашникову за возможность издеваться над его детищем. Всем настоятельно ознакомиться, хотя бы с первой книгой из цикла Траснформа.