【发布时间】: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