Q&A

  • onCalcFields인 누계를 조인테이블을 사용한 DBGrid에서 보여주려고...
안냐세요?

델파이 초초보가 여러분들께 또다른 문의를 드리려고 해요.

귀찮으시더라도 꼭 좀 봐주시겠어요?



Table A,B 2개를 조인해서 select 구문을 DBGrid에 뿌려주고 있습니다.

종류는 paradox를 쓰고 있고요.



선택한 필드 중 onCalcFields가 2개 있는데

하나는 일련번호 붙이는 것이고

또 하나는 바로 전 합계 field에 타입별로 갯수*단가 결과값을 더하는

누계 비슷한 것이죠.



일련번호 붙이는 것은 다른 게시물 들 보고 해결했는데요, ^^;;

문제는 누계가 안되더군요. --;;



게시물 중 누계에 대한 것이 있기는 한데

그 경우는 데이터가 dsedit 또는 dsinsert 상태인 경우만 되고

저처럼 2개의 table을 조인한 경우는 안되는 것 같더군요.

그래서, 어느 이벤트에 코딩을 해야 할지도 모르겠고요.. ㅠ.ㅠ



혹시나 싶어 시험삼아 게시물대로 해보았더니

"Cannot modify a read-only dataset'이라는 에러가 뜹니다.



여러 고수님들 어떻게 해야

2개 table을 조인한 DBGrid에

누계 field를 보여줄 수 있을까요?

그리고, 어느 이벤트에 해야 하나요?



게시물을 참고해서 작성한 것은 다음과 같습니다.



1) Query1의 SQL 문

Select S.S_Num,S.S_Code,S.S_Date,S.S_Type,S.S_Amount,S.S_Remained,

S.S_Money as TMoney,G.G_Name,G.G_Price

from States.DB S, Goods.DB G

Where S.S_Code=G.G_Co



위에서 TMoney가 누계를 내어서 DBGrid에 보이려는 가상field(맞나요?)입니다.



2) coding 구문



procedure TForm1.Query1AfterOpen(DataSet: TDataSet);

var

Sumvalue: integer;

OldBookmark: TBookMark;

begin

Query1.DisableControls;

OldBookmark := Query1.GetBookmark;

if Query1.State in [dsinsert,dsedit] then Query1.Post;

Query1.Prior;

Sumvalue := Query1.Fields[6].AsInteger; //여기서는 first data의 TMoney

repeat

if Query1.EOF then break;

Query1.Edit;

Query1.FieldByName('TMoney').AsInteger := Sumvalue +

Query1.Fields[8].AsInteger*Query1.Fields[4].AsInteger;

Sumvalue := Query1.FieldByName('TMoney').AsInteger;

Query1.post;

Query1.Next;

until Query1.EOF;



Query1.GotoBookmark(oldbookmark);

Query1.FreeBookmark(oldbookmark);



end;

0  COMMENTS