데이타베이스 데스크탑에서 table을 작성하잖아요? 그 각각의 Field Name마다 Type을 설정해주잖아요.
그런데 Memo와 Graphic을 선택하고나면 [BLOB Memo], [BLOB Graphic]이라고만 생기잖아요. 그런데 어떻게 그림과 메모를 입력할수 있나요? 그리고 프로그램을 구동하면서 그림과 메모내용을 지우거나 추가 할수 있나요. 어떻게 해야 프로그램에서 추가 삭제가 가능한지 알려주세요. 파라독스로 하려고 합니다. 델파이 5.0에서 demodb fishfact방에 있는 프로그램과 사용하는 db가 제가 하고 싶은 작업의 예입니다.
다른 곳에 질문을 올렸는데 답변이 없어서 이곳에 도움을 청합니다.
꼭좀 답변 부탁 드립니다.
BLOB 관련 게시글들을 조금만 검색해 보시면 쉽게 해결하실 수 있을텐데...
다음은 예전에 제가 오라클로 작업할때 쓰던 함수 입니다.
단, 30k 이하의 사이즈 파일만 저장 가능했더랬습니다.
이일을 마친후 그 회사를 그만둔지라 그뒤로 수정할 일이 없어서
이 문제는 아직도 미해결상태입니다. ^^;
소스가 정리되어있지도 않구요...-_-;
지금보면 왜 이렇게 했나 싶은 부분도 있네요 ^_^
아무튼 아래 모듈을 조금 손보시면 편리하게 쓰실 수 있으리라 생각되는군요.
지금은 db 를 놓은지 꽤되서 기억도 가물가물하군요...
아마도 사용자가 지정한 파일을 읽어서 저장하던 루틴이었던거같네여 ^^;
도움이 되시길 바랍니다.
=================================================================
function fbTImageToBlob( loImage : TImage;
lsPcitureFileName,
lsBlobFieldName : String;
loBlobDataSet : TClientDataSet) : Boolean;
var
JPG : TJPEGImage;
BS : TStream;
f : file of Byte;
size : Longint;
begin
if FileExists(lsPcitureFileName) then
begin
AssignFile(f, lsPcitureFileName);
Reset(f);
size := FileSize(f);
CloseFile(F);
if Size < 30000 then
begin
loImage.Picture.LoadFromFile(lsPcitureFileName);
if (loBlobDataSet.State <> dsInsert) and (loBlobDataSet.State <> dsEdit) then
loBlobDataSet.Edit();
BS := loBlobDataSet.CreateBlobStream(TBlobField(loBlobDataSet.FieldByName(lsBlobFieldName)), bmWrite);
if UpperCase(ExtractFileExt(lsPcitureFileName)) = '.BMP' then
begin
(loImage.Picture.Graphic as TBitMap).SaveToStream(BS);
end
else if (UpperCase(ExtractFileExt(lsPcitureFileName)) = '.JPG') or
(UpperCase(ExtractFileExt(lsPcitureFileName)) = '.JPEG') then
begin
(loImage.Picture.Graphic as TJpegImage).SaveToStream(BS);
end;
BS.Free();
Result := True;
end
else
Result := False;
end
else
Result := False;
end;
function fbBlobToTImage( loImage : TImage;
lsBlobFieldName : String;
loBlobDataSet : TClientDataSet) : Boolean;
var
JPEG : TJPEGImage;
BMP : TBitMap;
bS : TStream;
begin
if not loBlobDataSet.FieldByName(lsBlobFieldName).IsNull then
begin
bs := loBlobDataSet.CreateBlobStream(TBlobField(loBlobDataSet.FieldByName(lsBlobFieldName)), bmRead);
bs.Position := 0;
try
jpeg := TJpegImage.Create();
jpeg.LoadFromStream(bs);
loImage.Picture.Assign(jpeg);
jpeg.Free();
except
bs.Position := 0;
BMP := TBitMap.Create();
BMP.LoadFromStream(bs);
loImage.Picture.Assign(BMP);
BMP.free();
bs.Free();
end;
Result := True;
end
else
begin
loImage.Picture.Graphic := NIL;
Result := False;
end;
end ;