先散200分,如果能解决,给主要解决人再加200
18 个解决方案
#1
是不是因为你打开记录集比较大,所以要的时间比较长?你设置一下
Dim Con As New ADODB.Connection
Con.CommandTimeout = 1000
试一下
Dim Con As New ADODB.Connection
Con.CommandTimeout = 1000
试一下
#2
有没有用到事务?
#3
这应该是sql server连接超时导致的吧
查一下有什么其他事务导致服务器挂起
查一下有什么其他事务导致服务器挂起
#4
sp_configure 'remote query timeout', 1000
把远程操作等待时间改为1000秒
把远程操作等待时间改为1000秒
#5
将CommandTimeout设大一点,我记得我以前程序里有一句SQL语句执行大约需要2分钟呢。
#6
将SQL语句放在企业管理器中执行一下,企业管理器会帮你将SQL语句格式化一下,再贴到程序中试试。
#7
这跟记录集大小没有关系,和你的SQL SERVER 设置有关系,
最好把你的SQL 语句和你的有关表贴出来看看吧
最好把你的SQL 语句和你的有关表贴出来看看吧
#8
把你的代码帖出来,大家帮你看看
那样的情况,应该是由于连接超时造成的,把CommandTimeout设大一些
那样的情况,应该是由于连接超时造成的,把CommandTimeout设大一些
#9
Con.CommandTimeout = 1000
==========
这个已经设了,但完全不起作用,仍然超时
没有用到事务
我的语句是在循环体中,第一次执行时对表T1做操作,能成功
第二次挂靠循环体时对T2操作,T1、T2中记录数大体相当,但此时就会出现80040E31错
把VB生成的语句放到查询分析器里执行,总是能成功,仅花费20多秒。
==========
这个已经设了,但完全不起作用,仍然超时
没有用到事务
我的语句是在循环体中,第一次执行时对表T1做操作,能成功
第二次挂靠循环体时对T2操作,T1、T2中记录数大体相当,但此时就会出现80040E31错
把VB生成的语句放到查询分析器里执行,总是能成功,仅花费20多秒。
#10
那就把Con.CommandTimeout = 1000 改为
Con.CommandTimeout = 0
试一下
Con.CommandTimeout = 0
试一下
#11
说了半天,你代码还没贴出来?
我甚至怀疑你在第二次循环时,切换Command的时,没有为其指定Connection。
看看代码或者是你单步调试检查。。。
我甚至怀疑你在第二次循环时,切换Command的时,没有为其指定Connection。
看看代码或者是你单步调试检查。。。
#12
等待CODE ing.........
#13
建议单步调试
#14
将CommandTimeout设大一点
#15
哈哈,将CommandTimeout设成一年也没有用的!
原因可能是,第一个SQL语句还没有执行完成,紧接着又去执行第二个SQL语句
发生这样的原因还是你的SQL语句没有不是很合理.
原因可能是,第一个SQL语句还没有执行完成,紧接着又去执行第二个SQL语句
发生这样的原因还是你的SQL语句没有不是很合理.
#16
我分析:
楼上说的是一个原因
另外,可以检测一下
参考ADO官方代码
State 属性范例
该范例使用 State 属性,在异步连接正在打开和异步命令正在执行时显示消息。
Public Sub StateX()
Dim cnn1 As ADODB.Connection
Dim cnn2 As ADODB.Connection
Dim cmdChange As ADODB.Command
Dim cmdRestore As ADODB.Command
Dim strCnn As String
' 打开两个异步连接,在连接时显示消息。
Set cnn1 = New ADODB.Connection
Set cnn2 = New ADODB.Connection
strCnn = "Provider=sqloledb;" & _
"Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; "
cnn1.Open strCnn, , , adAsyncConnect
While (cnn1.State = adStateConnecting)
Debug.Print "Opening first connection...."
Wend
cnn2.Open strCnn, , , adAsyncConnect
While (cnn2.State = adStateConnecting)
Debug.Print "Opening second connection...."
Wend
' 创建两个命令对象。
Set cmdChange = New ADODB.Command
cmdChange.ActiveConnection = cnn1
cmdChange.CommandText = "UPDATE titles SET type = 'self_help' " & _
"WHERE type = 'psychology'"
Set cmdRestore = New ADODB.Command
cmdRestore.ActiveConnection = cnn2
cmdRestore.CommandText = "UPDATE titles SET type = 'psychology' " & _
"WHERE type = 'self_help'"
' 执行命令,在正在执行时显示消息。
cmdChange.Execute , , adAsyncExecute
While (cmdChange.State = adStateExecuting)
Debug.Print "Change command executing...."
Wend
cmdRestore.Execute , , adAsyncExecute
While (cmdRestore.State = adStateExecuting)
Debug.Print "Restore command executing...."
Wend
cnn1.Close
cnn2.Close
End Sub
#17
关键是这个部分:
' 执行命令,在正在执行时显示消息。
cmdChange.Execute , , adAsyncExecute
While (cmdChange.State = adStateExecuting)
Debug.Print "Change command executing...."
Wend
特别是数据比较多的时候,检测是否执行完毕
' 执行命令,在正在执行时显示消息。
cmdChange.Execute , , adAsyncExecute
While (cmdChange.State = adStateExecuting)
Debug.Print "Change command executing...."
Wend
特别是数据比较多的时候,检测是否执行完毕
#18
另外:
你在sql执行的时候
是使用什么方式?
还有,既然在客户端里面执行通过,可以在conncetion或者command中间进行运行全部sql代码?
你在sql执行的时候
是使用什么方式?
还有,既然在客户端里面执行通过,可以在conncetion或者command中间进行运行全部sql代码?
#1
是不是因为你打开记录集比较大,所以要的时间比较长?你设置一下
Dim Con As New ADODB.Connection
Con.CommandTimeout = 1000
试一下
Dim Con As New ADODB.Connection
Con.CommandTimeout = 1000
试一下
#2
有没有用到事务?
#3
这应该是sql server连接超时导致的吧
查一下有什么其他事务导致服务器挂起
查一下有什么其他事务导致服务器挂起
#4
sp_configure 'remote query timeout', 1000
把远程操作等待时间改为1000秒
把远程操作等待时间改为1000秒
#5
将CommandTimeout设大一点,我记得我以前程序里有一句SQL语句执行大约需要2分钟呢。
#6
将SQL语句放在企业管理器中执行一下,企业管理器会帮你将SQL语句格式化一下,再贴到程序中试试。
#7
这跟记录集大小没有关系,和你的SQL SERVER 设置有关系,
最好把你的SQL 语句和你的有关表贴出来看看吧
最好把你的SQL 语句和你的有关表贴出来看看吧
#8
把你的代码帖出来,大家帮你看看
那样的情况,应该是由于连接超时造成的,把CommandTimeout设大一些
那样的情况,应该是由于连接超时造成的,把CommandTimeout设大一些
#9
Con.CommandTimeout = 1000
==========
这个已经设了,但完全不起作用,仍然超时
没有用到事务
我的语句是在循环体中,第一次执行时对表T1做操作,能成功
第二次挂靠循环体时对T2操作,T1、T2中记录数大体相当,但此时就会出现80040E31错
把VB生成的语句放到查询分析器里执行,总是能成功,仅花费20多秒。
==========
这个已经设了,但完全不起作用,仍然超时
没有用到事务
我的语句是在循环体中,第一次执行时对表T1做操作,能成功
第二次挂靠循环体时对T2操作,T1、T2中记录数大体相当,但此时就会出现80040E31错
把VB生成的语句放到查询分析器里执行,总是能成功,仅花费20多秒。
#10
那就把Con.CommandTimeout = 1000 改为
Con.CommandTimeout = 0
试一下
Con.CommandTimeout = 0
试一下
#11
说了半天,你代码还没贴出来?
我甚至怀疑你在第二次循环时,切换Command的时,没有为其指定Connection。
看看代码或者是你单步调试检查。。。
我甚至怀疑你在第二次循环时,切换Command的时,没有为其指定Connection。
看看代码或者是你单步调试检查。。。
#12
等待CODE ing.........
#13
建议单步调试
#14
将CommandTimeout设大一点
#15
哈哈,将CommandTimeout设成一年也没有用的!
原因可能是,第一个SQL语句还没有执行完成,紧接着又去执行第二个SQL语句
发生这样的原因还是你的SQL语句没有不是很合理.
原因可能是,第一个SQL语句还没有执行完成,紧接着又去执行第二个SQL语句
发生这样的原因还是你的SQL语句没有不是很合理.
#16
我分析:
楼上说的是一个原因
另外,可以检测一下
参考ADO官方代码
State 属性范例
该范例使用 State 属性,在异步连接正在打开和异步命令正在执行时显示消息。
Public Sub StateX()
Dim cnn1 As ADODB.Connection
Dim cnn2 As ADODB.Connection
Dim cmdChange As ADODB.Command
Dim cmdRestore As ADODB.Command
Dim strCnn As String
' 打开两个异步连接,在连接时显示消息。
Set cnn1 = New ADODB.Connection
Set cnn2 = New ADODB.Connection
strCnn = "Provider=sqloledb;" & _
"Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; "
cnn1.Open strCnn, , , adAsyncConnect
While (cnn1.State = adStateConnecting)
Debug.Print "Opening first connection...."
Wend
cnn2.Open strCnn, , , adAsyncConnect
While (cnn2.State = adStateConnecting)
Debug.Print "Opening second connection...."
Wend
' 创建两个命令对象。
Set cmdChange = New ADODB.Command
cmdChange.ActiveConnection = cnn1
cmdChange.CommandText = "UPDATE titles SET type = 'self_help' " & _
"WHERE type = 'psychology'"
Set cmdRestore = New ADODB.Command
cmdRestore.ActiveConnection = cnn2
cmdRestore.CommandText = "UPDATE titles SET type = 'psychology' " & _
"WHERE type = 'self_help'"
' 执行命令,在正在执行时显示消息。
cmdChange.Execute , , adAsyncExecute
While (cmdChange.State = adStateExecuting)
Debug.Print "Change command executing...."
Wend
cmdRestore.Execute , , adAsyncExecute
While (cmdRestore.State = adStateExecuting)
Debug.Print "Restore command executing...."
Wend
cnn1.Close
cnn2.Close
End Sub
#17
关键是这个部分:
' 执行命令,在正在执行时显示消息。
cmdChange.Execute , , adAsyncExecute
While (cmdChange.State = adStateExecuting)
Debug.Print "Change command executing...."
Wend
特别是数据比较多的时候,检测是否执行完毕
' 执行命令,在正在执行时显示消息。
cmdChange.Execute , , adAsyncExecute
While (cmdChange.State = adStateExecuting)
Debug.Print "Change command executing...."
Wend
特别是数据比较多的时候,检测是否执行完毕
#18
另外:
你在sql执行的时候
是使用什么方式?
还有,既然在客户端里面执行通过,可以在conncetion或者command中间进行运行全部sql代码?
你在sql执行的时候
是使用什么方式?
还有,既然在客户端里面执行通过,可以在conncetion或者command中间进行运行全部sql代码?