S. D. F. - [5]

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

* И для этого заводить специальный модуль.

- Не ворчи, сказано, это моя привычка.

- Строка 40 Инициализация текущей папки для диалога открытия файла.

- По умолчанию диалог откроется с Моих Документов, что часто очень не удобно…

- Строка 50 Делаем активной первую закладку нашей программы, независимо от того, на которой мы остались при запуске компиляции.

* Ух, что-то я за… работался.

- Ладно, давай прервемся.

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

А вот и продолжение


- Ну, с новыми силами…

- Для ListBox1 делаем обработчик двойного клика. Т.е. по этому событию должно отобразится содержимое соответствующей  таблицы.

procedure TFMain.ListBox1DblClick(Sender: TObject);

var

 kod : integer;

begin

  ShowFields;

end;

010 procedure ShowFields;

020 var

030  n   : integer;

040 begin

050  CLBox1.Clear;

060 with DataModule2.IBSQL1 do

070  begin

080     Close;

090     SQL.Clear;

100 SQL.Add('select R.RDB$FIELD_NAME from RDB$FIELDS F, RDB$RELATION_FIELDS R '+

110 'where F.RDB$FIELD_NAME = R.RDB$FIELD_SOURCE and R.RDB$SYSTEM_FLAG = 0 '+

120  'and RDB$RELATION_NAME = ''' + LBox1.Items[ LBox1.ItemIndex]+''' '+

130 'order by R.RDB$RELATION_NAME, R.RDB$FIELD_POSITION');

140     ExecQuery;

150     while not EOF do

160      begin

170       n := CLBox1.Items.Add( trim(Fields[0].AsString));

180       CLBox1.Checked[n] := true;

190       Next;

200      end;

210    Close;

220  end; //  with DataModule2

230 end;

* Душераздирающее зрелище — вот как это называется!

- Ничего, потренируешься с SQL и будешь его щелкать…

- Как видишь служебная (внутренняя) база содержит несколько таблиц:

RDB$RELATIONS

RDB$FIELDS

RDB$RELATION_FIELDS

и т.д.

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

- В строках 100-130 формируется запрос, в стр. 140 он выполняется, а  затем цикл в строках 150-200 сохраняет имена полей таблицы в пунктах CheckListBox1, по команде стр. 190 переход на следующую запись… вот вкратце.

* Да, объяснения ты печешь как горячие пирожки.

- Подумаешь, пироги! Я еще вышивать умею и на машинке шить. А ты думал, что мы только мясо умеем воровать из кастрюль и на крышах кричать.

* Вызывает интерес, и еще такой разрез. Где ты взял эту информацию?

- Пилите, Шура хелпы, пилите, они золотые.

* А почему мы используем CheckListBox зачем нам эти галочки.

- Вот тут мы подходим к следующей задаче. У нас на файсе есть еще кнопка “Show Data”.

- Подробности о содержимое таблицы будем показывать в зависимости от установленных галочек в этом самом CheckListBox.

- Но, давай по очереди.

Show Structure


- Когда я планировал ББД, и дошел до этого пункта, перебрал несколько вариантов: можно выдавать результат в отдельный файл, можно в Memo, можно StringGrid или подобное, но это все не то. Т.е. хочется, чтобы была видна табличная форма таблицы ( возгласы с мест «* Невнятная тавтология»). А потом сообразил – Браузер, конечно же Браузер. Именно HTML дает широкие и гибкие возможности отображения информации.

- Итак на закладке Result ставим компонент Web типа TwebBrowser.

- А для кнопки “Show Structure” обработчик нажатия.

010 procedure TFMain.Button3Click(Sender: TObject);

020 var

030  i : integer;

040  LHTML : TStringList;

050 begin // кнопка Show Structure

060  if ListBox1.Items.Count = 0 then exit;

070  LHTML := TStringList.Create;

080  HTMLHead(LHTML);

090  with ListBox1 do

100   for i := 0 to Items.Count - 1 do

110     PrintFields(Items[i], LHTML);

120   LHTML.SaveToFile(Path+’~.htm’);

130   Web.Navigate(Path+’~.htm’);

140   PageControl1.ActivePage := TabSheet2;

150   LHTML.Free;

160 end;

- Стр. 70 создаем листочек HTML

- Стр. 80 записываем заголовочную часть HTML

- 100-110 циклически заносим в HTML нужную информацию

- Стр. 120 Вот тут можно было пойти разными путями, я пошел простейшим сохраняю HTML файл в рабочей папке.

- Стр. 130 Отображаю готовый файл в навигаторе.

* Хорошо, копаем глубже…

- Пожалуйста:

010 procedure PrintFields(table:string; LHTML : TStringList);

020 var

030  S : string;

040 begin

050  LHTML.Add('

'+table+'

');

060 with DataM.IBSQL1 do

070  begin

080     Close;

090     SQL.Clear;

100      SQL.Add('select R.RDB$FIELD_POSITION, R.RDB$FIELD_NAME, '+

110 'F.RDB$FIELD_LENGTH, F.RDB$FIELD_TYPE '+

120 'from RDB$FIELDS F, RDB$RELATION_FIELDS R '+

130 'where F.RDB$FIELD_NAME = R.RDB$FIELD_SOURCE and R.RDB$SYSTEM_FLAG = 0 '+

140  'and RDB$RELATION_NAME = ''' + table +''' '+

150 'order by R.RDB$RELATION_NAME, R.RDB$FIELD_POSITION');

160     ExecQuery;

170     LHTML.Add('

');

180     LHTML.Add('

');

190     LHTML.Add('

');

200     LHTML.Add('

');

210     LHTML.Add('

');

220     LHTML.Add('

');

230     while not EOF do

240      begin

250       S := '

'+

260       '

'+

270       '

'+

280       '

';

290       LHTML.Add(s);

300       Next;

310      end;

320     LHTML.Add('

PositionNameLengthType
' +Fields[0].AsString + ''+ trim(Fields[1].AsString)+''+ trim(Fields[2].AsString) +''+ FieadType(Fields[3].AsInteger)+'
');

330  end;

340 end;

* А я стал привыкать к этим крокозябрам.

- Тем более, что текст во многом повторяется.


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

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


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

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


Рекомендуем почитать
Реалрпг почти альтистория-4

Черновик 4-й книги, новое начинается в начале 24-й главы, 24.04.19.


Дар. Золото

Красивые и стервозные дамочки, любвеобильные и властные мужички? Если Вы ищете это, Вам не сюда. Эпические сражения, зубодробительное оружие и необременительный секс? Мимо. Заумное философствование или нравоучения? О, нет! Это просто сказка о молодом парне, добром и неглупом. Ну, и о золоте. Куда ж без него.


Котенок

Итак, вампир и котенок…


Адель

Их путешествие было спокойным, они шли за спешащими к своей цели Каленом и Миррой. В деревнях их встречали приветливо и, благодаря стараниям этих двоих их отряд пополнялся все новыми людьми. Молодые мужчины с радостью присоединялись к ним, воодушевленные примером Видящего, стремились встать на защиту своих родных. Женщины искали защиты для своих детей, девушки шли с ними в надежде обрести любовь, старики присоединялись в надежде спокойно дожить остаток отведенного им времени. Люди устали бояться. Устали от безысходности.


Мирриэль

Холодно, как же холодно. Все тело ноет, острая боль рвет на части. Таак, уже лучше, раз есть боль — значит… есть жизнь…, что здесь вообще происходит??? Надо попробовать открыть глаза, так напрягаемся и….


Стихийный мир. Трилогия

Скажу вам честно: очнуться черт знает где и осознать, что ты потеряла память, не очень весело. Особенно, когда тебя тут же втягивают в череду событий, в которых ты мало что понимаешь. Особенно, когда рядом оказывается парень, от которого надо бы бежать, а не хватает сил…Меня зовут Скай, я потеряла память и методом проб и ошибок узнала, что я — уникальный маг. Одни пытаются меня убить, другие соблазнить. А я пытаюсь вспомнить, что я такое. И вот вам моя история… Фото для обложки приобретены на сайте Shutterstock.