2012-05-18 3 views
1

세미나 시험을위한 스케줄러 응용 프로그램을 작성하려고하는데 교사에게 특정 주, 특정 요일 및 특정 시간에 수업이있는 경우 데이터베이스를 교시하고 있습니다. DBExpress를 사용하여 Delphi Xe2에서 Sql 오류 코드를 처리 할 수있는 방법이 있습니까? SQL Server2008에서 내 interogation (사용자가 매개 변수를 선택하도록 함)을 수행하는 쿼리가 있습니다. 여기에 문제가 있습니다. 사용자가 하나의 매개 변수 필드를 공백으로두면 응용 프로그램에서 이미지에 메시지를 표시합니다. 물론이 오류 메시지를 보여주는 사용자 친화적 인 방법이 아니다, 그래서 내가 어떤 succes에없는 예외를 처리하려고 : E에처리 DbExpress Sql 오류 코드 245

with DataModule1.QueryV1 do 
Try 
    Close; 
    SQL.Clear; // clear command sql if there is 
    SQL.Add ('SELECT * FROM OrarC WHERE IDZi =' + 
    QuotedStr(LlbZiua.KeyValue)+ 'and IDInterval=' + QuotedStr(LlbIntOrar.KeyValue) + 
    'and IDSala='+ QuotedStr(EdtIDSala.Text)+ EdtSaptamana.Text); 
    Open; 
    except 
    on E:TDBXError do begin 
     showmessage('Error!'); 
    end; 
    End; 

:이 내가 SQL 서버 쿼리 쓴 내 코드입니다 TDBXError 나는 또한이 시도한 E : EDataBaseError와 결과는 동일합니다. 반환 된 SqlErrorCode에 의해 오류를 처리하는 것이 좋을 것입니다. 그러나 그것을 얻는 방법을 모르겠습니다. enter image description here

+0

리터럴 문자열보다 쿼리에 매개 변수를 사용하는 것이 좋습니다. 어쩌면 문자열 중 하나가 예상 한 값과 다른 값을 가질 수 있습니다. 위 메시지의 오류 텍스트는 무엇입니까? 그림이 너무 작아서 텍스트를 읽을 수 없습니다. –

답변

2

는 디버거에서 프로그램을 실행하고 올렸다 예외의 실제 클래스를 관찰하거나 같은과 런타임에 예외 클래스를 얻을 수 있습니다 : 그것은 실제로 다음 TDBXError 경우

.. 
except on E: Exception do 
    ShowMessage(E.ClassName); 
end; 

당신은 예를

uses 
    dbxcommon; 

except 
    on E: TDBxError do begin 
    if (E.ErrorCode = TDBXErrorCodes.InvalidArgument) then 
     .. 

사용하지만, 지금까지의 내가 245를 볼 수 TDBXErrorCodes 중 하나가 아닌, 그래서 아마도 당신은 다른 예외를 가지고 있었다. EDatabaseError이면 수업에 오류 코드 필드가 없기 때문에 할 일이별로 없습니다.

dbypepress 예외를 중앙 위치에서 관리 할 수있는 것은 아니지만 Data.DBXCommon.TDBXConnection.OnErrorEvent을 참조하십시오.

+0

- 감사합니다. 잘 작동합니다! –