高手在哪里?| ADO的RecordCount的问题

kelee921 2003-12-20 10:32:21
小弟编程遇到一个莫名其妙的问题:执行一个Select语句,想得到所取得的记录的个数。该语句在数据库工具(TOAD)中执行的结果是取得了一条记录,但recordset对象返回的RecordCount的值为0,那位大虾能帮我分析分析?下面是小弟实现的代码

Dim strSQL As String
Dim rs As ADODB.Recordset

strSQL ="select field1 from table1 where condition=1"
Set rs = CreateObject("ADODB.Recordset")

rs.CursorLocation = adUseClient
rs.CursorType = adOpenDynamic
rs.LockType = adLockOptimistic
rs.Source = sTmp
rs.ActiveConnection = ""Provider=OraOLEDB.Oracle.1;Password=xxx;Persist Security Info=True;User ID=xxx;Data Source=xxx"
"
rs.Open

得到的rs.RecordCount等于0,请各位高手指点,感激不尽。
...全文
6 点赞 收藏 15
写回复
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
kelee921 2003-12-21
首先感谢各位大虾的热情指点,感激,
按照各位指点,小弟一一尝试,但不知哪儿有问题,情况仍然照旧:(
回复
flc 2003-12-21
关注
回复
handysoft 2003-12-21
将rs.Source=strSQL 改为
rs.open strSQL, conn, adOpenKeyset, adLockOptimistic
试试
回复
howtotell 2003-12-21
vc里边儿是这样:
strSQL.Format("select COUNT(*) from %s",Table);
pCommand->CommandText=(_bstr_t)strSQL;
pCommand->CommandType=adCmdText;
pCommand->Parameters->Refresh();
MySet=pCommand->Execute(NULL,NULL,adCmdUnknown);
_variant_t vIndex = (long)0;
_variant_t vCount = MySet->GetCollect(vIndex);///取得第一个字段的值放入vCount变量
m_ItemCount=vCount.lVal;
回复
landongfang 2003-12-21
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strSQL As String
conn.ConnectionString = "Provider=OraOLEDB.Oracle.1;Password=xxx;Persist Security Info=True;User ID=xxx;Data Source=xxx"
conn.CommandTimeout = 30
conn.Open
strSQL = "select field1 from table1 where condition=1"
rs.Open strSQL, conn, adOpenKeyset, adLockOptimistic
Debug.Print rs.RecordCount
回复
kelee921 2003-12-21
itlive兄,RecordCount=0的时候,也就是说rs.bof=rs.eof,
这时候,rs.movelast好像是不能运行的吧:)
回复
itlive 2003-12-21
rs.movelast
msgbox rs.reordcordcount
回复
kelee921 2003-12-21
md2d大虾,照你说的改了,还是不行啊
回复
kelee921 2003-12-21
果然是莫名其妙的问题,一不小心重起了一遍机器,问题就莫名奇妙的好了:)
不过我想md2d()的意见是正确的。其他人的想法也都不错,再次谢谢大家。
回复
md2d 2003-12-20
改为
rs.CursorType = adOpenKeyset(键集RecordSet)

rs.CursorType =adOpenStatic (静态RecordSet)
回复
md2d 2003-12-20
rs.CursorType = adOpenDynamic 这句错。用静态或键集RecordSet 或 把这句注释掉就可

用adOpenDynamic的话RecordCount属性永远等于0(RecordCount属性不支持动态RecordSet)

具体原因可看MSDN
回复
kelee921 2003-12-20
刷新?能具体点么?
对了,我在rs.open后面还漏了一句
Set rs.ActiveConnection = Nothing
如果你指的是这个,好像也没有效果:(
回复
pcwak 2003-12-20
加个刷新
回复
kelee921 2003-12-20
之后我尝试改用以下sql与句:
strSQL="select count(field1) counter from table1 where condition=1"
此时,rs.RecordCount的值为1,但rs.fields("counter")的值为0,晕倒!
回复
kelee921 2003-12-20
sorry, 有一句写错了应该是:“rs.Source=strSQL”,笔误
回复
发动态
发帖子
VB基础类
创建于2007-09-28

7449

社区成员

VB 基础类
申请成为版主
社区公告
暂无公告