我们有一个ms-access数据库用作框架。
因此,我们使用一个称为“更新框架”的函数,在该函数中,我们使用此代码将一些模块从框架转移到目标数据库中
db_fw.DoCmd.DeleteObject xxx_obj_t, rec_ref!REFR_NAME
...
db_fw.DoCmd.TransferDatabase acImport, "Microsoft Access", dCopiedFrameworkFile, xxx_obj_t, rec_ref!REFR_NAME, rec_ref!REFR_NAME
大约99%的时间都可以正常工作。
但是自一段时间以来,我发现有时-很少-不用更换模块,ms-access会创建一个名称相同但末尾带有数字的模块。
例如模块“ ICanAfterStart”不再可见。而是可以看到模块“ ICanAfterStart1”。所有代码都像以前一样工作。因此,“ IcanAfterStart的实现”仍然可以编译并且可以正常工作。
当我再次更新框架时,将创建一个名为“ ICanAfterStart2”(依此类推)的模块。
直到现在,这仅在接口模块中发生,我们总是在开头用“ I”命名。
我已经尝试过:
反编译数据库
压缩和修复数据库
Application.SaveAsText;删除所有可见的“ ICanAfterStart *”模块,然后尝试使用Application.LoadFromText重新导入该模块。但是Application.LoadFromText导致“运行时错误2950:保留错误”
我创建了一个名为“ ICanAfterStart”的新模块,在其中将代码作为文本复制到了其中。但是在下一个框架更新之后,“ ICanAfterStart”不再可见,并且“ ICanAfterStart1”在那里。
作为目前的“解决方案”,我尝试备份文件,直到找到一个没有此错误的文件为止。由于这是很多工作,因此我必须重新创建之前编写的所有代码,这是一个糟糕的解决方案。
那么,有谁知道问题出在哪里,并且为我找到了更实际的解决方案?
答案 0 :(得分:0)
好。现在似乎可行(有时?)。这就是我要做的:
用以下方法导出原始对象:
Application.SaveAsText acModule,“ ICanAfterStart”,“ ICanAfterStart.txt”
使用“ del”删除所有可见的“ ICanAfterStart *”模块
通过
删除新创建的模块DoCmd.DeleteObject acModule,“ ICanAfterStart”
通过
导入了原始模块Application.LoadFromText acModule,“ ICanAfterStart”,“ ICanAfterStart.txt”
从源数据库(框架)中删除并重新导入原始的“ ICanAfterStart”也可能有所帮助