Как и обещал поговорим о том, как еще одним способом можно добавить картинки в БД, да и не только картинки в любую БД. Добавление файлов в любую БД это громко сказано, конечно, мы как бы формально будем хранить эти файлы, а если быть еще более точным, или более понятным, то мы будем просто копировать файлы в определенную папку, а в БД хранить только лишь их названия. Да от этого программа или наше приложение будет «весить» еще больше, то есть будет занимать больше места на диски и с добавлением новых файлов постепенно увеличиваться, но и если в базу добавлять файлы будет не программа увеличиваться, а уже сама БД, конечно БД сжимает файлы до какого-то объема, но не на столько много. Да и хорошо, что если БД будет какая-нибудь сетевая, то Вам придется на сервере объем жесткого диска увеличивать, если будете добавлять данные в БД, а если БД локальная, то, что добавление данных в БД, что хранения названий файлов в БД, и копирование их в отдельную папку будет носить почти тот же характер. Только с БД будет удалить файл сложнее, чем например из папки.
Возьмем за пример любую БД. Я возьму тот же 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. Как видите данные в БД не хранятся, и поэтому БД будет не большой по размеру, но зато каталог с программой будет занимать приличное место, если конечно будет много объемных файлов.
Это можно применять во всех БД, думаю, что все понятно.
Кстати, хочу заметить, что одним из первых дел, что Вы должны сделать в своей квартире или доме — установить новые, хорошие, качественные двери. Такие двери Вы сможете найти на сайте — http://dveriguardian.ru/, прочитать про них и выбрать себе самые лучшие, по очень низкой цене для такого качества. Защите свое имущество! |
Исходники статьи можно скачать тут
Автор статьи - Andrey53
Похожие записи
Метки: Access, Ado, delphi, MS Access, добавление картинок в БД
Уважаемый спасибо за блог. Но добавление рисунка на вашем исходнике не работает. У меня просьба,как добавить фото (Jpeg,итд основные форматы) в базу данных на ADO? где не смотрел один вариант на всех сайтах:
ADOQuery1.Edit;
TBLOBField(ADOQuery1.FieldByName(‘myField’)).LoadFromFile(‘c:\my.bmp’);
ADOQuery1.Post;
Стандарт на всех сайтах, но он тоже не работает.Если не в лом подскажите.
Да извените. С наступающим Новым 2011годом! Желаю всего что вы желаете и мира в душе…
to Мансур, странно, что У Вас не работает, этот пример показывает только как хранить ссылки на картинки в БД, а вот этот пример — https://zaokomtek.ru/?p=51 показывает как хранить в БД картинки как двоичные данные
Обломинго. Мансур прав, не работает чертово добавление.
Придется попотеть………
Andrey53 ничего странного в том что не пашет.
В баттон2клик везде где ‘files\’
добавляем впереди
Pchar(ExtractFilePath(Application.ExeName))+
т.е. будет Pchar(ExtractFilePath(Application.ExeName))+’files\’+ADOQuery1.FieldByName(‘namefiles’).AsString
Эхх вы. А у меня ведь двойка по информатике была
Так что Кустох товалай Шармута всем!!
для начала какая у Вас IDE Delphi?
Andrey53 что за IDE Delphi? Если версия, то 7.3.4.2 build 8.1
Данный исходник полностью рабочий, у меня работает, возможно, просто, как Вы и говорили надо было добавить путь, где находится exe программы