不知道是不是我数据量略大的问题一直报错(其实也就7000行不到)

shi5945 2014-04-16 04:47:51
Sub 按钮2_Click()

Dim Conn As New ADODB.Connection '定义ADODB连接对象
Dim ConnStr As String '定义连接字符串

'对于SQL 2008,如果以IP方式访问服务器,必须要启动SQL Server Browser服务,如果是Express版本,要以"IP(计算机名)\实例名"方式访问
ConnStr = "Provider=SQLOLEDB;Data Source = CEINET-EBE049E8\SQLEXPRESS;Initial Catalog = WatchSystem;Integrated Security=SSPI;"

Dim Records As New ADODB.Recordset '定义ADODB对象的记录集
Dim Sheet As Worksheet '定义工作表

Set Sheet = ThisWorkbook.Worksheets(1) '给变量Sheet赋值,注意:是工作簿中索引为1的那个表(通常一个新的工作簿Sheet1的索引为1)
Sheet.Cells.Clear '清空表中原有的数据


Dim SQLStr As String '要执行的SQL语句

SQLStr = "EXEC WatchSystem.dbo.test1"
Conn.Open ConnStr
Set Records = New ADODB.Recordset
Records.Open SQLStr, Conn, adOpenStatic, adLockOptimistic '读取SQL查询结果到Records记录集


Dim i, j, TotalRows, TotalColumns As Integer

j = 0
TotalRows = Records.RecordCount
TotalColumns = Records.Fields.Count

'下面的循环把表头(即列名)写到Excel表的第一行
For i = 0 To TotalColumns - 1
Next

'下面的循环把查询结果写到Excel表中
Do While Not Records.EOF

For i = 0 To TotalColumns - 1
Sheet.Cells(j + 2, i + 1) = Records.Fields(i).Value
Next

Records.MoveNext
j = j + 1

Loop

Records.Close '关闭记录集

Conn.Close '关闭连接

Set Records = Nothing '清空对象
Set Conn = Nothing '清空对象
End Sub
我把sql语句都写在存储过程里了,要是把存储过程里的语句换成简单的sql就没有问题,要是不换就报错
...全文
267 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
shi5945 2014-04-18
  • 打赏
  • 举报
回复
引用 3 楼 dsd999 的回复:
[quote=引用 2 楼 shi5945 的回复:] [quote=引用 1 楼 dsd999 的回复:] 我把sql语句都写在存储过程里了,要是把存储过程里的语句换成简单的sql就没有问题,要是不换就报错 这句没太看明白。
这么说吧,我有两个存储过程,一个是写了很多的搜索,各种运算的(我想用的),第二个就只有简单的一句sql,然后我在excel里执行,第一个就报我截图的那个错误,第二个没问题,我在想是不是因为我没优化,运算时间过长,超时了[/quote] 明白了。 我觉得原因和你的想的一样,试试减少搜索,看看正确和出错的过渡。 [/quote]我试了一下,不是超时好像,我在存储过程里有多个select语句,只有最后一个是有返回值的,其他都是写进临时表,第一个select的数据量比较大,如果我限制第一个的结果在30000以内,程序就能运行,如果我不限制第二个,而限制第二个就过不去
dsd999 2014-04-18
  • 打赏
  • 举报
回复
引用 2 楼 shi5945 的回复:
[quote=引用 1 楼 dsd999 的回复:] 我把sql语句都写在存储过程里了,要是把存储过程里的语句换成简单的sql就没有问题,要是不换就报错 这句没太看明白。
这么说吧,我有两个存储过程,一个是写了很多的搜索,各种运算的(我想用的),第二个就只有简单的一句sql,然后我在excel里执行,第一个就报我截图的那个错误,第二个没问题,我在想是不是因为我没优化,运算时间过长,超时了[/quote] 明白了。 我觉得原因和你的想的一样,试试减少搜索,看看正确和出错的过渡。
shi5945 2014-04-17
  • 打赏
  • 举报
回复
引用 1 楼 dsd999 的回复:
我把sql语句都写在存储过程里了,要是把存储过程里的语句换成简单的sql就没有问题,要是不换就报错 这句没太看明白。
这么说吧,我有两个存储过程,一个是写了很多的搜索,各种运算的(我想用的),第二个就只有简单的一句sql,然后我在excel里执行,第一个就报我截图的那个错误,第二个没问题,我在想是不是因为我没优化,运算时间过长,超时了
dsd999 2014-04-17
  • 打赏
  • 举报
回复
我把sql语句都写在存储过程里了,要是把存储过程里的语句换成简单的sql就没有问题,要是不换就报错 这句没太看明白。

5,139

社区成员

发帖
与我相关
我的任务
社区描述
其他开发语言 Office开发/ VBA
社区管理员
  • Office开发/ VBA社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧