当前位置: 首页 > 面试题库 >

MS Access互操作-数据导入

那博瀚
2023-03-14
问题内容

我正在开发一个将SQL导出到Access的exe,我们不想使用DTS,因为我们有多个客户端,每个客户端都导出不同的视图,并且设置和维护DTS包的开销太大。

*编辑:此过程每天晚上对许多客户都是自动化的,因此必须在存储过程中的游标中启动和控制整个过程。这是因为必须针对每个项目对数据进行过滤才能导出。

我尝试了多种方法将数据从SQL提取到Access中,最有前途的是使用Access互操作并运行

doCmd.TransferDatabase(Access.AcDataTransferType.acImport...

我遇到了一个问题,该问题是我从视图中导入,并手动运行导入,看来该视图还没有足够快地开始返回数据,因此访问会弹出一个MessageBox对话框,表明它已超时。我认为这也在互操作性中发生,但是因为它是隐藏的,所以该方法永远不会返回!

我有什么办法可以防止此消息弹出或增加import命令的超时?

我当前的攻击计划是将视图展平到一个表中,然后从该表中导入,然后删除展平的表。

对于如何解决此问题的任何建议感到高兴。

编辑:

有关我在做什么的更多信息:

我们有多个客户端,每个客户端都有一个标准的数据模型。“模块”之一是访问导出器(sproc)。它从参数表中读取要导出的视图,然后导出。视图按项目过滤,并为每个项目创建一个访问文件(每个视图都有项目字段)

我们正在运行SQL 2005,但并没有很快迁移到SQL 2005,我们可能会在短短几个月内跳到2008年。

然后,我们有一个模块执行作业,该作业在每个数据库上执行已配置的模块。在此模块执行中运行许多导入/导出/其他作业,并且访问导出器必须能够适合此框架。因此,我需要一个通用的SQL->
Access导出器,可以通过我们的参数框架进行配置

当前sproc调用我编写的exe,我的exe通过互操作打开访问权限,我知道这对服务器不利,但是模块执行被编写,因此一次仅执行一个模块,因此该过程将永远不会运行一次超过一个实例。


问题答案:

我已经确定了执行此操作的方法。

http://support.microsoft.com/kb/317114描述了启动访问过程的基本步骤。

我已将Process设置为类变量,而不是ShellGetApp方法的局部变量。这样,当我调用Quit函数进行访问时,如果由于某种原因而没有关闭,则可以显式终止该进程。

app.Quit(Access.AcQuitOption.acQuitSaveAll);
if (!accessProcess.HasExited)
{
    Console.WriteLine("Access did not exit after being asked nicely, killing process manually");
    accessProcess.Kill();
}

然后,我在这里使用了方法超时功能来给访问调用超时。如果超时,我也可以终止访问过程(超时可能是由于弹出的对话框窗口引起的,并且我不希望该过程永远挂起。我在这里得到了超时方法。



 类似资料:
  • JavaScript 互操作 调用宿主语言代码最直接的办法就是通过 interop. JavaScript 的全局变量可以通过 js 命名空间访问. 对象的方法调用可以写成: (.log js/console "demo") ; console.log('demo') 访问对象的属性需要添加连字符: (.-name obj) ; obj.name 对象的实例化可以用 cljs 写, 注意结尾有点号

  • HyperLogLog主要解决大数据应用中的非精确计数(可能多也可能少,但是会在一个合理的范围)操作,它可以接受多个元素作为输入,并给出输入元素的基数估算值,基数指的是集合中不同元素的数量。比如 {‘apple’, ‘banana’, ‘cherry’, ‘banana’, ‘apple’} 的基数就是 3 。 HyperLogLog 的优点是,即使输入元素的数量或者体积非常非常大,计算基数所需的

  • redis 的key操作是涉及范围最广的操作 。

  • 熟悉每个数据操作前一定要明白每个操作都是代价,以时间复杂度和对应查询集或者结果集大小为衡量。时间复杂度收敛状况如下:

  • 在深度学习中,我们通常会频繁地对数据进行操作。作为动手学深度学习的基础,本节将介绍如何对内存中的数据进行操作。 在MXNet中,NDArray是一个类,也是存储和变换数据的主要工具。为了简洁,本书常将NDArray实例直接称作NDArray。如果你之前用过NumPy,你会发现NDArray和NumPy的多维数组非常类似。然而,NDArray提供GPU计算和自动求梯度等更多功能,这些使NDArray

  • San 在组件的 data 上提供了一些数据操作的方法。通过 get 方法可以获取数据;通过 set、splice 等方法修改数据,相应的视图会被自动刷新。 说明:为什么是通过 San 提供的方法操作数据,而不是直接操作数据?因为defineProperty并未被国内常用的浏览器广泛支持,并且我们也并不喜欢这种侵入式的风格,所以我们选择了折中的方式。因此,只有通过 San 提供的方法修改数据,视图