Access 2013子窗体用查询不加载,改用表才可显示的问题求助
Access 2010 ADP升级到2013 ACCDB后主子窗体关联问题解决
一、子窗体查询记录源不显示的解决办法
- 检查查询语法兼容性:ADP和ACCDB对SQL Server链接表的查询解析逻辑有差异,把查询中ADP特有的旧连接语法(比如
*=)替换成ANSI标准的LEFT JOIN。 - 手动刷新子窗体记录集:主窗体生成主键后,不要依赖自动关联,强制重新绑定子窗体记录源。示例代码:
' 主窗体保存记录(生成主键后)执行以下代码 Forms!FrmRequest!SfrmReqeust.RecordSource = "" Forms!FrmRequest!SfrmReqeust.RecordSource = "你的查询名称" Forms!FrmRequest!SfrmReqeust.Requery
二、组合框无数据及主副表关联修复
- 重置组合框行来源:确认组合框的行来源引用的是ACCDB中的SQL Server链接表,而非ADP时期的直接数据库对象,可重新选择链接表或编写兼容ACCDB的查询。
- 匹配关联字段数据类型:ACCDB对SQL Server链接表的类型映射更严格,比如SQL Server的
int要对应Access的Long Integer,类型不匹配会导致关联失效。 - 手动同步主窗体主键到子窗体:主窗体新记录保存后,把生成的主键赋值给子窗体的筛选条件,示例:
' 主窗体保存新记录后执行 Dim mainID As Long mainID = Forms!FrmRequest!你的主键字段.Value ' 强制子窗体关联新生成的主键 Forms!FrmRequest!SfrmReqeust.Form.Filter = "关联字段 = " & mainID Forms!FrmRequest!SfrmReqeust.Form.FilterOn = True
三、编程重新链接SQL Server表
如果是链接表失效引发的问题,可用VBA批量刷新链接:
Sub RefreshSQLServerLinks() Dim tdf As TableDef Dim strConnect As String ' 替换为你的SQL Server实际连接信息 strConnect = "ODBC;DRIVER=SQL Server Native Client 11.0;" & _ "SERVER=你的服务器名;" & _ "DATABASE=你的数据库名;" & _ "UID=你的用户名;" & _ "PWD=你的密码;" For Each tdf In CurrentDb.TableDefs ' 仅处理ODBC链接表 If Left(tdf.Connect, 4) = "ODBC" Then tdf.Connect = strConnect tdf.RefreshLink End If Next tdf MsgBox "链接刷新完成", vbInformation End Sub
额外注意事项
- 升级后重新建立表关系:在ACCDB的关系窗口中删除原ADP时期的关系,基于链接表重新创建一对多关系,并勾选“实施参照完整性”。
- 调整子窗体显示时机:不要在
Forms!FrmRequest.NewRecord = True时直接显示子窗体,需等主窗体记录保存并生成主键后,再触发子窗体加载或刷新,否则子窗体无法获取有效关联键。
内容的提问来源于stack exchange,提问作者Ladydraper
相关产品推荐
相关产品推荐

