자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Firemonkey android에서 datasnap 사용하여 stream 데이터 전송시 에러
2014.04.23 06:30
datasnap을 사용하여
1. server
. ms-sql 테이블에 binary 필드를 가진 테이블 정의
. client 요청 시, binary 필드 검색하여 리턴
2. desktop 기반의 client
. server에 db 데이터 요청
. ui에 binary 데이터 표시(이미지)
3. android 기반의 client
. 기능은 2번과 동일
를 샘플로 작성했습니다.
1번과 2번 간에는 binary 데이터를 stream 형식으로 잘 받아서 UI에 이미지를 보여줍니다.
1번과 3번 간에는 binary 데이터를 stream 형식으로 잘 받는 것으로 보이는데,
- UI에 이미지를 보여주는 과정에서 에러가 발생합니다.
. 에러가 발생하는 구간의 callstack은 첨부파일과 같습니다.
. 에러 메시지: "Range check error."
참고로 UI에서 보여주는 binary 데이터에 대한 처리 코드는 아래와 같습니다.
동일한 방식을 desktop 기반에 적용하면 잘 동작합니다.
procedure TForm3.StringGrid1Click(Sender: TObject);
var
ResultStream: TStream;
ServiceProxy: TServerMethods1Client;
bitmap : TFixedBitmapItem;
buffer : TBytes;
Item : TBitmapOfItem;
MemStream: TMemoryStream;
begin
//Edit1.Text: = IntToStr (ClientDataSet1.FieldByName ('film_id'). AsInteger);
ServiceProxy := TServerMethods1Client.Create (SQLConnection1.DBXConnection);
try
ResultStream := ServiceProxy.GetPictureById(1);
if ResultStream <> nil then
begin
MemStream := TMemoryStream.Create;
MemStream.CopyFrom( ResultStream, ResultStream.Size ); ==> 에러 생기는 코드
Item := TBitmapOfItem.CreateFromStream( MemStream );
Image1.MultiResBitmap.Bitmaps[0] := Item;
end;
finally
ServiceProxy.Free;
end;
end;
뭐가 문제일까요?
모바일 기반의 Firemonkey에서만 문제가 생기네요.
댓글 0
Firemonkey android에서 datasnap 사용하여 stream 데이터 전송시 에러
2014.04.23 06:30
datasnap을 사용하여
1. server
. ms-sql 테이블에 binary 필드를 가진 테이블 정의
. client 요청 시, binary 필드 검색하여 리턴
2. desktop 기반의 client
. server에 db 데이터 요청
. ui에 binary 데이터 표시(이미지)
3. android 기반의 client
. 기능은 2번과 동일
를 샘플로 작성했습니다.
1번과 2번 간에는 binary 데이터를 stream 형식으로 잘 받아서 UI에 이미지를 보여줍니다.
1번과 3번 간에는 binary 데이터를 stream 형식으로 잘 받는 것으로 보이는데,
- UI에 이미지를 보여주는 과정에서 에러가 발생합니다.
. 에러가 발생하는 구간의 callstack은 첨부파일과 같습니다.
. 에러 메시지: "Range check error."
참고로 UI에서 보여주는 binary 데이터에 대한 처리 코드는 아래와 같습니다.
동일한 방식을 desktop 기반에 적용하면 잘 동작합니다.
procedure TForm3.StringGrid1Click(Sender: TObject);
var
ResultStream: TStream;
ServiceProxy: TServerMethods1Client;
bitmap : TFixedBitmapItem;
buffer : TBytes;
Item : TBitmapOfItem;
MemStream: TMemoryStream;
begin
//Edit1.Text: = IntToStr (ClientDataSet1.FieldByName ('film_id'). AsInteger);
ServiceProxy := TServerMethods1Client.Create (SQLConnection1.DBXConnection);
try
ResultStream := ServiceProxy.GetPictureById(1);
if ResultStream <> nil then
begin
MemStream := TMemoryStream.Create;
MemStream.CopyFrom( ResultStream, ResultStream.Size ); ==> 에러 생기는 코드
Item := TBitmapOfItem.CreateFromStream( MemStream );
Image1.MultiResBitmap.Bitmaps[0] := Item;
end;
finally
ServiceProxy.Free;
end;
end;
뭐가 문제일까요?
모바일 기반의 Firemonkey에서만 문제가 생기네요.