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
[3212] [답변] SAS5542/ 델파이...초보...
grcsb [ ] 1418 읽음    1998-06-10 12:31
온라인으로 작성해야하는 상황 때문에..
다소 오타가 있을 수 있으니 양해 바랍니다..
(아침에는 델파이를 사용할 수 없는 곳에 있기 때문에..)

From 류..

---------

질문1)예를 들어서  특정화일에

...  숫자필드 .. 잔액필드(임시필드) ....
       1000       1000
       2000       3000
       3000       6000
       1500       7500 (숫자필드값을 계속 더해져서 만들어지는값)
         :        :
         :        :

참고)
  우선적으로 질문하신 문제에서 잔액필드를 항상 계산을 한다는
  것은 별로 바람직한 일이 못됩니다.  데이타가 계산을 요구를하고
  변동이 적은 경우에는 미리 계산되어진 Table을 사용하는 것이
  유리합니다.  예를 들어 통계와 같은 정보들은 더욱 그렇습니다.
  월단위로 통계를 알고자할 때 이미 지난 달들의 데이타는 고정적인데도
  불구하고 매번 계산해야 한다면 퍼포먼스의 손해를 보겠죠. 

답변1) View Table을 사용
  Paradox같은 곳에서는 안됩니다..

Create View [원하시는 이름] as
  Select A.PK,
         (Select Sum(B.숫자필드) From [사용하시는 테이블 이름] B
          Where B.PK <= A.PK)
  From [사용하시는 테이블 이름] A

답변2) 델파이 코딩을 이용

procedure TForm1.FormCreate(Sender: TObject);
begin
  Query1.SQL.Add('Select Sum(숫자필드) From [사용하시는 테이블 이름]');
  Query1.SQL.Add('Where PK <= :PK');
end;

procedure TForm1.Table1CalcFields(DataSet: TDataSet);
begin
  Query1.Close;
  // PK는 사용하시는 테이블의 Primary Key Field 이름을 넣어 주세요..
  Query1.ParamByName('PK').AsInteger:= Table1['PK'];
  Query1.Open;
  Table1['잔액필드']:= Query1.Field[0].AsInteger;
end;

답변3) RDBMS의 Trigger를 이용하는 경우
  해당 Table 에 잔액필드를 생성하고..
  Trigger를 이용해서 매 삽입/삭제 마다 계산을 해서..
  필드를 채워주는 방법도 고려해보세요..


질문2) 신규 값을 등록하는데...

답변1) TTable의 BeforePost Event를 사용
  TTable.FindKey로 미리 Record를 검사하는 방법..
  Multi User의 경우에는 미리 검사해도 키가 중복될 수 있으니..
  에러처리를 하시고요..  (거의 드물겠지만)

procedure TForm1.Table1AfterPost(DataSet: TDataSet);
begin
  If Table1.FindKey([DBEdit1.Text]) then
     Begin
       ShowMessage('같은 내용이 이미 있습니다.');
       Table1.Cancel;
     End;
end;
 
답변2) Try Except 사용
  Try Except를 사용해서 에러가 나도 메시지를 뿌리지 않고..
  프로그래머가 에러가 났을 때 에러처리를 해주는 방법을 고려하세요..

procedure TForm1.Button1Click(Sender: TObject);
begin
  Try
    Table1.Post;
  Except
    ShowMessage('데이타를 저장하는 도중 에러가 발생했습니다.');
    Table1.Cancel;  // 또는 기타 에러처리
  End;
end;


* 음 너무 오랫 동안 DB 프로그래밍을 손을 때서리..
  가물거리네요.. 더욱이 메뉴얼 하나 없어서리..
  DB 프로그램도 없어 태스트도 못해봤구요..
  여하튼 조금이라도 이상이 있다면 양해를 바랍니다..



+ -

관련 글 리스트
3212 [답변] SAS5542/ 델파이...초보... grcsb 1418 1998/06/10
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.