问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

VB执行SQL语句的问题1

发布网友 发布时间:2023-10-07 20:39

我来回答

3个回答

热心网友 时间:2023-11-20 13:09

VB中“对象关闭时,不允许操作”解决方案

最近两天在VB里弄一些小程序,好久没接触了,感觉有些陌生了,还算有点基础吧,遇到一些小的难题基本上都能解决。不过,这下真的遇到难题了,琢磨半天硬是没弄出结果来,在网上查资料也没个底,如同大海捞针呀,关键是没一点正经的答案和可行的方案。

问题是这样的,在VB中执行存储过程,想输出返回值并将数据绑定到DataGrid控件中,本来是件小菜的问题,在.NET、ASP里都做通过,但在VB里却是折磨了半天也没弄出来。还是自己动手吧,有问题就得想办法,一步步来吧。

先在SQL 2000中写好存储过程了,(这里不再写出存储过程的具体代码了,也就是一个返回值,一个记录集)然后在VB中引用ADO对象,输入如下代码,以调用存储过程:
Dim lackconn As New ADODB.Connection
lackconn.ConnectionString=Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Password=boyd;Initial Catalog=mydb;Data Source=(local)
lackconn.CursorLocation = adUseClient '设置为客户端
lackconn.Open

Set lackcmd = New ADODB.Command
lackcmd.ActiveConnection = lackconn
lackcmd.CommandText = myproc '这里为存储过程名称
lackcmd.CommandType = adCmdStoredProc '指定为存储过程
Set param = lackcmd.CreateParameter(@num, adInteger, adParamReturnValue, 4) '@num为返回值
lackcmd.Parameters.Append param
Set lackrs = New ADODB.Recordset
Set lackrs = lackcmd.Execute()
msgbox 站点总数: & lackcmd.Parameters(@num).Value & 个

Set mydatagrid.DataSource = lackrs 'mydatagrid为对象名称
mydatagrid.Refresh '刷新DataGrid
'下面关闭数据库对象等略去

就这样的一个简单的代码,一运行就出错,提示错误在“Set mydatagrid.DataSource = lackrs”,错误就是“对象关闭时,不允许操作”。郁闷ing...,这哪来的错误呢?我根本没关闭数据库连接,其他内容也是没有问题的呀。花了很长时间没能解决,大清早再打开电脑时,灵机一动,搞定了。这里将这种现象作下总结,顺便记录一下本次解决过程。

产生这种现象有几种原因:
1、数据库对象连接被关闭了,这肯定会报错的,当然也不能输出任何结果的,这时只需注意“先使用、后关闭”就行了,解决这样的问题就是暂时先不要关闭数据库连接就行了。

2、返回记录为空时,也会报错。如下面的代码
sql = select * from dbcn where 状态='0'
Set rs = conn.Execute(sql)
If Not rs.EOF Then
For m = 1 To rs.RecordCount
List_status.AddItem rs(1) & ( & rs(2) & ): & rs(4)
rs.MoveNext
Next m
End If
如果没有数据的话,这里也会提示这样的错误,将查询代码放到SQL查询分析器里运行一下,果然没有数据,呵呵。当然这样的错误可以采用一些方法排除或过滤的。

3、这就是我这次所遇到的问题的中心了,我们将目光转向存储过程。的确,在SQL查询分析器里,存储过程是正常运行,而且不会报错,也有数据。但仔细想想,因为在存储过程可能包含了有关SQL语句影响行数的信息,这样一来也就可能会导致这样的情况。
打开存储过程,在begin后面加上一句代码:set nocount on,屏蔽掉这些信息。OK,VB中的程序巳经能够正常运行了,而且数据也是正常的。

顺便解释一下吧,打开查询分析器中的帮助,查找一下有关set nocount on的信息,我们会找到这些东西:
====================================
SET NOCOUNT
使返回的结果中不包含有关受 Transact-SQL 语句影响的行数的信息。
语法
SET NOCOUNT { ON | OFF }
注释
当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。当 SET NOCOUNT 为 OFF 时,返回计数。
即使当 SET NOCOUNT 为 ON 时,也更新 @@ROWCOUNT 函数。
当 SET NOCOUNT 为 ON 时,将不给客户端发送存储过程中的每个语句的 DONE_IN_PROC 信息。当使用 Microsoft® SQL Server™ 提供的实用工具执行查询时,在 Transact-SQL 语句(如 SELECT、INSERT、UPDATE 和 DELETE)结束时将不会在查询结果中显示nn rows affected。
如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。
SET NOCOUNT 设置是在执行或运行时设置,而不是在分析时设置。
权限
SET NOCOUNT 权限默认授予所有用户。
示例
下例在 osql 实用工具或 SQL Server 查询分析器中执行时,可防止显示有关受影响的行数的信息。
USE pubs
GO
-- Display the count message.
SELECT au_lname
FROM authors
GO
USE pubs
GO
-- SET NOCOUNT to ON and no longer display the count message.
SET NOCOUNT ON
GO
SELECT au_lname
FROM authors
GO
-- Reset SET NOCOUNT to OFF.
SET NOCOUNT OFF
GO

这里点到为止吧,具体的解释我想MS的帮助会比我说的更专业更清楚些,参考下吧。

热心网友 时间:2023-11-20 13:09

这样肯定不行啦,Delphi终究不能这样子写,要是你想修改数据库表,在里面加属性列的话还是在数据库分析器里面先写好吧。

你像数据库操作语言可以写,但是数据库定义语言就不能写了。

热心网友 时间:2023-11-20 13:10

服务器可以识别TOP
1
应该是缺少驱动……正常的话会出现:找不到可安装的ISAM
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
现在五粮液000858可以买进么? 2021年五粮液(000858)总资产、总负债、营业收入、营业成本及净利润统... 手机耗电太快了怎么解决 教你方法,轻松解决 Tag模块数组indexOf,splice的使用方法 JavaScript indexOf简介 对于一个JS对象数组怎么使用IndexOf方法得到索引呢? Array.indexOf() 学习 狼来了是什么效应 当两种刺激都出现,认知者会产生首因效应还是近因效应呢? 大过年的…… 有妖气漫画投稿,用什么软件绘画,怎么样才能做成条漫的形式?3 联想台式机,配置如图,想升级一下。主要是想换显卡,但主板还有电源_百度... vb怎么执行sql语句 谢谢您对我的帮助 作文400字左右410 帮我找一篇我的梦想的作文450字左右400字也可以28 王玉芳这个名字值多少分4 青岛安顺达保险代理有限公司怎么样? 蚂蚁腰对于女性来说是什么意思?4 霸气的个性签名13423 灶王爷吸烟吗 贷款买房后,贷款合同已经下来,会拿到哪些东西?262 怎样从彩超单上看出男孩还是女孩835 南京地区孩子得了自闭症可以得到那些救助 b超图怎么看胎儿性别,b超看胎儿性别图解 手机QQ空间怎么不见那个访客了,怎么这个天气的换成访客的24 有人知道锅炉管道(内有导热油循环)怎么清理,里面都是积碳沉淀6 高压锅炉内部的结构是怎样的? 地漏疏通工具有哪些 微信登录qq音乐后怎么换新登录呀? pb中string的最大长度是多少 女儿上初中连着两次考了全班第一名,我想发条鼓励孩子的说说怎么...10 小学生如何培养创新意识 在小学课堂教学中怎样培养学生创新意识 什么样的人最容易消耗你? 福克斯2.0SVP限量版和2.0手动运动版有什么区别?10 被永久封了怎么注销账号 小米4摔了一下。右上角屏幕碎了。触屏失灵,请问是内屏坏了还是...425 行政事业单位加班餐费报账时计入新中大财务软件什么会计科目 小米4手机为什么屏坏了就不好用了 怎样测试乙酸乙酯纯度 干煎塌米鱼的做法,干煎塌米鱼怎么做好吃,干煎1 幼儿园科学实验材料哪家做的比较好?5 gta5为什么简体中文不能玩线上,繁体就可以啊? 电脑主机配置清单145 昨天梦到自己院子里的鸡,下了好多蛋,我去捡鸡蛋,结果好多鸡蛋...1 电脑配置清单92 杭州市有哪几个区?17 女儿上初中的第一天说说11 改错了未满一年怎么改回来 我用粘米粉跟玉米淀粉做河粉蒸好会断会粘底怎么办?