» » » W Cat - S. D. F.


Авторские права

W Cat - S. D. F.

Здесь можно купить и скачать "W Cat - S. D. F." в формате fb2, epub, txt, doc, pdf. Жанр: Базы данных. Так же Вы можете читать ознакомительный отрывок из книги на сайте LibFox.Ru (ЛибФокс) или прочесть описание и ознакомиться с отзывами.
W Cat - S. D. F.
Рейтинг:
Название:
S. D. F.
Автор:
Издательство:
неизвестно
Год:
неизвестен
ISBN:
нет данных
Вы автор?
Книга распространяется на условиях партнёрской программы.
Все авторские права соблюдены. Напишите нам, если Вы не согласны.

Как получить книгу?
Оплатили, но не знаете что делать дальше? Инструкция.

Описание книги "S. D. F."

Описание и краткое содержание "S. D. F." читать бесплатно онлайн.



Если вам интересен SQL, и знаком Delphi, давайте поразвлекаемся программированием.






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

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

* Есть вопросик, для чего у нас на форме 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;

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

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

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

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

- Строка 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('<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.

* Ну, что теперь отображаем данные?

- Нет, не к спеху, да и отображать еще нечего, давай отдохни, а я подготовлюсь к последнему рывку.

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

Последний? Рывок к ББД


- Предлагаю вернуться к выполнению SQL запроса.

- Бывают запросы SELECT и все остальные. Результат выполнения SELECT – будем выдавать в закладку result,  а остальные просто выполнять.

- Переделываем Button1Click:

010 procedure TFMain.Button1Click(Sender: TObject);

020 begin  // кнопка run SQL

030    RunSQL(MakeSQL);  // выполение команды SQL

040 end;

- Пойдем дальше.

- Теперь можно заняться кнопочкой «Show Data»

010 procedure TFMain.Button5Click(Sender: TObject);

020 var

030  i : integer;

040  S : string;

050 begin  // Show Data

060  with CheckListBox1 do

070   begin // составляем список полей

080    if Items.Count = 0 then exit;  // если список пуст - уходим


На Facebook В Твиттере В Instagram В Одноклассниках Мы Вконтакте
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!

Похожие книги на "S. D. F."

Книги похожие на "S. D. F." читать онлайн или скачать бесплатно полные версии.


Понравилась книга? Оставьте Ваш комментарий, поделитесь впечатлениями или расскажите друзьям

Все книги автора W Cat

W Cat - все книги автора в одном месте на сайте онлайн библиотеки LibFox.

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

Отзывы о "W Cat - S. D. F."

Отзывы читателей о книге "S. D. F.", комментарии и мнения людей о произведении.

А что Вы думаете о книге? Оставьте Ваш отзыв.