Лекция 6. C++ Builder: работа с файлами и базами данных

12,161 views

Published on

Прикладная информатика

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
12,161
On SlideShare
0
From Embeds
0
Number of Embeds
338
Actions
Shares
0
Downloads
52
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Лекция 6. C++ Builder: работа с файлами и базами данных

  1. 1. <ul>Borland C++ Builder: <li>работа с файлами и базами данных </li></ul>Attribution-ShareAlike (by-sa) — Лицензия «С указанием авторства — Копилефт» stanislav.katsko.name Informatics.ssga.ru
  2. 2. 1. Введение в системы управления базами данных
  3. 3. База данных – совокупность данных, которые определенным образом организованы и связаны друг с другом. Модель базы данных – способ организации БД и связей в них. Таблица БД – набор записей фиксированной структуры, где каждая запись описывает определенный информационный объект. СУБД – технологическая программная система, предназначенная для обработки данных, предоставляющая пользователю средства просмотра и редактирования этих данных.
  4. 4. <ul><li>Данные в файлах неупорядочены.
  5. 5. Файловые методы доступа – на низком уровне.
  6. 6. Сложно организовать промежуточное хранение сведений из файла.
  7. 7. Сложно вносить изменения в файл, содержащий структурированную информацию.
  8. 8. Обращение к записи в файле – временной фактор.
  9. 9. Сложная организация многопользовательской работы.
  10. 10. Нет средств связи между файлами. </li></ul><ul>Недостатки файлового подхода </ul>
  11. 11. <ul><li>Информационное правило: информация в реляционной БД – на логическом уровне.
  12. 12. Правило гарантированного доступа: любой элемент доступен по имени таблицы, первичному ключу и имени поля.
  13. 13. Правило систематической обработки нулевых значений : не заданные значения должны корректно обрабатываться СУБД.
  14. 14. Правило ведения динамического каталога : описание БД представляется на логическом уровне так же, как и обычные данные. </li></ul><ul>12 правил Кодда </ul>
  15. 15. <ul><li>Правило всеобъемлющего подмножества языка работы с данными : СУБД поддерживает формальные языки с вычисляемыми выражениями и определенным синтаксисом.
  16. 16. Правило обновления представлений .
  17. 17. Правило высокоуровневой вставки, обновления и удаления : концепция работы не с отдельной записью, а с множеством записей.
  18. 18. Правило физической независимости данных : способы доступа к данным и способы их хранения не влияют на логику их обработки. </li></ul><ul>12 правил Кодда </ul>
  19. 19. <ul><li>Правило логической независимости данных : модификация структуры таблиц не влияет на логику их обработки.
  20. 20. Правило независимой целостности : а) сущностная целостность – не должно быть первичных ключей с нулевыми значениями; б) ссылочная целостность – для каждого внешнего ключа в БД должна существовать запись с соответствующим первичным ключом.
  21. 21. Правило независимого распространения .
  22. 22. Правило отсутствия побочных эффектов . </li></ul><ul>12 правил Кодда </ul>
  23. 23. Общий вывод ( нулевое правило ): любая система, которая названа реляционной системой обработки данных, должна управлять данными исключительно за счет реляционных механизмов. <ul>12 правил Кодда </ul>
  24. 24. 2. Принципы проектирования баз данных
  25. 25. Нормализация базы данных – формальная технология, позволяющая преобразовать базу данных к одной из нормальных схем (или нормальных форм). Нормальная схема – совокупность требований к организации взаимосвязанных реляционных таблиц, обеспечивающая минимальную избыточность информации в БД. Первичный ключ – элемент данных, уникальный для каждой записи и однозначно её идентифицирующий. <ul>Технология нормализации </ul>
  26. 26. Первая нормальная форма (1NF) – в записях должны быть выделены первичные ключи и исключено дублирование. Вторая нормальная форма (2NF) – все вторичные значения в записях должны полностью зависеть от первичного ключа. Третья нормальная форма (3NF) – сами вторичные значения взаимно независимы. <ul>Технология нормализации </ul>
  27. 27. Проектирование базы данных – описание ее физических и логических элементов, создание структуры таблиц, организация взаимосвязей между ними, создание запросов для отбора и редактирования данных в наборах базовых таблиц. Общая идея проектирования – разделение (расщепление) таблиц так, чтобы автономная информация хранилась в отдельной таблице (справочнике). <ul>Проектирование баз данных </ul>
  28. 28. <ul>Проектирование баз данных </ul>
  29. 29. <ul>Проектирование баз данных </ul>
  30. 30. 1. Подготовка исходных данных. 2. Снижение размерности – первая нормальная форма. <ul>Этапы нормализации </ul>
  31. 31. 3. Выделение ключевых полей – вторая нормальная форма. 4. Выделение вторичных связанных признаков – третья нормальная форма. <ul>Этапы нормализации </ul>
  32. 32. 3. Технологии работы с файлами
  33. 33. Файл – совокупность данных на внешнем носителе, идентифицируемая именем и дополнительными атрибутами. Типизированный файл содержит последовательность значений данных, относящихся к определенному типу. Нетипизированный файл – линейная последовательность байтов, смысл которой определяет только программист. <ul>Типизированные и нетипизированные файлы </ul>
  34. 34. <ul><li>Открытие файла: а) на чтение б) на запись в) на чтение-запись
  35. 35. Обработка файла.
  36. 36. Закрытие файла </li></ul><ul>Файловые операции </ul>
  37. 37. <ul><li>Для работы с файлом создается переменная, которая хранит системное значение, идентифицирующее файл.
  38. 38. Эта переменная связывается с полным именем файла.
  39. 39. Файл открывают обращением к стандартной процедуре или функции.
  40. 40. Обработку содержимого файла ведут с помощью файловой переменной.
  41. 41. Файл закрывают. </li></ul><ul>Общая технология работы с файлами в C++ Builder </ul>
  42. 42. 4. Технология работы с типизированными файлами
  43. 43. Для обработки файлов используют библиотеку ввода-вывода stdio.h Файловая переменная описывается с помощью типа данных FILE Пример: FILE* fi; <ul>Объявление файловой переменной </ul>
  44. 44. Необходимо определить способ открытия, задать местонахождение файла и связать с ним файловую переменную. Функция fopen() : FILE* fopen(const char *filename, const char *mode); Первый параметр – путь к файлу Второй параметр – способ открытия файла. FILE* fi; fi = fopen(&quot;data.txt&quot;,&quot;rt&quot;); if (fi ==0) // обработка ошибки … <ul>Открытие файла </ul>
  45. 45. Функции ввода fread() и вывода fwrite() Имеют одинаковый список параметров. size_t fread(void *ptr, size_t size, size_t n, FILE *stream); size_t fwrite(void *ptr, size_t size, size_t n, FILE *stream); <ul>Обмен данными с файлом </ul>
  46. 46. Команда закрытия файла: fclose(имя-файловой-переменной); <ul>Закрытие файла </ul>
  47. 47. 5. Объектные технологии работы с файлами
  48. 48. Стандартная библиотека stream.h Поток ввода-вывода – объект, который организует побайтовый обмен данными между программой и внешними устройствами хранения. Потоки, как правило, используют временные буферы в оперативной памяти.
  49. 49. Для ввода данных используется оператор << , для считывания данных из потока используется оператор >> . В левой части – имя потока, в правой – либо данные для записи, либо имя переменной, в которую должны быть введены данные. cout << x << &quot;;&quot;<< y; В поток вывода cout помещается значение переменной x, строка &quot;;&quot; и значение переменной y. cin >> n; В переменную n помещается вводимое пользователем значение. <ul>Стандартная библиотека stream.h </ul>
  50. 50. Чтобы использовать операторы >> и << , нужно подключить заголовочный файл fstream: #include <fstream> В нем определены классы ifstream и ofstream, предназначенные для ввода и вывода данных. Пусть имеется файл info.txt с содержимым: 15 3.14 строка Определим экземпляр класса ifstream: ifstream fi; Открытие потока с помощью метода open(): fi.open(&quot;info.txt&quot;) <ul>Файловый потоковый обмен </ul>
  51. 51. В файле 3 значения. Загрузим их в программу: char s[1024]; int n; double x; fi >> n >> x >> s; Закроем файл методом close() : fi.close(); <ul>Файловый потоковый обмен </ul>
  52. 52. Для вывода данных используем класс ofstream : ofstream fo; fo.open(&quot;info.txt&quot;); char *s = &quot;привет&quot;; int n = 20; double x = 2.81; fo << n << &quot; &quot; << x << &quot; &quot; << s; fo.close(); Результат – строка: 20 2.81 привет <ul>Файловый потоковый обмен </ul>
  53. 53. Базовый класс TStream (поток). Для работы с файлами – класс TFileStream. Пример открытия файла в режиме &quot;для чтения&quot;: TFileStream * fi = new TFileStream(&quot;myfile.txt&quot;,Sysutils::fmOpenRead); В прикладном коде для чтения и записи данных используются методы ReadBuffer() и WriteBuffer() Пример: TRect rc; fi->ReadBuffer(&rc,sizeof(rc)); Закрытие файла – метод Free() <ul>Объектная технология потокового обмена </ul>
  54. 54. 6. Файл-серверные технологии
  55. 55. Файл-серверная архитектура приложения – архитектура, в которой вся деятельность по выполнению прикладной логики и обработке баз данных происходит на компьютерах пользователей. Сама же база данных может храниться как на компьютерах пользователей, так и на файловом сервере в сети.
  56. 56. Ход работы файл-серверного приложения: 1. Пользователь обращается к набору данных через элементы интерфейса. 2. Приложение формирует запрос к СУБД на языке SQL. 3. Запрос отправляется к программе-посреднику (системный драйвер СУБД). 4. СУБД обрабатывает запрос. 5. Драйвер переводит полученный от СУБД набор данных в вид, понятный приложению. Контролирует завершение всего процесса, сохранность передаваемой информации. <ul>Технология работы с файл-серверной СУБД </ul>
  57. 57. Набор компонентов BDE в рамках библиотеки VCL – программная прослойка между создаваемым приложением и файл-серверными драйверами. Поддерживается взаимодействие с драйверами для файл-серверных СУБД (dBase, FoxPro, MS Access) и драйверами технологии ODBC. <ul>Технология Borland Data Engine </ul>
  58. 58. Набор данных – набор записей фиксированной структуры, составленных из одинакового набора полей. Реализован в библиотеке VCL в виде базового класса DB.TDataSet. На логическом уровне представляет классическую таблицу базы данных. Физически может быть копией реальной таблицы БД или результатом работы запроса SQL. <ul>Технология Borland Data Engine </ul>
  59. 59. Для доступа к таблице БД применяется компонент TTable, наследник класса TBDEDataSet. <ul>Технология Borland Data Engine </ul>
  60. 60. Организация взаимодействия с файл-серверной БД осуществляется в несколько этапов. 1. Создается БД и таблицы в ней, формируется внутренняя структура таблиц, задаются перекрестные ссылки. 2. БД регистрируется в службе BDE. 3. В проекте создается модуль данных, в который включаются компоненты, ответственные за взаимодействие с СУБД. <ul>Технология Borland Data Engine </ul>
  61. 61. 4. Организуется доступ к полям таблиц в программном коде приложения. 5. На форму добавляются компоненты, ответственные за визуализацию данных из таблиц базы. 6. Организуется работа с содержимым БД с помощью команд языка C++. <ul>Технология Borland Data Engine </ul>
  62. 62. 1. Создание таблицы БД. File – New – Table. 2. Выбор форматов таблицы. 3. Описание каждого поля таблицы: порядковый номер, имя, тип хранимых в поле данных, длина поля в символах для текстовых данных. 4. Сохранение структуры таблицы. File – Save as. Открытие таблицы: File – Open. Вернуться в режим проектирования: Table – Restructure. <ul>Технология создания БД и таблиц </ul>
  63. 63. Индекс записи БД – связывает значение ключевого поля записи с ее физическим местонахождением в базе. Благодаря системе индексов доступ к элементам таблицы ускоряется. Первичный индекс – индекс, соответствующий ключевому полю. Вторичный индекс – индекс, созданный для неключевого поля. <ul>Технология создания БД и таблиц </ul>
  64. 64. 7. Технологии создания файл-серверных приложений
  65. 65. 1. Формируется пустая заготовка приложения VCL. 2. Создается модуль данных, в котором группируются невизуальные компоненты взаимодействия с СУБД. 3. Организуется доступ к таблице БД. 4. Настраивается список полей таблицы. 5. Действия по абстрагированию пользовательского интерфейса от СУБД. 6. Формируется пользовательский интерфейс. 7. Программируется детальная обработка набора данных. <ul>Этапы создания приложения </ul>
  66. 66. File – New – Other. Выбрать Data Module в категории C++Builder Files. <ul>Создание модуля данных </ul>
  67. 67. 1. Компонент TTable в категории BDE палитры инструментов, щелкнуть на пространстве модуля данных. 2. Для доступа к СУБД необходимо настроить свойство DatabaseName компонента TTable . Выбираем имя СУБД. 3. Нужную таблицу описывает свойство TableName . Заносим в это свойство имя таблицы. 4. Заносим в свойство Active значение True. Таблица станет активной. <ul>Доступ к таблице БД </ul>
  68. 68. Обращаться из программы к базе данных с запросом SQL позволяет компонент TQuery . Запрос получает от СУБД не содержимое реально существующей таблицы, а временный набор записей – результат работы выражения SQL. Свойство SQL компонента TQuery содержит текст команды SQL. Отладка кода SQL выполняется в окне SQL Window. <ul>Создание запросов </ul>
  69. 69. Динамическое поле – поле, точно и однозначно соответствующее в программе физическому полю базы данных. Постоянное поле (псевдополе) – поле, которое может соответствовать физическому полю таблицы БД или существовать виртуально (например, вычисляться на основе сторонних величин). <ul>Поля наборов данных </ul>
  70. 70. Источник данных – компонент системы C++Builder, предназначенный для организации взаимодействия между прикладной программой и конкретной базой данных. Источник данных делает приложение независимым от конкретной СУБД и предоставляет стандартный интерфейс их взаимодействия. Компонент TDataSource из категории палитры инструментов Data Access . <ul>Источники данных </ul>
  71. 71. Используют компоненты из категории палитры инструментов Data Controls . Если в проекте создан отдельный модуль данных, в котором хранятся компоненты TTable , TDataSource и другие, то его сначала надо сделать доступным в модуле формы. File – Use Unit – выбрать модуль данных проекта в открывшемся диалоговом окне. <ul>Создание пользовательского интерфейса </ul>
  72. 72. Пользовательская таблица данных – компонент TDBGrid . В его свойстве DataSource указывается ссылка на источник данных TDataSource . Отображение содержимого исходной таблицы БД в компоненте TDBGrid происходит автоматически на этапе проектирования. <ul>Создание пользовательского интерфейса </ul>
  73. 73. Для обработки объемных таблиц используют элемент TDBNavigator . Он связывается с источником данных через свойство DataSource , а синхронизация его работы с таблицей TDBGrid выполняется автоматически. Навигатор отображает на форме кнопки перемещения и редактирования . Логические значение отображают с помощью компонента-флажка TDBCheckBox , двоичные данные – поле TDBMemo или компонента TDBImage . <ul>Создание пользовательского интерфейса </ul>

×