Работа с ADO в Delphi. Часть 4

5 минут на чтение

В этой статье я хотел бы рассказать как можно в своих приложениях БД использовать данные в Blob-полях. Этой статьей я хотел бы и закончить наш рассказ, про ADO технологию в Delphi для БД MS Access. Пойдем дальше и будем рассматривать другие БД и не много другие технологии. Так вот использование Blob-полей очень выгодно, нигде не потяряется нужный файл, но от них очень сильно растет размер нашей БД. Но это не беда, так как лучше уж размер БД вырастет, чем размер программы, да и еще с возможностью того, что файлы могут потеряться, это я про то, что если мы файлы будем хранить в какой-нибудь папке с программой.

Ну что приступим. Для начала создайте БД в MS Access и какую-нибудь таблицу, и в таблице обязательно должно быть поле с типом данных — Поле OLE-объекта. В этом поле и будут храниться наши файлы, а в точности картинки. Мы будем записывать и считывать картинки.

Как всегда сделаем подключение к нашей БД. Затем на OnCreate нашей формы активируем наш компонент запросов

procedure TForm1.FormCreate(Sender: TObject);
begin
try
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM BlobTable');
ADOQuery1.Active:=True;
except
on e:Exception do
end;
end;

Не забудьте на нашу форму «положить» компонент TImage куда будет выводится наши картинки и TOpenDialog.

Для записи нашей картинки на событие кнопки — OnClick напишем следующее

procedure TForm1.Button2Click(Sender: TObject);
var
Blob:TMemoryStream;
begin
try
if OpenDialog1.Execute then
begin
ADOQuery1.Insert;
Blob:=TADOBlobStream.Create(TBlobField(ADOQuery1.FieldByName('blobs')),bmWrite);
Blob.LoadFromFile(OpenDialog1.FileName);
Blob.Free;
ADOQuery1.Post;
end;
except
on e:Exception do
end;
end;

Что здесь может быть непонятного, здесь у нас переменная памяти, в которую грузим нашу картинку, а затем при создании записываем ее в БД, указав идентификатор bmWrite, и необходимо сделать преобразование типов TBlobField, то есть мы указываем, что это точно поле с нашими двоичными данными. Запись вроде бы у меня прошла без ошибок, и если открыть нашу БД, то можно увидеть, что в поле, где сохраняли мы картинку написана такое — Двоичные данные. Это означает, что там что-то есть. Далее нам необходимо считать информацию из БД. Для этого на другую кнопку события OnClick пишем

procedure TForm1.Button1Click(Sender: TObject);
var
jpg:TJPEGImage;
Blob:TMemoryStream;
bmp:TBitmap;
begin
try
bmp:=TBitmap.Create;
jpg:=TJPEGImage.Create;
ADOQuery1.First;
Blob:=TADOBlobStream.Create(TBlobField(ADOQuery1.FieldByName('blobs')),bmRead);
jpg.LoadFromStream(Blob);
Image1.Picture.Assign(jpg);
jpg.Free;
Blob.Free;
bmp.Free;
except
on e:Exception do
begin
jpg.Free;
Blob.Free;
bmp.Free;
end;
end;
end;

Здесь у меня и TBitmap и TJpegImage, потому что я не знаю какой формат запишет в БД пользователь картинки. Вот для этого необходимо в БД сделать новое поле, где будет храниться наш формат данных, и при записи картинки записывать в это поле расширение нашей картинки, а при считывании проверять формат и в зависимости от него создавать ту или иную переменную. В данном случае я пробывал и с той, и с той у меня все получилось. Если будете использовать TJpegImage, то необходимо в Uses подключить модуль jpeg - для работы с jpg-изображениями. Также можно увидеть здесь, что я ставлю указатель на первую запись в БД с помощью First. Да просто мы записываем и в первой записи будет что-нибудь в любом случае, поэтому я ничего не стал придумывать, кидать грид на форму и получать картинки с выбранной строки, я получаю все время с первой строки, а уже усовершенствовать в ваших силах. Здесь также присутствует переменная памяти, в которую мы считываем данные, указав идентификатор bmRead, что означает, что мы считываем данные. Затем эту переменную загружаем в переменную изображения, ну а затем и в TImage. Как видите ничего сложного нету.

Этой статьей, я хотел бы подвести итоги с работой с Ado технологией в Delphi в БД MS Access. Далее мы рассмотрим как работать с Ado-технологией использую например MS Excel в качестве нашей БД.

Как записать картинки в БД другим способом мы еще рассмотрим, но тут технология ADO уже не причем. Таким способом можно записывать в любые БД картинки, даже не записывать, а формально хранить их там.

Facebook Vk Ok Twitter LinkedIn Telegram

Похожие записи:

Всем здравствуйте, в этой статье я хотел бы снова обратить внимание на Базы данных, а в частности работа с Базами данных по технологии ADO. Когда пользователь создает приложение на Delphi, работающего с СУБД, к которой присоединяется по технологии ADO, то к фа...
Приветствую читателей блога. Сегодняшняя статья будет посвящена работе с DBF-файлами, без использования ADO, BDE и компонентов доступа к данным. Я уже рассказывал про работу с DBF-файлами, это описано в этой статье. Многим не нравится работа с ADO, BDE, так ка...
Ну вот не долго думая, подошла вторая часть по работе с ADO в DELPHI на примере БД — MS Excel. В данной статье мы рассмотрим добавление и редактирование данных, так как с удалением тут возникли проблемы, в связи с тем, что данный драйвер не поддерживает удален...