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 ...


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

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


Рекомендуем почитать
Соната лунной принцессы

Соединенные Штаты, Китай, Великобритания, Россия, Европейский Союз. Больше этих некогда влиятельных сверхдержав не найти ни на одной карте мира. Много лет назад само существование жизни на планете было поставлено под угрозу. Города исчезали один за другим, становились историей, а цивилизованный мир таял. Так продолжалось, пока ученые не создали оружие, способное остановить нашествие врагов из параллельной вселенной, прозванных пожирателями. С тех пор на планете уцелели только три города.


Каникулы

Каждая девочка мечтает побыть принцессой, а принцесса мечтает побыть простой девочкой да еще и накануне свадьбы. Тем более, что принцесса наша личность разносторонне развитая, очень любознательная и жизнерадостная. А ее замуж!


Высшая академия магии

Я с детства не верила в сказки и книги о магии. Всё изменилось, когда в один солнечный день попала в другой мир, где эта магия имеется. Хорошо еще, что оказалась не в дремучем лесу, а в Высшей академии магии, где есть ректор, который обязательно предложит поучиться… Почему бы не попробовать. Что дальше? Заведу друзей! Найду врага… или может это все-таки любовь?


Психокинетики-2

Продолжение супергеройского романа «Психокинетики». Враг повержен, но враг — ложный. Теперь героям предстоит разобраться в хитросплетениях глобального заговора, частью которого они стали, и в себе самих. Очередные опасности. Новые способности. И одна угроза на всех.


Они среди нас

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


Лисьи повадки в прошлом?

Что бы стало, если роман «Лисья тропа» пошел по другому сценарию? Не окончательный раскол между невольницей и эльфийским князем, а их единство? Такое невозможно в мире Фейри, где сила и магия затмевают все остальное. Но в мире людей, смертных, совсем другие правила. И оказавшись на Земле по воле судьбы, превратившись в таких же смертных людей, Скайлер и Анкалион встречаются вновь… Для Скайлер прошло десять лет с тех пор, как она покинула мир Фейри. Как ей казалось, навсегда. Но прошлое отказывается так просто ее отпускать.