Работа с полета от тип петно
Полетата BLOB (Binary Large Object), предназначен да съдържа данните размер neop-решителност. BLOB поле в един запис от данни може да съдържа 3 байта данни, а подобна поле в друг запис може да съдържа
3 Kbytes на данни. Тези полета са най-подходящи за съхранение на големи количества тек
сто, или изготвянето на такива непредвидими типове данни, като OLE обекти.
Клас TBlobField и типове полета
Както отбелязах по-рано в тази глава, в библиотеката VCL там TBlobField клас, получен от един клас TField и специално предназначени за капсулирането на BLOB полета. Клас TBlobField съдържа BlobType TBlobType вид имот, който е свързан точно какъв тип данни се съхраняват в своята област BLOB. TBlobType вид се определя в единицата DB, както следва:
Всички възможни видове обекти и данни, които могат да вземат поле BLOB, са дадени в таблица. 7.4.
Таблица 7.4. Видове полета TBlobField клас
Тип Тип поле на данни
ftBlob нетипизирани или дефинирани от потребителя данни
ftGraphic растерна графика Windows ftFmtMemo MEMO поле в Paradox ftParadoxOle формат OLE обект на
ParadoxOkonchanie таблица. 7.4.
Тип Тип поле на данни
ftDBaseOLE възрази OLE DBASE
ftTypedBinary Всеки неструктурирани данни
ftCursor..ftDataSet Неприемливо BLOB ftOraBlob полета BLOB маси Oracle8 ftOraClob полета CLOB Oracle8 маси
Обикновено, по-голямата част от работата в пробата и разположението на данни в клас TBlobField компонентите могат да се извършват при зареждане или запис на файл или чрез TBlobStream клас компонент. Клас TBlobStream представя Xia специализирани получен от TStream клас, който използва поле петно в самата таблица, като физическо разпределение на място поток. За да се демонстрира методите на взаимодействие с TBlobField клас компонент onnoe създаде демонстрация приложение.
поле Пример използване BLOB
Както е описано по проекта създаде приложение, което позволява на потребителя да спести аудио файлове (.wav) в таблица, база данни и след това да ги възпроизвеждате директно от масата. Започнете вашия проект чрез създаване на основна форма с компонентите показани на фиг. 7.9. TTable компонент може да се опише Wavez маса подредени в съответствие с DDGUtils псевдонимите, или собствения си Tabley Tsu с подобна структура. Wavez маса структура е показана по-долу.
Фиг. 7.9.Glavnaya форма за масата
Wavez - пример за използване BLOB полета
бутона за добавяне се използва, за да изтеглите аудио файла от диска и да го добавите към масата. работа с рутинни събития OnClick Добавете бутон е както следва:
процедура TMainForm.sbAddClick (Sender: TObject);
ако след това OpenDialog.Execute започне
При тази процедура, първият опит за изпълнение на метода OpenDia- влезете. Ако тази операция е успешна, източник на данни tblSound СИ reklyuchaetsya в Добавяне поле режим FileName се задава и типове полета петно име Wave е населена с данни от файла, определен параметър OpenDialog. Забележете колко полезни са метод TBlobField натоварване-FromFile и колко е лесно да изглежда като изтеглите кода на файла в полето петно на класа.
По същия начин, кликнете върху резултатите бутона Запазване в запазването на външния
Това звучи съдържанието на файла на файла, намиращ се в Wave област. щам код
Ри за този ключ е както следва:
процедура TMainForm.sbSaveClick (Sender: TObject);
с SaveDialog направя започне
Методът използва още по-малко код. Обект SaveDialog ziruetsya инициализира стойността на полето Име на файл. Ако процедура SaveDialog се извършва на успешни практики, за да се запази съдържанието на полето петно във файл, наречен метод Save- ToFile възрази tblSoundsWave.
Бутон за манипулатор чете аудио данни от областта на BLOB и предава тях, за да функционира API PlaySound () за възпроизвеждане. Кодът за този манипулатор не е посочена една и съща. Моля, имайте предвид, че този код е малко по-сложно кода по-горе до бутона Save.
процедура TMainForm.sbPlayClick (Sender: TObject);
// Създаване на поток BLOB
B: = TBlobStream.Create (tblSoundsWave, bmRead);
Screen.Cursor: = crHourGlass; // Показване на пясъчен часовник
М: = TMemoryStream.Create; // Създаване поток памет
// Опитайте да възпроизведете звука. предаване изключения,
// ако нещо не е както трябва да бъде.
Win32Check (PlaySound (M.Memory, 0, SND_SYNC или SND_MEMORY));
B.Free; // освобождаването
На първо място, този метод създава инстанция на TBlobStream клас, наречен Б, като се използва поле BLOB маса tblSoundsWave. Първият параметър премина метода TBlob- Stream.Create (), поле обект BLOB един и втория параметър показва как да се отвори потока. Обикновено поток превръща петно само се чете ispol'uet Zuy стойност bmRead, и се използва за запис на стойността bmReadWrite.
За да отворите TBlobStream поток с параметър bmReadWrite набор от данни се използва, трябва да бъде в режим на редактиране, въвеждане или добавяне на.
След това създава например от клас М TMemoryStream поток. В този момент, нормални промени мишката се един пясъчен часовник, който показва на потребителя за срока на операцията. След това Feed B е копиран функция М. поток PlaySound (), които се използват, за да играе на аудио файла като първи параметър, за да се предава името на файла или указател към зоната на паметта. Клас TBlobStream не предоставя достъп до потока от данни с помощта на индекса и TMemoryStream клас предоставя тази възможност с памет на собственост. Използвайки това, можете да извикате функцията PlaySound () за възпроизвеждане на данни, указател към която се съдържа в M.Memory собственост. След приключване на получаване на тази функция, трябва да се освободи и да се възстанови потока на външния вид на показалеца на мишката. Пълният кода на основния модул на проекта е показана на Обява 7.4.
Обявата 7.4. Проект основен модул Wavez
единица Главна; интерфейсни приложения
Windows, съобщения, SysUtils, Уроци, графики, Контроли, формуляри,
Диалогови прозорци, ExtCtrls, DBCtrls, DB, DBTables, StdCtrls, маска,