델파이

TDBNavigator 의 Insert 버튼의 Insert 메소드를 Append 로 바꾸기

미스터몽키 2016. 9. 1. 23:22


1. Insert 를 Append로 바꾸기


TDBNavigator 콤포넌트의 Insert 버튼은 DataSet.Insert 메소드를 실행하여 현재 레코드 사이에 Insert 한다.

그러나 실무에서는 맨 마지막 레코드 다음에 추가(Append) 되는 것이 훨씬 자연스러운 경우가 많다.

이럴 때는 다음 코드처럼  TDBNavigator 의 BeforeAction 이벤트에서 Insert 메소드를 Append 메소드로 바꾸면 된다.


procedure TForm1.DBNavigator1BeforeAction(Sender: TObject; Button: TNavigateBtn);
begin
  // Insert 버튼 누르면 Append 되게
  if Button = nbInsert then
  begin
    TDBNavigator(Sender).DataSource.DataSet.Append;
    Abort;  
  end;
end;



2. 마지막 레코드에서 방향키 아래로 눌렀을 때 입력 모드되지 않게


다음 코드처럼 TDBGrid의 onKeyUp 이벤트에 작성하면 마지막 레코드에서 방향키 아래로 누른 것이 취소된다.


procedure TForm1.DBGrid1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  //마지막 레코드에서  KeyDown 방향키 눌렀을때 Insert가 안되게
  if Key = VK_DOWN then
  begin
    if ADOTable1.Eof then
      ADOTable1.Cancel;
  end;
end;

(주의 버그발견) 이 코드도 방향키를 아래로 계속누르고 있으면 작동되지 않는다 . ㅠㅠ



3. TTable 저장시 에러 발생할 때 에러 무시하는 방법

다음 처럼 OnPostError 이벤트에서 코드를 작성하면 에러 메시지 안 나오고 입력모드나 수정모드를 취소할 수 있다.


procedure TfrmHw100.tbHw102PostError(DataSet: TDataSet; E: EDatabaseError; var Action: TDataAction);
begin
  Action := daAbort;
  Dataset.Cancel;
end;