2012-04-27 10 views
1

私は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フレームワークの単なる制限ですか?

+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は、エラーを増加させるためにmidas.dllを変更することでバッファが問題を解決することを発見しました。私は解決策が私の問題と同じであると確信しています。カルロス質問へのリンクを提供するための

おかげ@Sertac:

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

関連する問題