Sql server MS SQL for Excel中的查询超时
我在Excel中有一个宏连接到MS SQL,检查一些计数并在Excel工作表中写入。它工作正常,但现在不工作了。我有如下错误代码: 运行时错误-2147217871查询超时已过期 我的超时值是Sql server MS SQL for Excel中的查询超时,sql-server,excel,vba,connection-timeout,Sql Server,Excel,Vba,Connection Timeout,我在Excel中有一个宏连接到MS SQL,检查一些计数并在Excel工作表中写入。它工作正常,但现在不工作了。我有如下错误代码: 运行时错误-2147217871查询超时已过期 我的超时值是960,但它显示了这个问题 我怎样才能解决这个问题 我正在与您共享代码: Sub GetDataFromADO() 'Declare variables' Set objMyConn = New ADODB.Connection Set objMyCmd = New ADODB.Co
960
,但它显示了这个问题
我怎样才能解决这个问题
我正在与您共享代码:
Sub GetDataFromADO()
'Declare variables'
Set objMyConn = New ADODB.Connection
Set objMyCmd = New ADODB.Command
Set objMyRecordset = New ADODB.Recordset
'Open Connection'
objMyConn.ConnectionString = "Provider=SQLOLEDB;Data Source=<server>;User ID=<id>;Password=<pass>;"
'For Timeout'
Application.ODBCTimeout = 960
objMyConn.Open
'Set and Excecute SQL Command'
Set objMyCmd.ActiveConnection = objMyConn
'Set Recordset'
Set objMyRecordset.ActiveConnection = objMyConn
currentDate = Worksheets("RUN").Range("A1").Value
'-----------------------------------------------------------------------------------
cnt = 0
currentSheet = "LegalInsCrawling" 'Seq
cell = Worksheets(currentSheet).Range("A1").Value
Do
cnt = cnt + 1
cell = Worksheets(currentSheet).Range("A1").Offset(cnt).Value
Loop Until cell = "" Or cell = CDate(currentDate)
Worksheets(currentSheet).Range("A1").Offset(cnt).Value = currentDate
objMyCmd.CommandText = "<mssql query>"
objMyCmd.Execute
'Open Recordset'
objMyRecordset.Open objMyCmd
Worksheets(currentSheet).Range("B1").Offset(cnt).CopyFromRecordset (objMyRecordset)
objMyRecordset.Close
'------
cnt = 0
currentSheet = "LegalInsCrawling" 'HomePageCrawlingCount
cell = Worksheets(currentSheet).Range("A1").Value
Do
cnt = cnt + 1
cell = Worksheets(currentSheet).Range("A1").Offset(cnt).Value
Loop Until cell = "" Or cell = CDate(currentDate)
Worksheets(currentSheet).Range("A1").Offset(cnt).Value = currentDate
objMyCmd.CommandText = "<mssql query>"
objMyCmd.Execute
'Open Recordset'
objMyRecordset.Open objMyCmd
Worksheets(currentSheet).Range("D1").Offset(cnt).CopyFromRecordset (objMyRecordset)
objMyRecordset.Close
Sub-GetDataFromADO()
“声明变量”
Set objMyConn=New ADODB.Connection
Set objMyCmd=New ADODB.Command
Set objMyRecordset=New ADODB.Recordset
“开放连接”
objMyConn.ConnectionString=“Provider=SQLOLEDB;数据源=;用户ID=;密码=;”
“用于超时”
Application.ODBCTimeout=960
objMyConn.打开
“设置并执行SQL命令”
设置objMyCmd.ActiveConnection=objMyConn
“设置记录集”
Set objMyRecordset.ActiveConnection=objMyConn
currentDate=工作表(“运行”).范围(“A1”).值
'-----------------------------------------------------------------------------------
cnt=0
currentSheet=“合法划船”序号
单元格=工作表(当前工作表).范围(“A1”).值
做
cnt=cnt+1
单元格=工作表(当前工作表).范围(“A1”).偏移量(cnt).值
循环直到cell=”“或cell=CDate(当前日期)
工作表(当前工作表)。范围(“A1”)。偏移量(cnt)。值=当前日期
objMyCmd.CommandText=“”
objMyCmd.Execute
“打开记录集”
打开objMyCmd
工作表(currentSheet).Range(“B1”).Offset(cnt).CopyFromRecordset(objMyRecordset)
objMyRecordset.Close
'------
cnt=0
currentSheet=“合法绘图”主页爬网计数
单元格=工作表(当前工作表).范围(“A1”).值
做
cnt=cnt+1
单元格=工作表(当前工作表).范围(“A1”).偏移量(cnt).值
循环直到cell=”“或cell=CDate(当前日期)
工作表(当前工作表)。范围(“A1”)。偏移量(cnt)。值=当前日期
objMyCmd.CommandText=“”
objMyCmd.Execute
“打开记录集”
打开objMyCmd
工作表(currentSheet).Range(“D1”).Offset(cnt).CopyFromRecordset(objMyRecordset)
objMyRecordset.Close
我想
运行时间太长了。我建议您尝试并优化它。一个好主意是将它粘贴到SQLServerManagementStudio中,按CTRL-L,然后查看它是否建议索引。16分钟后是否会出现错误?如果查询时间过长,则应发布查询,而不是VBA宏。在宏中执行的任何操作都不会使查询运行得更快。虽然您可以更改timout,但这不会加快查询速度。谢谢您的回答。实际上,我在一个excel中有10多个查询。宏工作时,将启动十个或更多查询。我在excel中还有其他解决方案吗?这十个查询中的一个会出现错误。哪一个?