如何将Access ADP应用程序迁移到ACCDB?

时间:2015-07-30 12:49:56

标签: ms-access

我的一个应用程序是在Access 2010 / SQL Server 2008上运行的Access ADP应用程序。由于Microsoft从Office 2013开始放弃了对ADP的支持,我的客户端现在推动迁移此应用程序的解决方案。

在此应用程序中,我们使用一些特殊技术来启用某些功能,这些功能包括:

  • 绑定到已断开连接的ADO记录集的表单
  • 通过ADO Recordsets
  • 绑定到SQL Server上的临时表的表单
  • 在Forms的RecordSource SELECT-Statements
  • 中使用了很多用户定义的函数
  • 在SELECT-Statements中大量使用Transact SQL功能

我们的计划是将此应用程序迁移到accdb-Format。我的第一个镜头是使用全局ADO Connection变量替换CurrentProject.Connection并在Form_Open事件中手动设置表单的Recordsets。

是否有人已经使用此方法迁移并可以分享他的经验/最佳实践,或者是否有其他任何我不知道的方法(链接表因为我们大量使用TSQL而无法正常工作)?

1 个答案:

答案 0 :(得分:0)

好,几件事。

使用绑定表到链接表。如果您有一个绑定到链接表的表单,说有100,000行,而您只想提取一条记录?

使用“ where”子句替换过去使用的参数。

例如:

Docmd.OpenForm "frmInvoice",,,"InvoiceNumber = 123"

如果是这样,当然可以在上述过程之前,向用户“询问”要使用的发票编号(您必须在这样做之前–对???)。

所以我们得到:

strInvoiceNum = “some kind of prompt etc for invoice number”

Docmd.OpenForm "frmInvoice",,,"InvoiceNumber = " & strInvoiceNum.

因此,我强烈建议您只使用绑定表单,通过创建一个记录集,然后将该记录集绑定到表单上,零需求和零收益(迁移完全不需要编码时间和开发人员资源)

  
    

•表单绑定到断开的ADO记录集

  

您真的必须确定是否要执行此操作。您可以使用视图,但是PT查询将是只读的。您当然可以像这样创建记录集:

Dim rs As New ADODB.Recordset

 rs.Open ("select * from contacts"), CurrentProject.Connection

请注意我们如何使用内置连接。之所以有效,是因为表“ contacts”是平面简链接表。

因此,您仍然可以创建断开连接的记录集,但是这往往会花费很多额外的工作,并且在大多数情况下,除了无缘无故地增加计费时间之外,您一无所获。

如果您有一个基于复杂sql查询的报告,则只需将sql Management Studio后台处理,然后将报告的t-sql剪切+粘贴到SSMS中,然后将sql保存为视图。

您现在链接到该视图。现在,只需将表单数据源设置为该链接视图。

并且必须删除该t-sql中的所有参数。现在,您使用了链接视图来代替对该报表的查询。实际上,如果为链接的视图提供与sql查询相同的名称,那么您的报告现在应该可以像以前一样工作了。

如果您需要报告的某些参数,则再次使用where子句,如下所示:

Docmd.OpenReport "rtpInvoice",acViewPreview,,"InvoiceNum = 123"

同样,性能会很好,只有满足条件的记录才是“条件”子句在网络管道中的位置。

如果由于某种原因您确实有一些基于参数的报表存储过程,则只需为该报表创建PT查询。您现在可以使用此:

   With CurrentDb.QueryDefs("qryRptInvoice")

      .SQL = "exec spProcName " & strInvoiceNum

   End With

   DoCmd.OpenReport "rptInvoice", acViewPreview

请注意,在所有这些示例中,我们都无需接触或处理代码中的连接字符串。

请记住: 传递查询始终是只读的。因此,您仅将PT查询用于报告,选择列表等(仅用于显示和报告)之类的东西。

如果表单基于带有参数的t-sql,则无法使用PT查询(只读结果)。因此,在这种情况下,请使用t-sql,将t-sql剪切+粘贴到SSMS中,然后将其保存为视图。如前所述,删除该t-sql中的所有@parms。

现在,使用链接视图,您可以将表单基于该链接视图。同样,没有创建记录集,没有混乱的连接字符串,什么都没有。

再次使用打开表单的“ where”子句进行过滤。

这里的数字1规则是使用绑定的表单/报告,并在需要时采用视图。如前所述,报告也被绑定,再次不需要创建记录集。

并且如前所述,对于报告,您可以使用s-proc,但始终按照上面的报告示例使用PT查询。

所以,不,链接表会导致性能问题,这是一个神话–正确使用链接表时,它们不正确,对于您的表单编辑数据,最好将它们直接绑定到链接表或视图。 / p>