Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.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
PostgreSQL&;访问--开始时连接与需要时连接_Sql_Postgresql_Ms Access - Fatal编程技术网

PostgreSQL&;访问--开始时连接与需要时连接

PostgreSQL&;访问--开始时连接与需要时连接,sql,postgresql,ms-access,Sql,Postgresql,Ms Access,我有一个带有Access 2016前端的PostgreSQL 9.5数据库,使用ODBC驱动程序将两者连接起来。如果我想查询数据,我将从以下命令开始: Dim conn As New ADODB.Connection conn.Open "Driver={PostgreSQL ANSI};Server=localhost;Database=[name];User Id=[UID];Password=[pass];" Dim cmd As New ADODB.Command cmd.Active

我有一个带有Access 2016前端的PostgreSQL 9.5数据库,使用ODBC驱动程序将两者连接起来。如果我想查询数据,我将从以下命令开始:

Dim conn As New ADODB.Connection
conn.Open "Driver={PostgreSQL ANSI};Server=localhost;Database=[name];User Id=[UID];Password=[pass];"

Dim cmd As New ADODB.Command
cmd.ActiveConnection = conn
我的问题是:有什么理由不在应用程序打开时建立连接,在需要运行查询时使用该连接,而不是每次运行查询时打开和关闭连接


我不确定在Access中建立这样的连接需要多少开销(如果有的话),我也找不到关于这个主题的任何信息。如果这是一个天真的问题,我道歉

I无论如何,连接都是由Access缓存的

触摸或打开任何链接表后,该连接现在处于活动状态,可供Access重新使用

通常,如果查询针对单个表,那么就没有理由不针对链接表进行编码

例如:

如果您使用传递查询,那么这很有效:

Sub Test555()

   Dim rst     As DAO.Recordset

   With CurrentDb.QueryDefs("qryPass")
      .SQL = "select * from tblInvoices where invoiceNum = 13355"
      Set rst = .OpenRecordset
   End With

End Sub
上面提到的原因是,这样您就不会弄乱代码中的连接字符串,也不必费心处理这些字符串


只需确保表重新链接代码也重新链接任何传递查询

连接到数据库时会有开销,但您连接到的是本地实例,因此开销可能非常小。或者,如果您的连接在一段时间内处于空闲状态,它可能会超时-这将取决于数据库配置。@Nicarus值得一提的是,此项目的最终版本将在本地网络上托管数据库,开销是否也会同样小?谢谢你的洞察力,虽然我不能告诉你,但你可以测试一下。我怀疑这取决于它尝试连接时您有多少并发网络流量。如果您对此感到担忧,可以在开始时建立连接,并且在需要执行查询/命令时,首先检查连接是否仍然处于活动状态。如果没有,请重新连接。您是在谈论链接表还是ADODB连接?后者在您需要时更容易建立,但如果您想缓存连接,可以使用预先声明的自愈对象。这大大简化了事情,感谢您简洁的回答!
Sub Test555()

   Dim rst     As DAO.Recordset

   With CurrentDb.QueryDefs("qryPass")
      .SQL = "select * from tblInvoices where invoiceNum = 13355"
      Set rst = .OpenRecordset
   End With

End Sub