Q&A

  • DBGride에 메모필드 나타내기...
안녕하세요?



델파이 3에 ms-sql을 사용하고 있는데요...



text형 필드에 Tmemo로 디비에 저장을 했는데...

DBGrid에는 (memo)라는 표시만 되고... 내용은 보이질 않네요...

내용을 보이게 하려면 어찌 해야 하나요...



참고로 dbgrid는 table과 연결했습니다.







밑에 누군가 답을 올리셨는데.....

-------------------------------------------------------------------------

// 이 예제의 DatabaseName은 'DBDEMOS'이고 TableName은 'BIOLIFE.DB' 입니다

unit Unit1;



interface



uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

Grids, DBGrids, Db, DBTables;



type

TForm1 = class(TForm)

Table1: TTable;

DataSource1: TDataSource;

DBGrid1: TDBGrid;

Table1Notes: TMemoField;

procedure DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;

Field: TField; State: TGridDrawState);

private

{ Private declarations }

public

{ Public declarations }

end;



const

MAX_CHARSIZE = 50; // DBGrid에 출력할 Memo 필드의 글자수



var

Form1: TForm1;



implementation



{$R *.DFM}



procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;

Field: TField; State: TGridDrawState);

var

P: array [0..MAX_CHARSIZE] of char;

BS: TBlobStream;

S: String;

begin

if Field is TMemoField then

begin

with (Sender as TDBGrid).Canvas do

begin

{Table1Notes 은 TMemoField 형입니다}

BS := tBlobStream.Create(Table1Notes, bmRead);

FillChar(P,SizeOf(P),#0);



BS.Read(P, MAX_CHARSIZE); {blobStream 에서 MAX_CHARSIZE 바이트만큼 읽는다}

BS.Free;

S := StrPas(P);

while Pos(#13, S) > 0 do {CR 문자 제거}

S[Pos(#13, S)] := ' ';

while Pos(#10, S) > 0 do {LF 문자 제거}

S[Pos(#10, S)] := ' ';

FillRect(Rect);

TextOut(Rect.Left, Rect.Top, S);

end;

end;

end;

-------------------------------------------------------------------

이대로 하니까 전 안되더라구요...

Table1Notes: TMemoField; --> 이게 없다고 그러구요...

tBlobStream --> 이것도 잘못됐다구 그러는데요...





어떻게 해결을 해야 하나요?

부탁드립니다.

0  COMMENTS