Я сам занимался этой задачей и мое предыдущее письмо к Вам явилось результатом
экспериментов над TRichEdit. Поэтому я хочу предложить Вам пример проэкта, в
котором я связываю поле BLOB таблицы Paradox с компонентом TRichEdit через
потоки. Кроме того я использую библиотеку ZLib из стандартного приложения к
Delphi 3 CSS. Это позволяет по ходу перекачивания данных в таблицу сжимать
текст, а при чтении - распаковывать его чем достигается уменьшение размера
.MB-файла, что полезно при большом количестве записей с BLOB-полем.
В заключение хочу сказать несколько слов о библиотеке ZLib.dcu (размер 48496
байт, дата создания 24.03.97г.) которая включена в поставку Delphi 3. При
использовании конструктора TDecompressStream почему-то генерировался Default
Beep и это очень задерживало выполнение декомпрессии. По счастью в поставку
входит и исходный текст ZLib.pas. Я перекомпилировал модуль с помощью тестового
примера, также входящего в поставку, при этом указав в настройках проэкта не
включать отладочную информацию. В результате размер ZLib.dcu стал равным 45681
байт, а сигнал генерироваться перестал.
Теперь о проэкте. Он имеет одну форму frmMain. Содержимое файлов проэкта
привожу ниже. Для работы также необходима таблица Table.db, имеющая структуру:
Имя поля Тип Размер
ID +
BLOBData B 64
и Alias с именем CBDB указывающий на каталог с этой
таблицей.
Для упрощения размещения компонентов в форме проделайте следующее:
Создайте новый проэкт;
Скопируйте выделенную красным цветом часть файла Main.dfm в буфер обмена;
Сделайте активной вновь созданную форму и вставте в нее содержимое буфера;
Измените свойства самой формы в соответствии с нижеприведенным
описанием.
Проект называется "CompBLOB" и состоит из двух файлов: Main.pas (главная форма) и Main.dfm (файл дизайна для главной формы). Проект использует Delphi 3 и имеет зависимость от библиотеки ZLib.
Главная форма (frmMain)
Главная форма, frmMain, предназначена для демонстрации способа сжатия и распаковки двоичных данных (в этом случае, поля BLOB из таблицы Paradox) с помощью библиотеки ZLib. Форма состоит из следующих компонентов:
TDBNavigator (DBN): используется для навигации по записям в базе данных
TRichEdit (RE): используется как редактор для двоичных данных
TSpeedButton (SB1, SB2, SB3, SB4): четыре кнопки, выполняющие различные действия:
SB1: добавляет новую запись
SB2: удаляет запись
SB3: редактирует запись
SB4: сохраняет изменения в двоичных данных
TPanel (P1): панель, содержащая RE-компонент
Как это работает
Вот шаг за шагом, как форма работает:
Когда форма загружается, она инициализирует переменную EF в значение false, указывая, что текущая запись не редактируется.
Форма настраивает кнопки и DBNavigator-компоненты в зависимости от наличия записей в базе данных.
Когда пользователь нажимает SB1 (Добавить), программа загружает файл с помощью компонента OpenDialog и сохраняет его в поле BLOB в базе данных с помощью TCompressionStream из ZLib.
Когда пользователь нажимает SB2 (Удалить), программа удаляет текущую запись.
Когда пользователь нажимает SB3 (Редактировать), форма включает режим редактирования и устанавливает EF в значение true.
В режиме редактирования пользователь может модифицировать двоичные данные с помощью RE-компонента.
Когда пользователь нажимает SB4 (Сохранить), форма сохраняет модифицированные двоичные данные обратно в базу данных с помощью TDecompressionStream из ZLib.
Программа обновляет DBNavigator и устанавливает EF в значение false.
Библиотека ZLib
Проект использует библиотеку ZLib, которая является компрессионной библиотекой, написанной Жаном-Луи Гайли и Марком Адлером. В этом проекте она используется для сжатия и распаковки двоичных данных, хранящихся в поле BLOB.
Замечания
Проект предполагает, что у вас установлен Delphi 3, и вы создали таблицу Paradox с полем BLOB, названным "BLOBData".
Вам нужно изменить файл Main.pas, чтобы отразить ваше конкретное имя базы данных и таблицы.
Этот проект является только примером использования ZLib для сжатия и распаковки, и вы можете хотеть его настроить под свои конкретные нужды.
Поле BLOB таблицы Paradox связано с компонентом TRichEdit через потоки, используя библиотеку ZLib для сжатия и распаковки текста. Для упрощения размещения компонентов в форме создается новый проект, в котором копируются выделенные красным цветом части фай
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.