2012-04-27 3 views
1

Я использую Delphi-XE2 Enterprise, SQLServer 2008 R2 для Windows Server 2008 R2. Когда возникает ошибка SQL, сервер DataSnap захватывает его и возвращает его в клиентское приложение. Все это работает, за исключением сообщения об ошибке, которое усечено до 256 символов.DBX Усекает ошибку SQL до 256 символов

Трассировка стека сервера DataSnap при поднятии ошибки показывает, что сообщение об ошибке SQL усекается, когда SQL DB Error извлекается через DBX Framework с использованием метода [file:Data.DBXDynalink]TDBXMethodTable.RaiseError(). Следующая строка кода из метода 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

Вы можете получить Hacky и редактировать исходный компонент, но я бы не рекомендовал это. Вы должны попытаться принять ограничение. Не так много ошибок превысит 256, если они не включают в себя ссылку sql и, конечно же, вы знаете, где вы находитесь в вашей программе. Извините, это не тот ответ, на который вы надеялись, и удача. – Reallyethical

+0

Я уже посмотрел на источник компонента. Кажется, это внешний вызов для получения MessageLength ошибки, поэтому я не думаю, что я могу многое сделать, если в файле DBXDrivers.ini (или тому подобное) нет свойства ... Я обертываю ошибку SQL с помощью более удобная для пользователя ошибка. Вместе они превышают 256 символов. Вот почему я хочу расширить предел до 512. –

+1

Я бы подумал, что ваш вопрос является дубликатом вопроса [«Ошибка повторения: есть ли у кого-нибудь проблемы с усеченными сообщениями об ошибках?»] (Http://stackoverflow.com/вопросы/8701752). Но ваш анализ сильно отличается [анализом] (http://stackoverflow.com/a/8716605/243614) автора этого вопроса/ответа. Поэтому я не уверен. –

ответ

1

@ Sertac нашел очень похожую проблему, с которой Карлос был с драйвером, усекающим сообщения об ошибках. Карлос обнаружил, что изменение midas.dll для увеличения буферизации ошибок устраняет его проблему. Я уверен, что решение для моего вопроса тоже самое.

Благодаря @Sertac для обеспечения связи на вопрос Карлоса:

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

Смежные вопросы