如何删除连接定义?
顺便说一句,这种循环没有什么意义,因为删除方法需要的是名称,而不是索引,因此直接调用它基本上具有相同的效果:
FDManager.DeleteConnectionDef(lConnName);
这样做可以避免上述引用计数增加。但是继续阅读。
如何防止连接定义名称重复?
但要从根本上解决你的问题。连接定义名称必须真正唯一,这是管理器应该注意的。不幸的是,由于您发现的错误,没有。在修复之前,您只需在添加之前询问是否存在此类名称的连接定义:
if not FDManager.IsConnectionDef('FBPooled') then
FDManager.AddConnectionDef('FBPooled', 'FB', Params)
else
raise EMyException.Create('Duplicate connection definition name!');
这样的代码可以作为您报告的问题的解决方法。我试着描述一下出了什么问题。
防止连接定义名称重复有什么错?
RSP-19107
问题嗯,这是一个很好的隐藏。只有当应用程序中包含物理驱动程序模块时,我才能再现该问题
. 预期异常:
[FireDAC][Stan][Def]-255。定义名称[FBPooled]重复
当应用程序中不包括物理驱动器模块时,正确提升。如果包含驱动程序模块,则不会引发异常,并将具有重复名称的连接定义添加到内部集合。
FDManager.AddConnectionDef('DefName', 'FB', Params);
Params.Values['Database'] := 'C:\MyDatabase.db';
FDManager.AddConnectionDef('DefName', 'FB', Params);
定义名称的重复检查在
TFD定义。ParamsChanged公司
添加连接Def
方法稍后添加到下面的定义参数中
键,然后引擎等待调用所述
方法
中的定义设置
添加连接Def
Definition.Params.BeginUpdate; { â triggers TFDDefinition.ParamsChanging }
try
Definition.Params.SetStrings(Params); { â assigns the passed parameters }
Definition.Name := 'DefName'; { â adds (or sets) the Name key value in Params }
Definition.Params.DriverID := 'FB'; { â creates driver specific parameter instance }
finally
Definition.Params.EndUpdate; { â triggers TFDDefinition.ParamsChanged }
end;
. 它触发驱动程序特定参数实例的创建(例如。
TFDPHYSFB连接参数
参数
Definition.Params.BeginUpdate; { â Definition.Params.FUpdateCount += 1 }
try
Definition.Params.Free;
Definition.Params := TDriverSpecificConnectionDefParams.Create;
finally
Definition.Params.EndUpdate; { â Definition.Params.FUpdateCount == 0 }
end;
参数
FUpdateCount
OnChange公司
调用时的事件
并且要应用
TFD定义。ParamsChanged公司
方法不会由此触发
最后
在伪代码中解决此问题的可能方法是:
var
UpdateCount: Integer;
begin
Definition.Params.BeginUpdate; { â Definition.Params.FUpdateCount == n }
try
UpdateCount := Definition.Params.UpdateCount; { â store the update count }
Definition.Params.Free;
Definition.Params := TDriverSpecificConnectionDefParams.Create;
Definition.UpdateCount := UpdateCount; { â set the update count for the new instance }
finally
Definition.Params.EndUpdate; { â Definition.Params.FUpdateCount == n }
end;
end;
[1]
实际上,如果有任何
驱动程序文件在您的使用列表中;通过放置一个
TFDPhys<DBMS>驱动链接
表单上的组件。