2009-09-21 4 views
4

저는 Delphi 2007 with ADO를 사용하여 SQL Server 2008 데이터베이스에 액세스하고 있습니다.Delphi를 사용하여 ADO 오류 검색

데이터베이스의 저장 프로 시저가 입력을 사전 유효화하고 유효성 검사에 실패하면 오류 결과 세트 (사용자 정의 오류 정보 포함)를 반환합니다. 저장 프로 시저를 실행할 때 SQL Server Management Studio를 사용하면 하나의 탭에 사용자 지정 오류 결과 집합이 표시되고 다른 탭에 기본 오류 메시지가 표시됩니다.

위로 돌아 가기 저장 프로 시저를 열면 내 Delphi 앱에서 사용자 지정 오류 결과 집합에 액세스 할 수 있습니다. 그러나 ADO 연결의 Errors 개체에는 기본 오류가 없습니다.

Errors 컬렉션 개체에 액세스하려면 어떻게해야합니까? 오류의 원인에 대한 자세한 정보를 제공 할 수 있습니까?

감사합니다.

답변

4

옵션 1) ADO 연결 오류 컬렉션을 사용합니다.

try 
.... 
.... 
.... 
ADOQuery1.Open;//Execute your sql statement 
except 
    LastErrorIndex :=ADOConnection1.Errors.Count-1; 
    SourceError  :=ADOConnection1.Errors.Item[LastErrorIndex].Source; 
    NumberError  :=ADOConnection1.Errors.Item[LastErrorIndex].Number; 
    DescriptionError:=ADOConnection1.Errors.Item[LastErrorIndex].Description; 
    SQLStateError :=ADOConnection1.Errors.Item[LastErrorIndex].SQLState; 
    NativeError  :=ADOConnection1.Errors.Item[LastErrorIndex].NativeError; 
end; 

옵션 2) 당신은 SQL 서버에서 마지막 오류를 얻기 위해 @@ 오류 변수를 사용할 수 있습니다.

select @@error 

SQL Server에서 오류가 발생하면 @@ ERROR 전역 변수를 사용하여 오류 번호를 얻을 수 있습니다. 오류 설명을 얻으려면 @@ ERROR_MESSAGE 글로 z 변수가 없습니다.

SELECT Description FROM master..sysmessages WHERE error= @@ERROR AND msglangid=1033 

그러나 이러한 메시지의 대부분은 (% s의 %의 LD와 같은) 위치에 홀더를 가지고, 당신은이를 사용할 수 있습니다 완전한 오류 메시지에 대한 , 당신은 오류 번호를 사용하여 master..sysmessages 테이블을 조회 할 수 있습니다 Stored Procedure.

자세한 내용은이 문서 Error Handling in SQL Server – a Background을 읽을 수 있습니다.

안녕히 계십시오.

+1

'.sql.clear' 및'.sql.add' 대신'.sql.text : = ' –

+0

감사의 말을 할 수 있습니다. RRUZ. 문제는 ADO를 사용하면 결과 집합 및/또는 반환 값을 검색하거나 처리되지 않은 오류가 네이티브 ADO 오류로 반환 된 서버에서 발생한다는 것입니다. dba에 다시 한 번 살펴보고 오류를 어떻게 반환할지 결정하겠습니다. –

+0

좋은 지적 메이슨! –