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