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('
| Position | ');Name | ');Length | ');Type | ');
|---|---|---|---|
| ' +Fields[0].AsString + ' | '+'+ trim(Fields[1].AsString)+' | '+'+ trim(Fields[2].AsString) +' | '+'+ FieadType(Fields[3].AsInteger)+' |
330 end;
340 end;
* А я стал привыкать к этим крокозябрам.
- Тем более, что текст во многом повторяется.
Задачи для школьника, должны быть веселы!На наших занятиях, запрещена фраза "мы это не проходили" - если это надо для решения задачи - "пройди", источников море, учитель подскажет.Не получается? Возможно, ты выбрал задачу не по силам, ничего - это тоже опыт, отложи, попробуй следующую. Мало решить задачу, придумай свою...Ученик должен уметь: (поставить задачу + решить задачу + учиться) * n ...
Если вы хотите поразить одноклассников молниеносным решением квадратных уравнений [КУ], давайте развлечемся.
Соединенные Штаты, Китай, Великобритания, Россия, Европейский Союз. Больше этих некогда влиятельных сверхдержав не найти ни на одной карте мира. Много лет назад само существование жизни на планете было поставлено под угрозу. Города исчезали один за другим, становились историей, а цивилизованный мир таял. Так продолжалось, пока ученые не создали оружие, способное остановить нашествие врагов из параллельной вселенной, прозванных пожирателями. С тех пор на планете уцелели только три города.
Я с детства не верила в сказки и книги о магии. Всё изменилось, когда в один солнечный день попала в другой мир, где эта магия имеется. Хорошо еще, что оказалась не в дремучем лесу, а в Высшей академии магии, где есть ректор, который обязательно предложит поучиться… Почему бы не попробовать. Что дальше? Заведу друзей! Найду врага… или может это все-таки любовь?
Продолжение супергеройского романа «Психокинетики». Враг повержен, но враг — ложный. Теперь героям предстоит разобраться в хитросплетениях глобального заговора, частью которого они стали, и в себе самих. Очередные опасности. Новые способности. И одна угроза на всех.
Потомки библейских исполинов расселились по земле и живут среди нас. Постепенно, создавая семьи с обычными людьми, они измельчали до человеческих размеров. Борьба полов в семействах исполинов за право властвовать на планете не прекращалась и в двадцать первом веке. В их отношения вмешались силы небесные, пригрозив запустить программу перерождения человека в бесполое существо, способное рождаться на свет с эмбрионом своего единственного будущего ребёнка внутри. Когда и эта угроза не вразумила их, то силы небесные, под предлогом надвигающейся глобальной катастрофы на Земле, решили переселить их на антиземлю — планету Антихтон, движущуюся по одной орбите с Землёй, по другую сторону Солнца.
Что бы стало, если роман «Лисья тропа» пошел по другому сценарию? Не окончательный раскол между невольницей и эльфийским князем, а их единство? Такое невозможно в мире Фейри, где сила и магия затмевают все остальное. Но в мире людей, смертных, совсем другие правила. И оказавшись на Земле по воле судьбы, превратившись в таких же смертных людей, Скайлер и Анкалион встречаются вновь… Для Скайлер прошло десять лет с тех пор, как она покинула мир Фейри. Как ей казалось, навсегда. Но прошлое отказывается так просто ее отпускать.