Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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
Sql server MS SQL for Excel中的查询超时_Sql Server_Excel_Vba_Connection Timeout - Fatal编程技术网

Sql server MS SQL for Excel中的查询超时

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

我在Excel中有一个宏连接到MS SQL,检查一些计数并在Excel工作表中写入。它工作正常,但现在不工作了。我有如下错误代码:

运行时错误-2147217871查询超时已过期

我的超时值是
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中还有其他解决方案吗?这十个查询中的一个会出现错误。哪一个?