2012-04-16 3 views
2

많은 데이터를 테이블에 게시하고 테이블 내의 값을 변경해야하는 애플리케이션을 만듭니다.데이터 테이블 오류 방지

대부분의 응용 프로그램을 쓸 때마다 'Cannot perform this method on a closed dataset' 또는 'tblName not in edit or insert mode'과 같은 오류가 멈추는 것 같습니다. 나는이 모든 것을 겉으로보기에는 겉으로는 알기 쉽고 디버깅하기가 쉽지 않고 무엇이 잘못되었는지 알기가 쉽지 않습니다.

나는이 일을 어떻게 막을 수 있는지에 대한 지침을 찾고 있는데, 나는 그것이 내가하는 일이라는 것을 알고있다. 예를 들어, 순간에 나는 점점 오전 :

이 코드 내 어딘가에

'폐쇄 된 데이터 세트에서이 작업을 수행 할 수 없습니다'.

procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction); 
begin 
    if not tblSystem.Active then 
    tblSystem.Open; 

    if not tblSpecs.Active then 
    tblSpecs.Open; 

    tblSpecs.Edit; 
    tblSpecs.Post; 
    tblSpecs.Close; 

    // Post changes to the notes on exit 
    tblSystem.Edit; 
    tblsystem.Post; 
    tblSystem.Close; 
end; 

procedure TfrmMain.chkAutoUpdateClick(Sender: TObject); 
begin 
    tblSystem.Edit; 
    if chkAutoUpdate.Checked then 
    chkInstUpdates.Enabled := True 
    else 
    begin 
    chkInstUpdates.Enabled := False; 
    tblSystemAutoUpdate.AsBoolean := False; 
    end; 
end; 

내가 바로이/추진하는 테이블에서 데이터를 끌어 나쁜 코드라고 가정거야, 어떤 도움을 주시면 감사하겠습니다. 또한 모든 디버깅 도움이 놀랄 것입니다. 내가 생각한다면

+1

이전 질문보기 저는 designtime 데이터베이스 컨트롤을 포기하고 실제 SQL 쿼리를 사용하기를 권합니다.이 방법을 사용하면 GUI에 묶이지 않고 다시 이런 유형의 문제를 볼 수 있습니다 ... – whosrdaddy

답변

3

, 나는이 선하다고 말할 것입니다 : 당신은 그것의 데이터 세트가 실제로 개방하지 않고 데이터 집합 필드의 값을 편집하려는

tblSystemAutoUpdate.AsBoolean := False;

.

WRT 디버깅 도움말에서 예외 메시지가 나타나면 중단 또는 계속을 묻습니다. 중단을 선택합니다. 스택 트레이스 뷰 (표준 레이아웃의 왼쪽 상단 창)는 현재 스레드의 함수 호출 스택을 보여줄 것이고, 그 스레드가 바로 당신을 이끌 수있을 것입니다. 또한 "Debug DCUs 사용"프로젝트 옵션을 사용하여 코드의 개발자 빌드를 빌드해야합니다. 그러면 디버거에서 RTL 및 VCL 단위로 추적 할 수 있습니다.