【问题标题】:Excel VBA Code Writing Multiple SQL RecordsExcel VBA 代码编写多条 SQL 记录
【发布时间】:2015-03-12 19:34:10
【问题描述】:

下面的代码就是为了做到这一点:

(1) 运行 refreshDataConnections 宏以在接下来的 6 秒内运行(6 秒为 timerStart 变量)

(2) 调用 flag1On,创建 SQL 连接。目标是在表中插入一条记录。

(3) 最后一次调用返回到 refreshDataConnections 宏,以将计时器从 Now() 重置为 6 秒,并使整个宏保持 6 秒重复。

遇到的问题是,运行 flag1On 时,它将记录完美地插入到 SQL 表中,但 6 秒后又插入了另一条记录。我对此进行了实验,发现无论 timerStart 变量是什么,第二条记录总是在初始记录之后的几秒内写入。

(示例 SQL 数据当前结果)

一或零 |用户 |运行Dt

1          User      3-12-15 12:00:20PM
1          User      3-12-15 12:00:14PM
1          User      3-12-15 12:00:13PM
1          User      3-12-15 12:00:07PM
1          User      3-12-15 12:00:06PM
1          User      3-12-15 12:00:00PM

以下代码中是否有任何内容会导致每次运行整个代码时都编写两次 SQL 代码,一次是按时编写,一次是在 timerStart 变量设置为什么时编写?

我的目标是获得以下数据

一或零 |用户 |运行Dt

1          User      3-12-15 12:00:30PM
1          User      3-12-15 12:00:24PM
1          User      3-12-15 12:00:18PM
1          User      3-12-15 12:00:12PM
1          User      3-12-15 12:00:06PM
1          User      3-12-15 12:00:00PM

下面是代码。

Option Explicit
Public RunWhen As Double
Public Const timerStart = 6 ' five seconds
Public Const subTarget = "refreshMirror"  ' the name of the procedure to run
Public flag As Boolean

Public Sub refreshDataConnections()
    On Error Resume Next
RunWhen = Now + TimeSerial(0, 0, timerStart)
    Application.OnTime EarliestTime:=RunWhen, Procedure:=subTarget, _
        Schedule:=True
End Sub

Public Sub refreshMirror()
    On Error Resume Next
    Call flag1On
    Call refreshDataConnections
End Sub

Sub flag1On()
Dim item As String, thisConn As New ADODB.Connection

thisConn.Open ("Provider=SQLOLEDB.1;Password=(password); _ 
    Persist Security Info=True;User ID=(UserID); _
        Initial Catalog=srd;Data Source=(Table); _
            Use Procedure for Prepare=1;Auto Translate=True; _
                Packet Size=4096;Workstation ID=(WorkstationID); _ 
                  Use Encryption for Data=False;Tag with column collation when possible=False")

item = "Insert into [(Table)].[dbo].[Table1] _ 
    (OneOrZero, networkID,rundt) Values(1,(User),'" & _ 
        Format(Now, "yyyy-mm-dd HH:MM:SS") & ".000')"
    thisConn.Execute (item)
    thisConn.Close
End Sub

【问题讨论】:

  • flagDecision1 代码在哪里?你如何开始refreshDataConnections
  • 很抱歉;我把物品贴错了标签。我自己手动启动 refreshDataConnections 子程序,并在计时器调用它时从那里自动运行。我修复了 flagDecision1 代码;这一切都被引用回 flag1On 子。

标签: sql excel vba connection


【解决方案1】:

好的;因此,由于在数据连接属性上保持“后台数据刷新”按钮处于活动状态,整个方法被我自己破坏了。一旦关闭,问题就解决了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-25
    • 2014-06-04
    • 1970-01-01
    相关资源
    最近更新 更多