私はWindows Server 2008 R2上でDelphi-XE2 Enterprise、SQLServer 2008 R2を使用しています。 SQLエラーが発生すると、DataSnapサーバーはそれを取得してクライアントアプリケーションに返します。これは256文字に切り捨てられたエラーメッセージを除いてすべて動作します。DBX SQLエラーを256文字に切り捨てます
エラーが発生したときのDataSnapサーバーのスタックトラックは、[file:Data.DBXDynalink]TDBXMethodTable.RaiseError()
メソッドを使用してSQL DBエラーがDBXフレームワークで取得されたときに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フレームワークの単なる制限ですか?
あなたはハックを取得し、コンポーネントのソースを編集けど、私はこれをお勧めしませんでした。あなたは試して制限を受け入れるべきです。 SQL参照を含む場合を除き、多くのエラーは256を超えず、プログラムのどこにいるのか確かに知ることができます。申し訳ありませんが、あなたが望んでいた答えと幸運。 – Reallyethical
私は既にコンポーネントソースを見てきました。それは、エラーのMessageLengthを取得する外部呼び出しのようですので、私はDBXDrivers.iniファイル(またはそのような)のプロパティがない限り、私はできることはたくさんあるとは思わない...私はSQLエラーをラップしているユーザーフレンドリーなエラーこれらは一緒に256文字を超えます。だからこそ私は512のようなものに限界を広げたいと思っている。 –
私はあなたの質問が質問の重複であると思っていただろう[「調整エラー:切り詰められたエラーメッセージに誰かが問題を抱えていたか」](http://stackoverflow.com/questions/8701752)。しかし、あなたの分析は、その質問/回答の著者の[分析](http://stackoverflow.com/a/8716605/243614)と大きく異なります。だから私はわからない.. –