2012-04-27 3 views
1

Windows Server 2008 R2에서 Delphi-XE2 Enterprise, SQLServer 2008 R2를 사용하고 있습니다. SQL 오류가 발생하면 DataSnap 서버가이를 캡처하여 클라이언트 응용 프로그램에 반환합니다. 256 문자로 잘린 오류 메시지를 제외하고이 모든 작동합니다.DBX가 SQL 문자를 256 자로 자릅니다.

오류가 발생했을 때 DataSnap 서버의 스택 트랙은 [file:Data.DBXDynalink]TDBXMethodTable.RaiseError() 메서드를 사용하여 DBX 프레임 워크를 통해 SQL DB 오류를 검색하면 SQL 오류 메시지가 잘리는 것을 보여줍니다. RaiseError() 메서드의 다음 코드 줄은 오류 메시지가 더 길 때도 ​​MessageLength을 256으로 설정합니다. 따라서 클라이언트에 반환 된 오류 메시지는 256자를 초과 할 수 없습니다.

TDBXCommon_GetErrorMessageLength = function(Handle: TDBXCommonHandle; LastErrorCode: TDBXErrorCode; out ErrorLen: TInt32): TDBXErrorCode; stdcall; 

가 전송 될베이스 오류 더 허용하는 버퍼 크기를 증가시키는 방법이된다로서

Status := FDBXBase_GetErrorMessageLength(DBXHandle, DBXResult, MessageLength); 

FDBXBase_GetErrorMessageLength 정의되는 유형 TDBXCommon_GetErrorMessageLength,이며 클라이언트 (예 : 512 자) 또는 DBX 프레임 워크의 제한 사항일까요?

+0

당신은 해키 얻고 구성 요소 소스를 편집하지만이를 추천하지 않을 수 있습니다. 제한을 시도하고 받아 들여야합니다. SQL 참조를 포함하지 않는 한 많은 오류가 256 개를 초과하지 않으며 프로그램에있는 위치를 확실히 알고 있습니다. 미안해 네가 바라던 대답이 아니고 행운을 빌어. – Reallyethical

+0

이미 컴포넌트 소스를 살펴 봤습니다. 그것은 오류의 MessageLength 얻을 외부 호출 것, 그래서 DBXDrivers.ini 파일 (또는 이와 유사한) 속성을 않는 한 내가 할 수있는 일은 많이 있다고 생각하지 않습니다 ... 나는 SQL 오류를 래핑하는 오전 더 사용자에게 친숙한 오류. 함께 256 문자를 초과합니다. 그렇기 때문에 한계를 512와 같은 것으로 확장하고 싶습니다. –

+1

질문 [ "조정 오류 : 잘린 오류 메시지에 문제가있는 사람이 있습니까?"(http://stackoverflow.com)와 중복되는 질문을 생각했을 것입니다./questions/8701752). 그러나 귀하의 분석은 해당 질문/답변 작성자의 [분석] (http://stackoverflow.com/a/8716605/243614)과 매우 다릅니다. 그래서 나는 잘 모르겠다 .. –

답변

1

@Sertac은 Carlos가 오류 메시지를 자르는 드라이버와 매우 유사한 문제를 발견했습니다. Carlos는 오류를 증가시키기 위해 midas.dll을 변경하면 버퍼가 문제를 해결한다는 것을 알았습니다. 나는 그 문제에 대한 해결책이 똑같을 것이라고 확신한다.

감사 @Sertac 카를로스 '질문에 대한 링크를 제공 :

Reconcile Error: Has anyone had problems with truncated error messages?