Добавление картинок в БД

4 минуты на чтение

Как и обещал поговорим о том, как еще одним способом можно добавить картинки в БД, да и не только картинки в любую БД. Добавление файлов в любую БД это громко сказано, конечно, мы как бы формально будем хранить эти файлы, а если быть еще более точным, или более понятным, то мы будем просто копировать файлы в определенную папку, а в БД хранить только лишь их названия. Да от этого программа или наше приложение будет «весить» еще больше, то есть будет занимать больше места на диски и с добавлением новых файлов постепенно увеличиваться, но и если в базу добавлять файлы будет не программа увеличиваться, а уже сама БД, конечно БД сжимает файлы до какого-то объема, но не на столько много. Да и хорошо, что если БД будет какая-нибудь сетевая, то Вам придется на сервере объем жесткого диска увеличивать, если будете добавлять данные в БД, а если БД локальная, то, что добавление данных в БД, что хранения названий файлов в БД, и копирование их в отдельную папку будет носить почти тот же характер. Только с БД будет удалить файл сложнее, чем например из папки.

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

  • TImage
  • TButton — 2 шт
  • TOpenDialog
  • TAdoQuery
  • TAdoConnection

Ну думаю хватит, если что-то забыли, то походу все сделаем. БД у нас готова, таблица называется в БД Files. Пусть так, думаю тут ничего придумывать не надо. Также в корне папки с нашей программой (приложением) создадим папку files. На примерt jpg-картинок посмотрим как добавлять таким способом данные в БД.

Для начала как всегда активируем наш AdoQuery, и поэтому на OnCreate нашей главной формы напишем это

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

Далее на Button1 событие OnClick пишем (это у нас формальное добавление данных)

procedure TForm1.Button1Click(Sender: TObject);
begin
try
if OpenDialog1.Execute then
begin
ADOQuery1.Insert;
ADOQuery1.FieldByName('namefiles').AsVariant:=ExtractFileName(OpenDialog1.FileName);
CopyFile(Pchar(OpenDialog1.FileName),Pchar(ExtractFilePath(Application.ExeName)+'\files\'+ExtractFileName(OpenDialog1.FileName)),true);
ADOQuery1.Post;
end;
except
on e:Exception do
end;
end;

Поясню, что мы тут делаем такого необычного, просто вставляем имя нашего файла в БД, и копируем файл в папку files с помощью CopyFile.

У данной функции следующие параметры

  • путь файла, который копируем
  • путь к файлу, куда сохраняем
  • флаг

Здесь думаю проблем возникнуть не должно. Далее мы считываем из БД имя нашего файла и выводим jpg-картинку в наш TImage. Это примерно будет выглядеть так

procedure TForm1.Button2Click(Sender: TObject);
begin
try
ADOQuery1.First;
if (Trim(ADOQuery1.FieldByName('namefiles').AsString)='')
or (FileExists('files\'+ADOQuery1.FieldByName('namefiles').AsString)=False) then
begin
exit;
end;
Image1.Picture.LoadFromFile('files\'+ADOQuery1.FieldByName('namefiles').AsString);
except
on e:Exception do
end;
end;

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

Это можно применять во всех БД, думаю, что все понятно.

Facebook Vk Ok Twitter LinkedIn Telegram

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

Сейчас расскажу как я добавляю узлы в TVirtualStringTree. То есть попробуем добавить узлы, затем первыми в родительском, последним в родительском. То есть здесь в данном компоненте TVirtualStringTree есть небольшой нюанс, тут не получится как TTreeView сразу д...
Ну вот не долго думая, подошла вторая часть по работе с ADO в DELPHI на примере БД — MS Excel. В данной статье мы рассмотрим добавление и редактирование данных, так как с удалением тут возникли проблемы, в связи с тем, что данный драйвер не поддерживает удален...
TStringList в Delphi - это класс, представляющий список строк (текстовых значений), который является одним из наиболее часто используемых классов в Delphi. TStringList наследуется от класса TStrings и предоставляет ряд методов и свойств для работы со списком с...