Обработка кода ошибки DbExpress Sql 245

Я пытаюсь создать приложение-планировщик для своего семестрового экзамена и опрашиваю базу данных, есть ли у учителя занятия на определенной неделе, в определенный день и в определенный час. Есть ли способ обрабатывать коды ошибок Sql в Delphi Xe2 с помощью DBExpress? У меня есть запрос, выполняющий мой опрос (я позволяю пользователям выбирать параметры) на SQL Server2008, и вот в чем проблема; Если пользователь оставляет одно поле параметра пустым, мое приложение показывает сообщение на изображении; ну, это не удобный способ отображения сообщений об ошибках, поэтому я попытался обработать исключение без каких-либо успехов: это мой код, который я написал для запроса SQL Server:

with DataModule1.QueryV1 do
 Try
    Close;
    SQL.Clear; // clear command sql if there is
    SQL.Add ('SELECT * FROM OrarC WHERE IDZi =' +
    QuotedStr(LlbZiua.KeyValue)+ 'and IDInterval=' + QuotedStr(LlbIntOrar.KeyValue) +
     'and IDSala='+ QuotedStr(EdtIDSala.Text)+ EdtSaptamana.Text);
    Open;
  except
    on E:TDBXError do begin
      showmessage('Error!');
    end;
  End;

на E:TDBXError я также пробовал E:EDataBaseError, и результат тот же; Было бы хорошо обработать ошибку с помощью возвращаемого SqlErrorCode, но я не знаю, как это сделать. введите здесь описание изображения


person Cristian Vasuica    schedule 18.05.2012    source источник
comment
В запросе лучше использовать параметры, чем буквенные строки. Возможно, одна из ваших строк содержит значение, отличное от ожидаемого. Какой текст ошибки в сообщении выше? Картинка слишком маленькая, чтобы прочитать текст.   -  person No'am Newman    schedule 18.05.2012


Ответы (1)


Запустите свою программу под отладчиком и наблюдайте за фактическим классом возникшего исключения, или вы можете получить класс исключения во время выполнения с помощью чего-то вроде:

  ..
except on E: Exception do
  ShowMessage(E.ClassName);
end;

Если это действительно TDBXError, вы можете использовать, например,

uses
  dbxcommon;

except
  on E: TDBxError do begin
    if (E.ErrorCode = TDBXErrorCodes.InvalidArgument) then
      ..

Но, насколько я вижу, 245 не является одним из TDBXErrorCodes, так что, возможно, у вас есть другое исключение. Если это EDatabaseError, делать особо нечего, так как в классе нет поля кода ошибки.

Не совсем актуально, но также см. Data.DBXCommon.TDBXConnection.OnErrorEvent для централизованного управления исключениями dbexpress.

person Sertac Akyuz    schedule 18.05.2012