【发布时间】: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