안녕하세요
그림을 DB에 저장하여 가져오면 일정부분밖에 못가져오는데 저장할때 잘못된건지 로딩할대 잘못된건지 봐주세요..
32k만 저장되는 경우랑 같아서 bde admin에서 설정도 바꿔 봤습니다.
database name 적고 blob size 100000로 바꾸고..
file로 저장하니 딱 32k만 저장되더군요
db field는 image로 하였구....길이가 16에서 변경이 안되길래 이데루 하였구....
binary하니 저장은 되는데 읽어지지를 않아서 확인은 못하였습니다...
paradox에는 binary하니 아무 이상이 없는데..ㅜㅜ
잘못된것점 잡아주시고 행복한 하루 되세요...^^
DB는 MSSQL입니다.
//저장
procedure TForm1.Button1Click(Sender: TObject);
begin
Database1.AliasName:='draw';
Database1.LoginPrompt:=FALSE;
Database1.Params.Add('NAME=a');
Database1.Params.Add('PASSWORD=p');
Database1.Open; { no prompting dialog box for pwd }
with Query1 do
begin
close;
SQL.Clear;
SQL.add(' insert into draw (part_no, pic) ');
SQL.add(' values (:part_no, :pic)');
ParamByName('part_no').AsString := Trim(Edit1.Text);
ParamByName('pic').LoadFromFile('D:1.jpg',FTBLOB);
prepare;
try
// ShowMessage(sql.GetText);
ExecSQL;
ShowMessage(' 추가되었습니다.');
except
showmessage('데이터베이스연결을 확인해 주십시요');
end;
unprepare;
end;
end;
//로딩
procedure TForm1.Button2Click(Sender: TObject);
var
aJpeg : TJpegImage;
Buffer: PChar;
MemSize: Integer;
BStream : TStream;
begin
Database1.AliasName:='draw';
Database1.LoginPrompt:=FALSE;
Database1.Params.Add('NAME=a');
Database1.Params.Add('PASSWORD=p');
Database1.Open; { no prompting dialog box for pwd }
with Query1 do
begin
close;
SQL.Clear;
SQL.add(' select * from draw where part_no = ''' + Edit1.Text +''' ');
open;
end;
Image1.Picture := nil;
BStream := Query1.CreateBlobStream(Query1.FieldByName('pic'),bmRead);
MemSize := BStream.Size;
Inc(MemSize);
Buffer := AllocMem(MemSize);
try
BStream.Read(Buffer^, MemSize);
BStream.Position := 0;
aJpeg := TJPEGImage.Create;
try
aJpeg.LoadFromStream(BStream);
Image1.Picture.Assign(aJpeg);
finally
aJpeg.Free;
end;
finally
FreeMem(Buffer, MemSize);
end;
end;