从FireDAC调试器通知中获取异常文本

问题描述 投票:-3回答:1

[enter image description here我正在尝试捕获调试器通知文本,Firedac连接

//FDScript1.SQLScripts.Add.SQL.LoadFromFile('C:\SGI\Rodar_Apos_Atualizar_3.txt');
//FDScript1.ValidateAll;
//FDScript1.ExecuteAll;
//MSScript1.SQL.LoadFromFile('C:\SGI\Rodar_Apos_Atualizar_3.txt');
//MSScript1.Execute;
try
  FDConnection1.Connected := True;
  FDScript1.SQLScripts.Add.SQL.LoadFromFile('C:\SGI\Rodar_Apos_Atualizar_3.txt');
  FDScript1.ExecuteAll;
  FDScript1.ValidateAll;
except
//EMSSQLNativeException
  on E: EMSSQLNativeException do
  begin
    //ShowMessage('Erro'+FDGUIxErrorDialog1.ErrorDialog.Caption);

    //Memo1.Clear;
    Memo1.Text := 'Erro de Sistema: '+#13#10+ E.Message;
  end;
end;

imageenter image description here

delphi delphi-xe2 firedac
1个回答
0
投票

如果您向我们展示您要执行的脚本,那真的很有帮助,或至少是无法正确执行的脚本。无论如何,您的代码是错误的因为documentation

优良做法是在ExecuteAll方法之前调用ValidateAll方法。

注意“之前”。您的ValidateAllExecuteAll之后,而不是之前。两者都是布尔值函数,但您不检查它们的结果,应该这样做。

通过一些微不足道的实验,我发现我可以引发EMSSQLNativeException使用下面的代码使用SqlServer 2014:

procedure TForm2.Button1Click(Sender: TObject);
const
  sScript = 'select m.*, d.* from master m join detail d on, m.masterid = d.masterid';
var
  FDScript : TFDSqlScript;
begin

  try
    FDConnection1.Connected := True;
    FDScript := FDScript1.SQLScripts.Add;
    FDScript.SQL.Text := sScript;
    //FDScript1.ExecuteAll;
    //FDScript1.ValidateAll;
    // FDScript1.ValidateAll then
      //FDScript1.ExecuteAll;

    FDQuery1.SQL.Text := sScript;
    FDQuery1.Open();
  except
  //EMSSQLNativeException
    on E: EMSSQLNativeException do
    begin
      //ShowMessage('Erro'+FDGUIxErrorDialog1.ErrorDialog.Caption);

      //Memo1.Clear;
      Memo1.Text := 'Erro de Sistema: '+#13#10+ E.Message;
    end;
  end;
end;

请注意Sql语句中公然错误的语法,即on后的逗号。

当调用FDQuery1.Open时,会引发此异常(并在最初由调试器捕获)

---------------------------
Debugger Exception Notification
---------------------------
Project sqlerror.exe raised exception class EMSSQLNativeException with message '[FireDAC][Phys][ODBC][Microsoft][SQL Server Native Client 11.0][SQL Server]Incorrect syntax near 'd'.'.
---------------------------
Break   Continue   Help
---------------------------

当我单击继续时,执行将继续执行到您的异常处理程序中,就像@TomBrunberg在评论中所述并将异常的消息文本插入Memo1。

因此,我无法根据问题中的信息来重现您描述的行为。它一定是由于您没有告诉我们的事情造成的,可能是因为您拥有的代码不包含在您的q或组件的某些属性设置中使用。

希望,尝试上面的代码,您将发现调试器的行为与我已经描述过了,这可能会为您提供一些线索,说明您为什么会您描述的问题。请注意尝试代码非常重要在一个新项目中,而不是您现有的项目中]]。唯一的属性设置您需要执行的操作是设置FDConnection1,以便它可以连接到您的服务器。

FWIW,如果我取消注释,则>]

    FDScript1.ValidateAll then
      FDScript1.ExecuteAll;

他们无怨无悔地执行,我得到的行为与我在没有他们描述的情况下完全一样。

© www.soinside.com 2019 - 2024. All rights reserved.