2012-04-27 49 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個字符。

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

FDBXBase_GetErrorMessageLength是類型TDBXCommon_GetErrorMessageLength,其被定義爲:

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

是否有增加緩衝區的大小,以允許更多的數據庫錯誤的一種方法,被髮送到客戶端(例如512個字符),還是僅僅是DBX框架的限制?

+0

你可以得到哈克和編輯組件源代碼,但我不會推薦。你應該嘗試並接受限制。沒有太多的錯誤會超過256,除非它們包含一個sql引用,當然你知道你在程序中的位置。對不起,它不是你希望的答案,祝你好運。 – Reallyethical 2012-04-28 07:05:26

+0

我已經看過組件源。它似乎是一個外部調用來獲取錯誤的MessageLength,所以我不認爲有很多我可以做,除非DBXDrivers.ini文件(或類似的)中有一個屬性...我用一個包裝SQL錯誤更容易使用的錯誤。他們一起超過了256個字符。這就是爲什麼我想擴大限制到像512. – 2012-04-28 07:12:29

+1

我會想你的問題是一個問題的副本[「協調錯誤:有人有截斷錯誤信息的問題?」](http://stackoverflow.com /問題/ 8701752)。但是,您的分析與該問題/答案作者的[分析](http://stackoverflow.com/a/8716605/243614)有很大不同。所以我不確定.. – 2012-04-29 01:09:30

回答