Книга: S. D. F.
Show Structure
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('<h2>'+table+'</h2>');
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('<center><table><tr>');
180 LHTML.Add('<th>Position</th>');
190 LHTML.Add('<th>Name</th>');
200 LHTML.Add('<th>Length</th>');
210 LHTML.Add('<th>Type</th>');
220 LHTML.Add('</tr>');
230 while not EOF do
240 begin
250 S := '<tr><td>' +Fields[0].AsString + '</td>'+
260 '<td>'+ trim(Fields[1].AsString)+'</td>'+
270 '<td>'+ trim(Fields[2].AsString) +'</td>'+
280 '<td>'+ FieadType(Fields[3].AsInteger)+'</td></tr>';
290 LHTML.Add(s);
300 Next;
310 end;
320 LHTML.Add('</table></center>');
330 end;
340 end;
* А я стал привыкать к этим крокозябрам.
- Тем более, что текст во многом повторяется.
- Как видишь, на экран выдается название таблицы, а затем таблица с описанием полей.
* Погоди! А что это в 280 строке?
- О, кота то я, и не заметил.
function FieadType(n:integer):string;
begin
case n of
7 : result := 'smallint';
8 : result := 'integer';
9 : result := 'quad';
10 : result := 'float';
11 : result := 'd_float';
12 : result := 'date';
13 : result := 'time';
14 : result := 'char';
27 : result := 'double';
35 : result := 'date';
37 : result := 'varchar';
261 : result := 'blob';
else result := IntToStr(n)+' ?';
end; // case
end;
В результате отобразится, нечто такое:
- * -
- Ну, и чего так долго, конечно, пива много не бывает, но…
* В общем-то, получилось, но никак не могу скопировать получившееся.
- Да, есть такая задача. Вставь в самом конце (перед end.) в файле Unit1:
initialization
OleInitialize(nil);
finalization
OleUninitialize;
А в самом начале этого файла вставь ActiveX в разделе uses.
* Так, просто! Да что же это такое. Просто хочется рвать и метать!!
- Это Windows.
* Ну, что теперь отображаем данные?
- Нет, не к спеху, да и отображать еще нечего, давай отдохни, а я подготовлюсь к последнему рывку.
«Продолжение следует»
- Structures
- rc.firewall.txt script structure
- The structure
- Команды SHOW
- Structure of the shutdown File
- How Nameservers Store DNS Structure Information
- Perl Variables and Data Structures
- The Structure of a C# Program
- Physical Structure of the File System on the Disk
- Understanding the ext3 File System Structure
- BSP Folder Structure
- 8.1.4. Module Build Infrastructure