2012-05-18 2 views
1

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

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, но я не знаю, как это получить. enter image description here

+0

Лучше использовать параметры для запроса, чем буквальные строки. Возможно, одна из ваших строк имеет значение, отличное от ожидаемого. Каков текст ошибки в приведенном выше сообщении? Изображение слишком мало для меня, чтобы прочитать текст. –

ответ

2

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

.. 
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 в центральном месте.

+0

- Благодарю вас; Он отлично работает! –