Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.06.2008, 13:57
Аватар для slay
slay slay вне форума
Прохожий
 
Регистрация: 28.04.2008
Сообщения: 22
Репутация: 10
По умолчанию Загрузка файла

Подскажите пожалуйста.
Как можно зделать так, что б загружать картинки в базу данных, и они в свою очередь сохранялись в оддельной папке.
Например как в VideoCat или других прогах по коллекции фильмов.
Спасибо

Последний раз редактировалось slay, 27.06.2008 в 02:52.
Ответить с цитированием
  #2  
Старый 25.06.2008, 15:15
xchrom xchrom вне форума
Начинающий
 
Регистрация: 08.04.2008
Сообщения: 177
Репутация: 15
По умолчанию

предположу, что сами картинки в БД не кладутся, а кладутся туда относительные (или даже полные) пути, т.е. например есть картинка (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  
Старый 26.06.2008, 09:03
YERokez YERokez вне форума
Прохожий
 
Регистрация: 27.10.2007
Сообщения: 22
Репутация: 10
По умолчанию

Файл с картинкой, как в принципе и любой файл, надо считать ввиде строки с помощью TFileStream или TMemoryStream. Потом можно ее зазиповать и отправить в любую таблицу в поле для больших бинарных данных, например Text или Image.
Если че не понятно пиши.
Ответить с цитированием
  #4  
Старый 26.06.2008, 15:07
Аватар для slay
slay slay вне форума
Прохожий
 
Регистрация: 28.04.2008
Сообщения: 22
Репутация: 10
Хорошо Спасибо!

Огромное спасибо
Ответить с цитированием
  #5  
Старый 27.06.2008, 02:52
Аватар для slay
slay slay вне форума
Прохожий
 
Регистрация: 28.04.2008
Сообщения: 22
Репутация: 10
По умолчанию 2 xchrom !!!

Можешь написать код, плз, а то у меня почему-то не выходит
Ответить с цитированием
  #6  
Старый 27.06.2008, 10:42
xchrom xchrom вне форума
Начинающий
 
Регистрация: 08.04.2008
Сообщения: 177
Репутация: 15
По умолчанию

Можно и код:
Код:
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  
Старый 28.06.2008, 02:03
Аватар для slay
slay slay вне форума
Прохожий
 
Регистрация: 28.04.2008
Сообщения: 22
Репутация: 10
По умолчанию

У меня возникает ошибка.


И еще вопросик, можно это сделать через DBImage?
Изображения
Тип файла: jpg Error.JPG (18.6 Кбайт, 16 просмотров)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:31.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter