recordcount?vb中关于RecordCount的问题
亲爱的读者们,你是否对recordcount和vb中关于RecordCount的问题的相关问题感到困惑?别担心,今天我将为你解答这些问题,让你对此有更清晰的认识。
delphi query.recordcount 总是为-1,请教!
其实这不是Delphi的bug,在一次查询显示中,如果数据记录数目大于能显示的数目(DBGrid)时,就会Query.recordcount=-1,这是数据并没有完全载入本地,当程序操作数据时,才会继续从数据库载入;所以这只是Delphi数据查询的优化。要得到准确的记录数你可以采用使用两种方法:1。Query.last;Query.first,然后Query.recordcount就可以得到正确值(数据很大时这样做效率很低);2。新增一条查询语句,用以统计记录数目。
vb中关于RecordCount的问题
recordcount是adodc控件的一个属性,其含义是统计表中的记录条数。
例如,若recordcount=0则说明是空表。
你的源程序的功能是:
判断表中记录条数是否为空,若不为空则执行删除操纵,否则不删除。
很容易理解的,当你的表中没有记录时删除操作根本无法执行下去,言外之意if语句的功能就是防止你不停删除记录。
rec.RecordCount 结果为1,急
使用DAO访问记录集的RecordCount属性要特别小心。RecordCount所返回的记录行数并不一定代表表中的实际记录行数,因为不同的游标类型、记录集类型和记录集填充时机,RecordCount所返回的行数会有很大不同。
楼主图中所打开的记录集类型是动态集(dbOpenDynaset),对于这种类型的记录集,要将所有记录行都填充到记录集后(使用Rs.MoveLast方法)其RecordCount才能返回真实的记录行数。只是取出ACCESS表中的数据输出到EXCEL中不建议使用动态类型记录集,而应使用表类型记录集,这样无需使用MoveLast方法即可获取准确的记录行数。
另外原代码里的For循环语句里没有移动记录集当前位置的代码,自然就只能将第一行中的数据输出到EXCEL中,其它行中的数据也就无法取出。
建议使用“表类型”数据集打开数据表,代码修改如下:
'......以上代码略
Setrec=DB1.OpenRecordset(my_sql)'注意没有使用dbOpenDynaset
Ifrec.RecordCount>0Then
rec.MoveFirst
Fori=0torec.RecordCount-1
Sheet5.Range("A"&i+2),Select
ActiveCell.FormulaR1C1=rec.Fields("user").Value
Sheet5.Range("B"&i+2),Select
ActiveCell.FormulaR1C1=rec.Fields("Password").Value
rec.MoveNext'记录移动到下一行
Nexti
EndIf
rec.Close
DB1.Close
ExitSub
EndSub如果代码运行有问题,请发追问。
关于rs.RecordCount和rs.fields(0).value
首先纠正你的一个错误认识:
rs.fields(0).value是用来返回记录集rs当前位置第一个字段的值,而不是用来返回记录总数;
而rs.RecordCount是真正用来返回记录总数的。
你的SQL语句中用到了COUNT(*)函数,该函数返回符合查询中指定的搜索条件的行的数目,而不消除重复值。它对每行分别进行计数,包括含有空值的行。
因此,你的rs最终返回的只有一条记录,而该记录的内容是符合 duzheno='ben'条件的记录总数。
因此,用rs.fields(0).value获得的是符合 duzheno='ben'条件的记录总数,而不是rs的总数,rs总数只有1;rs.RecordCount=1是正确的。
你把第二段代码这样改写一下的话,两段代码的执行效果就会一样了:
<%
sql="select tushuno from borrow"
'sql=sql+" where duzheno='ben'"
Set rs1= Server.CreateObject("ADODB.Recordset")
rs1.open sql,conn,1,1
d=rs1.RecordCount
%>
<%=d%>
文章分享到这里,希望我们关于recordcount和vb中关于RecordCount的问题的内容能够给您带来一些新的认识和思考。如果您还有其他问题,欢迎继续探索我们的网站或者与我们交流,我们将尽力为您提供满意的答案。