Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何在客户端临时存储记录集结果以减少数据库调用_Vba_Excel - Fatal编程技术网

Vba 如何在客户端临时存储记录集结果以减少数据库调用

Vba 如何在客户端临时存储记录集结果以减少数据库调用,vba,excel,Vba,Excel,我最近正在进行Excel VBA开发,我发现从数据库检索的记录集在Connection.Close之后将不可用。因此,每当我需要一些主数据时,我都需要调用DB来再次获取它。这可能会对性能产生非常坏的影响。我想知道是否有某种解决方案可以在工作簿关闭之前将记录集临时存储在客户机中,这样我就可以在不需要更多数据库调用的情况下使用它们了。顺便说一句,我以前是一名C#程序员,我使用ADO.NET处理与数据库的交互。ADO和ADO.NET之间最大的区别之一是数据集可以支持离线查询,但我认为记录集需要连接才能

我最近正在进行Excel VBA开发,我发现从数据库检索的记录集在Connection.Close之后将不可用。因此,每当我需要一些主数据时,我都需要调用DB来再次获取它。这可能会对性能产生非常坏的影响。我想知道是否有某种解决方案可以在工作簿关闭之前将记录集临时存储在客户机中,这样我就可以在不需要更多数据库调用的情况下使用它们了。顺便说一句,我以前是一名C#程序员,我使用ADO.NET处理与数据库的交互。ADO和ADO.NET之间最大的区别之一是数据集可以支持离线查询,但我认为记录集需要连接才能使用

1) 我可以获得记录集支持离线查询吗?(即使连接已关闭,数据仍然可以访问。)
2) 工作簿关闭前临时存储数据库查询结果的解决方案。

3) C#中有一些集合类型,如字典、列表、哈希表,VBA是否具有类似的数据结构?

记录集可以断开连接(稍后重新连接),并保存在内存中或以xml或二进制格式保存到文件中。请参阅记录集的各种方法和属性

将记录集保存在文件或流对象中

参数

目的地

可选。一种变量,表示要保存记录集的文件的完整路径名,或对流对象的引用

PersistFormat

可选。一个PersistFormatEnum值,指定保存记录集的格式(XML或ADTG)。默认值为adPersistADTG

和来自帮助的信息

ADO中最强大的功能之一是能够从数据源打开客户端记录集,然后断开记录集与数据源的连接。断开记录集后,可以关闭与数据源的连接,从而释放服务器上用于维护该记录集的资源。您可以在断开连接时继续查看和编辑记录集中的数据,然后重新连接到数据源并以批处理模式发送更新

要断开记录集的连接,请使用adUseClient的光标位置打开它,然后将ActiveConnection属性设置为Nothing。(C++用户应将ActiveConnection设置为NULL以断开连接。)

在本节后面讨论记录集持久性时,我们将使用断开连接的记录集来解决这样一种情况:当客户端计算机未连接到网络时,我们需要将记录集中的数据提供给应用程序


对象变量中已经有了它。当你的程序运行时,它不会去任何地方。断开连接需要一行代码。如果您希望在以后的程序运行中保存一行代码,则需要将其保存到磁盘,但不必保存。然后用一条线重新连接它

看起来真的很复杂。有没有没有没有没有外部文件的简单解决方案?例如用于存储数据库结果的公共变量。OP正在逐点提问。同样,逐点回答他的问题也会有帮助。我做了,我写了一行代码保存在我的另一个答案中(他的第2点)。我从“帮助”中复制了说明要做什么的部分-将连接设置为空(他的观点1)。尝试阅读整个页面。
recordset.Save Destination, PersistFormat