我正在使用Delphi 7,BDE组件和SQL Server。
我有一个Customer表,列否,名称和年龄。我不应该更新名称所以在触发器中我添加了一个检查:如果客户名称已更改,我会引发错误。
如果我尝试从SQL Server中更新 Name ,我的触发器会抛出此错误:
Msg ******, Level 16, State 1, Procedure Showerror, Line 1456
Customer Name can not be changed. if you really want to change Please contact associate manager or whoever has authority. Please do not consider if you do not want to change.
Msg 3609, Level 16, State 1, Line 1
The transaction ended in the trigger. The batch has been aborted.
现在在Delphi中如果我尝试更新Customer表中的 Name ,我的错误处理代码如下。
问题:在XP下运行时,errorCount为3,在Windows 7下为4. ShowMessage()输出:
Windows XP:
1)常规SQL错误。
2)客户名称无法更改。如果你真的想改变请联系副经理或任何人 autho。< - autho 在这里显示第二行
3)交易在触发器中结束。批次已中止。
Windows 7:
1)常规SQL错误。
2)客户名称无法更改。如果你真的想改变请联系副经理或任何人。
3)authoè¸ö
4)交易在触发器中结束。批次已中止。
代码:
try
Post;
except on E:EDBEngineError do
begin
// below line is displaying different results.
ShowMessage('Total Errors: '+IntToStr(E.ErrorCount));
for i := 0 to E.ErrorCount - 1 do
with E.Errors[i] do
begin
if NativeError = 0 then
begin
end
else
begin
sDatabaseerror := sDatabaseerror + Message + #13#10;
end;
end;
if sDatabaseerror <> '' then
MessageDlg('Error is: ' + #13#10 + sDatabaseerror , mtError, [mbOK], 0);
end;
end;
因此,我无法区分如何向用户显示错误。