Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как добавить в OLE-поле MDB картинку JPG ? 
V
    Опции темы
Данкинг
Дата 16.7.2009, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Пример для BMP нашёл:
Код

(ADOTable1.Fields.FieldByName('поле') as tblobfield).LoadFromFile('c:\1.bmp');

А для файлов .jpg ?  smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Romikgy
Дата 16.7.2009, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 4
Всего: 146



также


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Данкинг
Дата 16.7.2009, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(Romikgy @ 16.7.2009,  22:54)
также

user posted image


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Keeper89
Дата 16.7.2009, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 1
Всего: 58



Вот так можно:
Код

procedure SaveJpegToTable(Table: TADOTable; PicField:TBlobField; sPicPath: string);
{
Usage:

  SPicFileName := 'C:\!gajba\cdcovers\cdcover1.jpg';
  SaveJpegToTable(ADOTable1, ADOTable1Picture, SPicFileName);
}
var
  fS  : TFileStream;
begin
  fs:=TFileStream.Create(sPicPath, fmOpenRead);
  try
   Table.Edit;
   PicField.LoadFromStream(fs);
   Table.Post;
  finally
   fs.Free;
  end;
end;

http://delphi.about.com/library/code/ncaa030601a.htm

Добавлено через 4 минуты и 33 секунды
Вот еще хороший мануал на эту тему: http://mhs.stiki.ac.id/04113605/ReqForum/d...ge%20Delphi.doc.


--------------------
PM MAIL WWW   Вверх
Данкинг
Дата 16.7.2009, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Непонятно, как её вызывать:
Код

SaveJpegToTable(ADOTable1, ADOTable1Picture, SPicFileName);

ADOTable1Picture - это каким образом здесь указать название поля?!


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Keeper89
Дата 16.7.2009, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 1
Всего: 58



Данкинг, да наверное таким же:
Код

SaveJpegToTable(ADOTable1, ADOTable1.Fields.FieldByName('поле'), 'c:\1.jpg');


Это сообщение отредактировал(а) Keeper89 - 16.7.2009, 22:47


--------------------
PM MAIL WWW   Вверх
Данкинг
Дата 16.7.2009, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Если так, то та же ошибка вылезает:
Код

SaveJpegToTable(ADOTable1, (ADOTable1.fieldbyname('test') as tblobfield), SPicFileName);


А если 
Код

SaveJpegToTable(ADOTable1, ADOTable1.fieldbyname('test'), SPicFileName);

То вылезает ошибка "incompatible types: TBlobField and TField".

Это сообщение отредактировал(а) Данкинг - 16.7.2009, 22:49


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Keeper89
Дата 16.7.2009, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 1
Всего: 58



Цитата(Данкинг @  16.7.2009,  23:47 Найти цитируемый пост)
Если так, то та же ошибка вылезает:

Какая?


--------------------
PM MAIL WWW   Вверх
Данкинг
Дата 16.7.2009, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(Keeper89 @  16.7.2009,  23:48 Найти цитируемый пост)
Какая? 

Которая на скриншоте, о неверном формате BMP.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Keeper89
Дата 16.7.2009, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 1
Всего: 58



Странно должно работать...

А если так:
Код

procedure TForm1.btnSaveSQLClick(Sender: TObject);
var
  Stream: TADOBlobStream;
begin
  {ADOConnection1.Execute('delete from dbo.Categories where ' + '(CategoryName = ''Test'')');}
  ADODataset1.active := true;
  ADODataset1.Insert;
  {ADODataSet1CategoryName.AsString := 'Test';
  ADODataSet1Description.asstring := lowercase(edit1.text);}
  Stream := TADOBlobStream.Create(ADODataSet1Picture, bmWrite);
  if Image1.Picture.Graphic is TJPEGImage then
    TJPEGImage(Image1.Picture.Graphic).SaveToStream(Stream)
  else
    Image1.Picture.Bitmap.SaveToStream(Stream);
  Stream.Free;
  ADODataset1.Post;
  ADODataset1.active := false;
end;


Это сообщение отредактировал(а) Keeper89 - 16.7.2009, 23:11


--------------------
PM MAIL WWW   Вверх
Данкинг
Дата 16.7.2009, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(Keeper89 @  17.7.2009,  00:03 Найти цитируемый пост)
А если так:

Снова та же ошибка, что на скрине. smile  Т.е. код пришлось подправить, но суть та же:
Код

ado1.Append;
jpg:=TJPEGImage.Create;
jpg.LoadFromFile('i:\a1.jpg');
Stream := TADOBlobStream.Create(ADO1.Fields.FieldByName('test'), bmWrite);
jpg.SaveToStream(Stream);
Stream.Free;
ado1.Post;


Добавлено через 7 минут и 46 секунд
И отсюда  пример тоже не работает с той же ошибкой.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Keeper89
Дата 16.7.2009, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 1
Всего: 58



Заменить TADOBlobStream на TBlobStream не поможет?


--------------------
PM MAIL WWW   Вверх
Данкинг
Дата 16.7.2009, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(Keeper89 @  17.7.2009,  00:27 Найти цитируемый пост)
Заменить TADOBlobStream на TBlobStream не поможет? 

Он класса TBlobStream вообще не находит, т.е. "undeclared indenifier: TBlobStream".


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Keeper89
Дата 16.7.2009, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 1
Всего: 58



Цитата(Данкинг @  17.7.2009,  00:30 Найти цитируемый пост)
Он класса TBlobStream вообще не находит, т.е. "undeclared indenifier: TBlobStream". 

Надо подключить модуль DBTables.

Вот еще пример: http://support.microsoft.com/kb/326502 - на VB.NET.

Добавлено через 3 минуты и 1 секунду
И еще: http://www.delphi3000.com/articles/article_1267.asp?SK=


--------------------
PM MAIL WWW   Вверх
Данкинг
Дата 16.7.2009, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(Keeper89 @  17.7.2009,  00:32 Найти цитируемый пост)
Надо подключить модуль DBTables.

"Invalid class typecast":
Код

var p,pp:string;
Stream: TBlobStream;
jpg:TJPEGImage;
begin
...
ado1.Append;
jpg:=TJPEGImage.Create;
jpg.LoadFromFile('i:\a1.jpg');
Stream := TBlobStream.Create((ADO1.Fields.FieldByName('test') as tblobfield), bmWrite);
jpg.SaveToStream(Stream);
Stream.Free;
ado1.Post;

(но тип поля в таблице - "поле объекта", всё верно)


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Keeper89
Дата 16.7.2009, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 1
Всего: 58



А если убрать  as tblobfield?

Добавлено @ 23:51
Или так попробовать:
Код

var
  BlobField: TBlobField;
begin
...
    BlobField := TBlobField(Table.FieldByName(...));
    Table.Edit;
    BlobField.LoadFromStream(...);
...


Добавлено @ 23:53
Вот еще пример нашел:
Код

procedure TFormadddet.Button15Click(Sender: TObject);
var
  i:integer;
  filename,nomn:string;
  FileStream: TFileStream;
  BlobStream: TStream;
begin
  ADOQuery1.First;
  for i:=0 to ADOQuery1.RecordCount do
  begin
    nomn:=ADOQuery1.FieldByName('codedet').AsString;
    ADOQuery1.Edit;
    {BlobStream := ADOQuery1.CreateBlobStream(ADOQuery1.FieldByName('ris'),bmWrite);
    FileStream := TFileStream.Create('картинки/'+nomn+'.jpg',fmOpenRead or fmShareDenyNone);
    BlobStream.CopyFrom(FileStream,FileStream.Size);
    FileStream.Free;
    BlobStream.Free; }
    filename:='c:/pik/'+nomn+'.jpg';
    image1.Picture.LoadFromFile(filename);
    ADOQuery1.FieldByName('ris').Assign(Image1.Picture);
    ADOQuery1.Post;

    ADOQuery1.Next;
  end;
end;

Но здесь мне кажется в Image он преобразуется в конце концов в BMP.

Это сообщение отредактировал(а) Keeper89 - 16.7.2009, 23:54


--------------------
PM MAIL WWW   Вверх
Romikgy
Дата 16.7.2009, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 4
Всего: 146



Код

jpg.LoadFromFile('i:\a1.jpg');
Stream := TBlobStream.Create((ADO1.Fields.FieldByName('test') as tblobfield), bmWrite);
jpg.DIBNeeded;
jpg.SaveToStream(Stream);

?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Romikgy
Дата 17.7.2009, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 4
Всего: 146



а правильнее всего будет так имхо
Код

var
bm: TBitMap;

bm:=TBitMap.create;
jpg.LoadFromFile('i:\a1.jpg');
bm.Assign(jpg);
Stream := TBlobStream.Create((ADO1.Fields.FieldByName('test') as tblobfield), bmWrite);

bm.SaveToStream(Stream);
bm.Free;




--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Данкинг
Дата 17.7.2009, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Romikgy, "Invalid class typecast". (это я про первый пример)

Keeper89, последний пример действительно преобразует в BMP, ибо вылетает та же ошибка, которая на скрине. smile 

Это сообщение отредактировал(а) Данкинг - 17.7.2009, 00:17


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Keeper89
Дата 17.7.2009, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 1
Всего: 58



 smile  smile  smile  smile  smile  smile 
Все варианты уже перебрали...


--------------------
PM MAIL WWW   Вверх
Данкинг
Дата 17.7.2009, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(Romikgy @  17.7.2009,  01:12 Найти цитируемый пост)
а правильнее всего будет так имхо

Со вторым примером то же. 

Цитата(Keeper89 @  17.7.2009,  01:17 Найти цитируемый пост)
Все варианты уже перебрали... 

Угу, пора спать, утро вечера мудренее. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Keeper89
Дата 17.7.2009, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 1
Всего: 58



Может какая проблема с БЛОБ полем в БД?

Добавлено через 1 минуту и 4 секунды
Ого, точно уже половина второго, утром еще подумаю, может примерчик у себя попробую для верности.


--------------------
PM MAIL WWW   Вверх
Данкинг
Дата 17.7.2009, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Вот так вот ничего в БД не пишется, но и ошибок не выдаёт, т.е. уже лучше. smile 
Код

   ADO1.Append;
   jpg := TJpegImage.Create;
   jpg.LoadFromFile('i:\a2.jpg');
   jpg.CompressionQuality := 20;
   jpg.Compress;
   ms := TMemoryStream.Create;
   jpg.SaveToStream(ms);
   (ADO1.FieldByName('test') as tBlobField).LoadFromStream(ms);
   ADO1.Post;


Добавлено через 2 минуты и 11 секунд
Цитата(Keeper89 @  17.7.2009,  01:19 Найти цитируемый пост)
Может какая проблема с БЛОБ полем в БД?

Вот базу прикладываю, вроде там проблем-то быть не может. smile 

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  phbank.rar 6,52 Kb


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
former
Дата 17.7.2009, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 7
Всего: 17



Данкинг, а подтип и размер поля у тебя какой?
Выдернул рабочий кусок из старого проекта.
Код

var BS: TStream;
      Jpg: TJpegImage;
begin
    BS:=nil;
    Jpg:=TJPegImage.Create;
    Jpg.CompressionQuality:=100;
    Jpg.PixelFormat:=jf24Bit;
    Jpg.LoadFromFile('C:\1.jpg');
    Jpg.JPEGNeeded;
    BS:=TblName.CreateBlobStream(TblName.FieldByName('PutConstruction'), bmWrite);
    Jpg.SaveToStream(BS);
    BS.Free;
    Jpg.Free;
end;


Кстати, тема уже тысячу раз поднималась. Поищи в разделе. Да и в DRKB тоже вроде было.


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Keeper89
Дата 17.7.2009, 01:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 1
Всего: 58



Вот, сделал по самому первому коду - все отлично работает. Проект прикрепил. Теперь спать. smile

Это сообщение отредактировал(а) Keeper89 - 17.7.2009, 01:03

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  ___JPEG.rar 355,46 Kb


--------------------
PM MAIL WWW   Вверх
Данкинг
Дата 17.7.2009, 01:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(former @  17.7.2009,  01:46 Найти цитируемый пост)
Данкинг, а подтип и размер поля у тебя какой?

Какой подтип и размер, там же нет таких параметров вообще. smile 

Цитата(former @  17.7.2009,  01:46 Найти цитируемый пост)
Кстати, тема уже тысячу раз поднималась. Поищи в разделе. Да и в DRKB тоже вроде было. 

Дык, в DRKB не нашёл.

Цитата(Keeper89 @  17.7.2009,  02:02 Найти цитируемый пост)
Вот, сделал по самому первому коду - все отлично работает.

До меня дошло. smile Проблема не в этом, а в DbImage, который лежал на форме - ошибку о невалидном BMP выдавал именно он. smile  smile Правда, почему при этом не происходило добавления в таблицу - всё равно непонятно. smile 

Цитата(Keeper89 @  17.7.2009,  02:02 Найти цитируемый пост)
Теперь спать.

Да, наверное всё же...




--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
former
Дата 17.7.2009, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 7
Всего: 17



Цитата(Данкинг @  17.7.2009,  01:25 Найти цитируемый пост)
Проблема не в этом, а в DbImage, который лежал на форме - ошибку о невалидном BMP выдавал именно он.

Правильно, стандартный DbImage глючит при работе с jpg. Используй альтернативу.


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Данкинг
Дата 17.7.2009, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(former @  17.7.2009,  15:11 Найти цитируемый пост)
Используй альтернативу. 

Я обычный TImage буду использовать. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.2539 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.