Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.11.25;
Скачать: [xml.tar.bz2];

Вниз

JPG картинку в базу как запихнуть?   Найти похожие ветки 

 
harismatik   (2002-11-07 14:45) [0]

Я тут видел в форуме вариант через TBLOBField, но почему то в одну таблицу запихнуть удалось, а в другую ну никак. Код абсолютно идентичен, а программа выдает ошибку "Bitmap is not valid". Привожу фрагмент своего кода:

procedure TObjectForm.MapButtonClick(Sender: TObject);
var f:TFileStream; jpg:TJPEGImage; Bmp:TBitmap;
l:word; ext:string;
begin
if OpenMapDialog.Execute then
begin
l:=length(OpenMapDialog.FileName);
ext:=Copy(OpenMapDialog.FileName,l-3,4);
if (ext=".bmp") or (ext=".BMP") then
begin
f:=TFileStream.Create(OpenMapDialog.Filename,fmOpenRead);
f.Position:=0;
bmp:=TBitmap.Create;
bmp.LoadFromStream(f);
Image1.Picture.Assign(bmp);
Table1.Edit;
TBLOBField(Table1.FieldByName("PHOTO")).LoadFromStream(f);
Table1.Post;
bmp.Free;
f.Free;
end;
if (ext=".jpg") or (ext=".JPG") then
begin
f:=TFileStream.Create(OpenMapDialog.Filename,fmOpenRead);
f.Position:=0;
jpg:=TJPEGImage.Create;
jpg.LoadFromStream(f);
Table1.Edit;
TBLOBField(Table1.FieldByName("PHOTO")).LoadFromStream(f);
Table1.Post;
Image1.Picture.Assign(jpg);
DBImage1.Picture.Assign(jpg);
jpg.Free;
f.Free;
end;
end
else Image1.Refresh;
end;


Кто подскажет причину?


 
Prooksius   (2002-11-07 17:09) [1]

Вот рабочий кусок кода. Сохраняется в JPEG, т.к. мало места занимает. Процедура GetBitmapFromImg переводит картинку из разных форматов в JPEG. В Query.SQL текст типа

update table TABLENAME
set Photo = :MyParam
where ID = :ID

Transaction.StartTransaction.
bs := TFIBBlobStream.Create;
try
Bitmap := TBitmap.Create;
JPEGImg := TJPEGImage.Create;
bs.Mode := bmWrite;
bs.Database := DataBase;
bs.Transaction := Transaction;
bs.Truncate;
GetBitmapFromImg(DBPhoto.Picture, Bitmap);
JPEGImg.Assign(Bitmap);
JPEGImg.CompressionQuality := 50;
JPEGImg.Compress;
JPEGImg.SaveToStream(bs);
bs.Finalize;
Query.ParamByName("MyParam").AsQuad := bs.BlobID;
Query.ExecQuery;
Transaction.Commit;
finally
JPEGImg.Free;
Bitmap.Free;
bs.Free;
end;


 
harismatik   (2002-11-07 17:17) [2]

2 Prooksius
Знаешь, мой кусок кода тоже рабочий. Когда я в него подстывляю вместо Table1 Table2, связанную с другой таблицей, в которой есть тоже BLOB поле PHOTO, то все работает. Значит, проблема не в коде, а в самой таблице. Но где? Вот код создания таблицы на SQL:


CREATE TABLE READERS
(
RDR_IND INTEGER NOT NULL,
OBJ_NAM CHAR(20),
OBJ_NUM INTEGER,
OBJ_TYPE INTEGER,
RCH INTEGER,
OBJ_MODE CHAR(1),
KADRY CHAR(1),
OBJ_PERIOD CHAR(4),
OBJ_SHIEF CHAR(35),
OBJ_TEL CHAR(13),
RSN INTEGER,
RDR_ENDIR INTEGER,
RDR_OBJ INTEGER,
STATUS INTEGER,
PHOTO BLOB SUB_TYPE 0 SEGMENT SIZE 80,
OBJ_LOCK INTEGER,
RDR_ID SMALLINT NOT NULL,
TIMEOPENDOOR SMALLINT,
GROUP_NUM SMALLINT,
RDR_INF INTEGER,
RDR_BUS SMALLINT,
RDR_PASS SMALLINT,
SEGM INTEGER,
OBJ_PRZ SMALLINT,
PRIMARY KEY (RDR_IND)
);


Это код таблицы, которая не работает с моим кодом.
А это код создания таблицы, которая работает:


CREATE TABLE STAT
(
WRK_NUM INTEGER NOT NULL,
NAME CHAR(35),
POST CHAR(25),
SECTN INTEGER,
CARD_NUM CHAR(10),
WRK_CAT CHAR(10),
WRK_SHIFT INTEGER,
SPEC_ACS CHAR(1),
PHOTO BLOB SUB_TYPE 0 SEGMENT SIZE 80,
TAB_NUM CHAR(10),
WHOGIVECARD CHAR(35),
DATEGIVECARD CHAR(10),
WRK_APB INTEGER,
PRIMARY KEY (WRK_NUM)
);


В чем же тут загвоздка?


 
iNew   (2002-11-07 18:16) [3]

Скажите а разве нельзя прост сделать так:
Query1.Edit;
Query1Foto2.LoadFromFile(OpenPictureDialog1.FileName);
Query1.Post;


 
harismatik   (2002-11-07 18:37) [4]

2 iNew
Можно, но для jpeg не получится

2 All
Предидущий вопрос снимаю - код был правильным, но ошибка появлялась из-за того, что на другой форме компонент DBImage был связан с этим полем, а он к сожалению не может отображать jpeg картинки без их предварительной обработки. Но дело в том, что при открытии таблицы в этот компонент сразу выводится содержимое поля BLOB. Можно ли где-то вставить обработчик, чтоб в DBImage выводилась картинка из базы? Если можно, то где? Иначе приходится пользоваться компонентом Image.


 
iNew   (2002-11-08 10:50) [5]

Я делал так:
Query1.Edit;
Query1Foto2.LoadFromFile(OpenPictureDialog1.FileName);
Query1.Post;
Причем файл jpg. затем:
procedure TMainForm.DataSource1DataChange(Sender: TObject; Field: TField);
var i : integer;
Stream1: TStream;
ijpg : TJPEGImage;
begin
Image1.Picture.Assign( nil );
if Query1Foto1.IsNull=false then
begin
try
Stream1 := TMemoryStream.Create;
ijpg := TJPEGImage.Create;
Query1Foto1.SaveToStream(Stream1);
Stream1.Position := 0;
ijpg.LoadFromStream( Stream1 );
Image1.Picture.Assign( ijpg );
Stream1.Free;
ijpg.Free;
except
end;
end;
end;


 
harismatik   (2002-11-08 13:26) [6]

2 INew
С компонентом TImage все четко получается, а как быть с TDBImage, который СВЯЗАН с этим BLOB полем?


 
АнКа   (2002-11-08 14:41) [7]

Попробуйте
uses ....,jpeg;

В том модуле формы, где DBImage. Вроде, ругаться не будет.

DBImage1.Picture.LoadFromFile(OpenPictureDialog1.FileName);


А вот встречный вопрос: как вывести теперь эту картинку на печать?



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.11.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.008 c
14-82923
iZEN
2002-11-05 08:58
2002.11.25
Марк Кэнту,


3-82583
harismatik
2002-11-07 14:45
2002.11.25
JPG картинку в базу как запихнуть?


3-82608
NiBL
2002-11-05 09:28
2002.11.25
Помогите с DBEdit !!!


6-82889
drou
2002-09-23 19:32
2002.11.25
Как скачаты файлы из нета или с сетевого компа


14-82998
Залетевший
2002-11-07 19:20
2002.11.25
Биос СРОЧНО





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский