来自BDE的Firedac迁移

时间:2015-04-16 06:40:12

标签: delphi datasnap tclientdataset firedac

我的名字是Stefano Fanti,我是Plexa的开发人员。我们实际上正在使用您的组件(FireDAC),我正在联系您以解决一些问题 我们无法解决的问题。
在我们公司,我们决定将用Delphi7编写的传统3层DATASNAP应用程序移植到新环境Delphi XE7中,我们也决定使用新的组件库FireDAC。 我们的应用程序是以这种方式构建的:客户端使用TClientDataSet直接连接到服务器端,使用TDataSetProvider / MIDAS和TTable TQuery TDatabase组件(BDE) 我们用相关的FireDAC(FDConnection,FDTable和FDQuery)替换了BDE组件而没有任何问题,我们开始测试思考无论如何不需要执行它。 经过一些测试后,出现了一些问题:第一个问题与在DB(MS SQL Server)上执行的修改有关,第二个问题与应用修改后重新打开表有关。 在我们的例子中,RequestLive = True属性(默认),不允许对数据库应用修改(Post / ApplyUpdates)。 分配RequestLive = False,我们可以对所有表的记录进行修改,除了第一个,最后一个给我们错误。
已在每个数据库表上验证了上述异常。但是,所有数据库表都正确定义了主键。 尝试使用FireDAC帮助我读取选项RequestLive = False从Fetch,Options中排除fiMeta,防止组件使用表的主键,否则在任何其他情况下都能正确看到。 经过几次试验后,我发现两个配置应用于服务器端,使我们能够实现结果。

首次配置

  1. FDTable.RequestLive = False
  2. FDTable.UpdateMode = upWhereKeyOnly
  3. 用FProvider.DataSet.FieldByName(pkField)做    ProviderFlags:= ProviderFlags + [pfInKey];
  4. 第二次配置

    1. FDTable.RequestLive = False
    2. FDTable.UpdateMode = upWhereAll
    3. TDataSetProvider.UpdateMode = upWhereAll
    4. 上述配置使我们可以对表进行修改而没有错误,但仍然不允许我们解决第二个问题:为每个操作重新打开表。实际上,每次都会执行BeforeOpen和AfterOpen管理器。 我可以做些什么来避免在每次修改后重新打开表格? 用于应用修改的配置是否正确,或者是否存在另一种解决方案,允许我们避免代码修改导致我们延长开发时间?

      提前感谢您的帮助。

      祝你好运 Stefano Fanti

0 个答案:

没有答案