|
#1
|
||||
|
||||
Загрузка файла
Подскажите пожалуйста.
Как можно зделать так, что б загружать картинки в базу данных, и они в свою очередь сохранялись в оддельной папке. Например как в VideoCat или других прогах по коллекции фильмов. Спасибо Последний раз редактировалось slay, 27.06.2008 в 02:52. |
#2
|
|||
|
|||
предположу, что сами картинки в БД не кладутся, а кладутся туда относительные (или даже полные) пути, т.е. например есть картинка (pict1.jpg) сопоставленая записи в БД при выборе она копируется в каталог в папке программы, например Images, а в БД в строковом поле делаеться запись pict1.jpg. Соответственно когда просматриваем запись - грузим картинку по пути <каталог программы>\images\pist1.jpg
А КАК - это вам выбирать, но я бы сделал так: - При добавлении/редактировании записи в БД сделал бы диалог выбора картинки с пом. OpenPictureDialog. При положительном выбора в диалоге функцией CopyFile копировал бы в каталог <каталог программы>/Images/ c именем ImageX.jpg (преобразовывал бы картинки в jpeg), где X - инкрементируемое число, которое и сохранял бы в поле БД. - При просмотре записи в компоненту Image грузил бы через LoadFromFile файл с именем <каталог программы>/Images/Image+IntToStr(FieldByName('ImageIndex'))+',JPG'. Но выбирать вам - способов море! Последний раз редактировалось xchrom, 25.06.2008 в 15:26. |
#3
|
|||
|
|||
Файл с картинкой, как в принципе и любой файл, надо считать ввиде строки с помощью TFileStream или TMemoryStream. Потом можно ее зазиповать и отправить в любую таблицу в поле для больших бинарных данных, например Text или Image.
Если че не понятно пиши. |
#4
|
||||
|
||||
Спасибо!
Огромное спасибо
|
#5
|
||||
|
||||
2 xchrom !!!
Можешь написать код, плз, а то у меня почему-то не выходит
|
#6
|
|||
|
|||
Можно и код:
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, adsdata, adsfunc, adstable, adscnnct, ExtDlgs, ExtCtrls, DBCtrls, Grids, DBGrids, DBTables, StdCtrls, Jpeg; type TForm1 = class(TForm) Image1: TImage; DataSource1: TDataSource; DBGrid1: TDBGrid; DBNavigator1: TDBNavigator; OpenPictureDialog1: TOpenPictureDialog; Table1: TAdsTable; Connection1: TAdsConnection; Button1: TButton; procedure DBGrid1CellClick(Column: TColumn); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; ImPath: string; implementation {$R *.dfm} procedure TForm1.DBGrid1CellClick(Column: TColumn); // при болтаниях по гриду begin if FileExists(ImPath+Table1.fieldByName('Id').AsString+'.jpg') then Image1.Picture.LoadFromFile(ImPath+Table1.fieldByName('Id').AsString+'.jpg'); end; procedure TForm1.FormCreate(Sender: TObject); begin //Глобальный путь ImPath := ExtractFilePath(Application.ExeName)+'Images\'; if not DirectoryExists(ImPath) then MkDir(ImPath); ImPath := ImPath + 'image'; //Коннект Connection1.Connect; Table1.Open; end; procedure TForm1.FormDestroy(Sender: TObject); begin //дисконнект Table1.Close; Connection1.Disconnect; end; procedure TForm1.Button1Click(Sender: TObject);//добавит картинку var Num: integer; begin if OpenPictureDialog1.Execute then begin // грузим в Image Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName); // на последнюю запись Table1.Last; // берем номер последней картинки и инкрементируем Num := Table1.fieldbyname('ID').AsInteger + 1; //копируем CopyFile(PChar(OpenPictureDialog1.Filename),PChar(ImPath+IntToStr(Num)+'.jpg'),true); //пишем в базу Table1.AppendRecord([Num]); end; end; end. |
#7
|
||||
|
||||
У меня возникает ошибка.
И еще вопросик, можно это сделать через DBImage? |