![]() |
|
|
#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
|
||||
|
||||
|
Можешь написать код, плз, а то у меня почему-то не выходит
|
|
#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? |