【问题标题】:Using Firedac to run SQL stored procedure使用 Firedac 运行 SQL 存储过程
【发布时间】:2015-03-12 07:56:52
【问题描述】:

我正在尝试弄清楚如何使用 fireac 运行存储过程

unit DataLayer.OilCommanderConnection;

interface

uses
  FireDAC.Phys.FB,
  Generics.Collections,
  Model.Sample,
  Model.Batch,

  FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Error,
  FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def, FireDAC.Stan.Pool,
  FireDAC.Stan.Async, FireDAC.Phys, FireDAC.Phys.MySQL, Data.DB,
  FireDAC.Comp.Client, FireDAC.Phys.MSSQL,
  FireDAC.DApt,
  FireDAC.Comp.UI
  ;

type
  TOilCommanderConnection = class
    strict private
    public
      Connection : TFDConnection;

      function GetSampleTypesForBatch(Batch : TBatch) : Boolean;  

      function Connect:Boolean;
      constructor Create;
      destructor Destroy; override;
  end;

implementation

uses
  SysUtils
  ;

function TOilCommanderConnection.Connect:Boolean;
var
    OK : Boolean;
begin
    OK := true;
    Connection := TFDConnection.Create(nil);
    try
        Connection.Params.LoadFromFile('MSSQL.ini');
    finally
        Result := OK;
    end;
end;

function TOilCommanderConnection.GetSampleTypesForBatch(Batch : TBatch) : Boolean;
var
    StoredProc : TFDStoredProc;
begin
    Connect;

    StoredProc := TFDStoredProc.Create(nil);
    try
        StoredProc.Connection := Connection;
        StoredProc.StoredProcName := 'GetSampleTypesForBatch';
        StoredProc.Prepare;

        StoredProc.FetchOptions.Items := StoredProc.FetchOptions.Items - [fiMeta];
        with StoredProc.Params do
        begin
            Clear;
            with Add do
            begin
                Name := 'BatchNo';
                ParamType := ptInput;
                DataType := ftString;
                Size := 6;
            end;            
        end;

        StoredProc.StoredProcName := 'GetSampleTypesForBatch';
        StoredProc.Prepare;
        StoredProc.Params[0].Value := Batch.RackNo;
        StoredProc.ExecProc;

        while not StoredProc.Eof do
        begin
            //StoredProc.FieldByName('').AsS
            StoredProc.Next;
        end;

    finally
        FreeAndNil(StoredProc);
    end;

    Result := true;
end;

constructor TOilCommanderConnection.Create;
begin
    inherited;
    Connection := TFDConnection.Create(nil);
end;

destructor TOilCommanderConnection.Destroy;
begin
    if Assigned(Connection) then FreeAndNil(Connection);

    inherited;
end;


end.

我在第一次出现该行时收到一条错误消息

StoredProc.Prepare;

这是消息

--------------- 调试器异常通知

Project RefractiveIndexTests.exe 引发异常类异常,并带有消息“类的对象工厂” 缺少 {3E9B315B-F456-4175-A864-B2573C4A2201}。要注册它,你 可以将组件 [TFDGUIxWaitCursor] 拖放到您的项目中。

我已经使用

调用了该函数
OilCommanderConnection.GetSampleTypesForBatch(batch);

来自一个测试项目。

我读到的tutorial 没有解释如何处理这种情况。

按照错误消息的提示,我已尝试将 TFDGUIxWaitCursor 添加到我的项目中,但这并没有任何区别。我想知道这个问题是否与我将数据库连接逻辑与我的主窗体保持在一个单独的单元中有关。我希望能够将我的用户界面与我的数据层分开。

【问题讨论】:

  • 问题是,firedac github.com/search?utf8=%E2%9C%93&q=Firedac的代码示例并不多
  • 我注意到您的连接方法将始终返回“ok”。是否只是连接不起作用?
  • @HughJones 是的,“好的”业务是我需要解决的问题:),当我在调试器中检查对象时,连接似乎已正确初始化。

标签: sql sql-server delphi pascal firedac


【解决方案1】:

根据您的应用程序类型,将以下单元之一包含在任何一个“使用”子句中:

  • FireDAC.VCLUI.Wait - 用于 VCL 应用程序;
  • FireDAC.FMXUI.Wait - 用于 FireMonkey 应用程序;
  • FireDAC.ConsoleUI.Wait - 用于控制台/非可视应用程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 2020-02-24
    • 2016-04-28
    • 2011-04-28
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多