Q&A

  • MSSQL db에 저장된 이미지를 가져오면 짤리는데...
안녕하세요
그림을 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;
0  COMMENTS