Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[14598] ansistring으로 저장된 BLOB필드의 내용을 richedit로 불러오려고 할때(Delphi2010에서)
박태성 [] 2274 읽음    2013-01-30 17:30
del7 + zeos 6.6.4 + firebird 2.1로 만들어진 프로그램을 delphi2010 + zeos 7.0.3 + firebird 2.1로
마이그레이션할려고 테스트중입니다.(작업환경은 Win7 32bit이고 데이타베이스의 charset=None으로 되어
있습니다)

richedit의 내용을 디비의 BLOB필드에 저장하고 불러오는 루틴에서 저장은 제대로 되는데
richedit로 저장된 내용을 불러오면 글자가 깨져서 불러와집니다.
<저장하기>
var
  memSub: TMemoryStream;
  sBuf: Ansistring;
  id: integer;
begin
  memSub := TMemoryStream.Create;
  RichEdit.Lines.SaveToStream(memSub);
  memSub.Position := 0;
  SetLength(sBuf, memSub.Size);
  memSub.Read(sBuf[1], memSub.Size);
  // sBuf의 값을 DB의 BLOB필드에 저장


<불러오기>
var
  Stream : TStream;
  sBuf : AnsiString;
begin
  Stream := FQuery.CreateBlobStream(FQuery.FieldByName('S_SUBJECT'), bmRead).Create;
  Stream.Position := 0;
  SetLength(sBuf, Stream.Size);
  Stream.Read(sBuf[1], Stream.Size);
  RichEdit.SelStart := RichEdit.GetTextLen;
  RichEdit.SelText := sBuf;


볼랜드 포럼에 del2009이후로 UnicodeString이 기본 string으로 되어 있으서 코드를 수정해 줘야
하는 부분에 대한 글이 있어서 참고하고 작업을 해 봐도 여전히 깨집니다.
// ANSI 데이터에서 맞는 코드
var
  S : String;
  Temp : AnsiString;
begin
  Stream.Read(L, SizeOf(Integer));
  SetLength(Temp, L);              // <<-- 임시 AnsiString 사용
  Stream.Read(Pointer(Temp)^, L * SizeOf(AnsiChar));  // <<-- 버퍼 사이즈를 바이트로 지정
  S := Temp;                       // <<-- 스트링을 유니코드로 넓힘


위와 같이 작업하라고 해서
var
  Stream : TStream;
  sBuf : AnsiString;
  L : integer;
  temp : string;
begin
  Stream := FQuery.CreateBlobStream(FQuery.FieldByName('S_SUBJECT'), bmRead).Create;
  Stream.Position := 0;
  L := Stream.Size;
  SetLength(sBuf, L);
  Stream.Read(Pointer(sBuf)^, L * SizeOf(AnsiChar));
  temp := sBuf;
  RichEdit.SelStart := RichEdit.GetTextLen;
  RichEdit.SelText := temp;

이렇게 수정해봐도 여전히 제대로 불러오지를 못하네요. unicodestring과 관련해서 어떤식으로 작업해야
제대로 richedit에 값을 불러 올 수가 있을까요?

+ -

관련 글 리스트
14598 ansistring으로 저장된 BLOB필드의 내용을 richedit로 불러오려고 할때(Delphi2010에서) 박태성 2274 2013/01/30
14601     Re:구글링으로 해결책을 찾았습니다. 박태성 2130 2013/02/01
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.