Форум: "Базы";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];
ВнизЗаписть файлов *.jpg в БД Найти похожие ветки
← →
KapitanSerg © (2004-09-10 11:12) [0]Уважаемые мастера! В таблице БД Access есть поле "Поле объекта OLE". В него необходимо из программы загрузить рисунок.
При загрузке рисунка из файла *.bmp все Ok! А при попытке загрузить рисунок из файла *.jpg или *.tif происходит ошибка "Bitmap image is not valid".
Пробовал использовать методы LoadFromFile и LoadFromStream
типов TGraphicField, TBlobField, TMemoField - ошибка повторяется.
Help My!
С уважением KapitanSerg
← →
sniknik © (2004-09-10 11:24) [1]для чего загружаеш? это важно если хочеш его прочесть. ;о) и чем хочеш прочестью
а вот с записью в базу из файла проблем не должно быть никаких.
← →
KapitanSerg © (2004-09-10 11:32) [2]>а вот с записью в базу из файла проблем не должно быть никаких.
Наверно я использовал не очень корректный термин. Конечно мне необходимо записать рисунок в БД. Но при вызове,например, метода GraphicField.LoadFromFile("MyFile.jpg") или BlobField.LoadFromFile("MyFile.jpg") происходит указанная ошибка!!!!
← →
sniknik © (2004-09-10 12:10) [3]> GraphicField.LoadFromFile("MyFile.jpg") или BlobField.LoadFromFile("MyFile.jpg") происходит указанная ошибка!!!!
даже странно, как это люди в это поле (OLE) умудряются вордовские документы и выполняемые файлы пихать... ;о)
этот тип поля в основном не для картинок, их просто можно там хранить, так что указанная ошибка на сохранении....
может всетаки не там присходит?
может всетаки покажеш как делаеш?
← →
KapitanSerg © (2004-09-10 12:18) [4]Уважаемый sniknik!
С каких это пор файл *.jpg стал вордовским или выполняемым?
В Help для Access указано что "Поле объекта OLE" предназначено для хранения рисунков! Впрочем, я пробовал использовать и поле типа "Memo" (я говорю именно о типах поддерживанмых Access!) результат тотже.
Если я не прав, то подскажите какой тип данных необходимо использовать в БД Access для хранения изображений!!!!!
← →
sniknik © (2004-09-10 12:28) [5]> "Поле объекта OLE" предназначено для хранения рисунков!
у нас наверное хелп разный
Поле объекта OLE
Объект (например, электронная таблица Microsoft Excel, документ Microsoft Word, рисунок, звукозапись или другие данные в двоичном формате), связанный или внедренный в таблицу Microsoft Access.
До 1 Гбайт (ограничивается объемом диска).
риунок это "одно из", и проверять в движке такое поле на "рисуночность" глупо.
нет, поле верное. реализация неверная.
← →
KapitanSerg © (2004-09-10 12:35) [6]Вот код процедуры с использованием LoadFromStream:
procedure TDocWin.btAddClick(Sender: TObject);
var
FS: TFileStream;
begin
with DataModul do
if sD.Execute then {sD - файловый диалог}
Begin
if not (tbD.State in [dsInsert, dsEdit]) then tbD.Insert;
FS := TFileStream.Create(sD.FileName, fmOpenRead);
try
tbDDC.LoadFromStream(FS); {В этом месте возникает ОШИБКА!}
finally
FS.Free;
end;
tbDIM.AsInteger := tbMID.AsInteger;
tbD.Post;
end;
end;
← →
sniknik © (2004-09-10 12:44) [7]> {В этом месте возникает ОШИБКА!}
ошибка вообще или "Bitmap image is not valid" как ты говорил?
хорошо поставить перед загрузкой
FS.Position:= 0;
p.s. типы используемых обектов?
← →
KapitanSerg © (2004-09-10 13:00) [8]> FS.Position:= 0;
Насколько я знаю после создания потока указатель (Pоsition) и так устанавливается в 0.
> ошибка вообще или "Bitmap image is not valid" как ты говорил?
Да, именно "Bitmap image is not valid"! При этом, если в sD-диалоге выбирается файл *.bmp, то ошибки не возникает и все работает без замечаний.
>p.s. типы используемых обектов?
Критичен только тип tbDDC. Как указано в вопросе, я пробовал использовать для него типы TGraphicField, TBlobField, TMemoField.
Ошибка при этом одна и таже.
Тип tbD : TADOTable;
← →
sniknik © (2004-09-10 13:10) [9]дело наверняка в типе. попробуй так
TBlobField(tbD.FieldByName("imfield")).LoadFromFile("file.jpg");
← →
KapitanSerg © (2004-09-10 13:14) [10]
> TBlobField(tbD.FieldByName("imfield")).LoadFromFile("file.jpg");
Зачем принудительно преобразовывать тип поля к TBlobField если оно и так типа TBlobField?
Да и потом, с *.bmp усё !Ok
← →
sniknik © (2004-09-10 14:05) [11]> Зачем принудительно преобразовывать тип поля к TBlobField если оно и так типа TBlobField?
незачем, просто ты так и не сказал точно какой у тебя тип поля, это чтобы быть уверенным.
> Да и потом, с *.bmp усё !Ok
и я кажется догадался почему.
вопрос
> sniknik © (10.09.04 11:24) [1]
> для чего загружаеш? это важно если хочеш его прочесть. ;о) и чем хочеш прочестью
который ты с успехом проигнорировал.
именно в эту тему
у тебя в программе есть DBImage который привязан к этому полю, это он ошибку выдает, уже на чтении.
(вопрос на самом деле должен быть про запись/чтение)
← →
KapitanSerg © (2004-09-10 14:11) [12]
> у тебя в программе есть DBImage который привязан к этому
> полю, это он ошибку выдает, уже на чтении
Есть такая фигня!
Счас попробую удаить DBImage!
← →
KapitanSerg © (2004-09-10 14:16) [13]Удалил DBImage стала записывать!
Уважаемый sniknik! А не подскажите ли теперь какой компонент лучше использовать для визуализации этого изображения, записанного в БД.
А, вообще, СПАСИБО!
← →
sniknik © (2004-09-10 14:36) [14]просто Image, но т.к. запись придется анализировать при загрузке в Image то тогда такое чтение (из файла в базу) становится весьма и весьма неудобным. (проще записывать в базу jpg из Image.Picture.Graphic, тогда он также легко "ложится" обратно)
это если хочется оботись без промежуточных файлов, а то просто записать в файл из базы и читать из имаджа.
кстати для tif вроде бы нет стандартного компанента.
← →
Pat © (2004-09-10 15:10) [15]KapitanSerg © (10.09.04 14:16) [13]
Удалил DBImage стала записывать!
uses jpeg
← →
KapitanSerg © (2004-09-10 15:15) [16]
> Pat © (10.09.04 15:10) [15]
Не понял! Поясните тупому!
← →
sniknik © (2004-09-10 16:15) [17]для использования формата jpeg подключи модуль в uses программы.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.032 c