[已解决]请教关于ADO控件的相关实例问题。
界面:代码:
程序代码:
Option Explicit Private Sub Command1_Click() 'Command1单击事件 Dim i As Integer '定义i为整型变量 Adodc1.RecordSource = "select * from 库存表 where 药品序号=' " & Trim(Text1(0).Text) & "'" Adodc1.Refresh Set DataGrid1.DataSource = Adodc1 '判断输入数据是否存在 If Adodc1.Recordset.RecordCount > 0 Then '如果存在则执行。 MsgBox "您输入的记录已存在,请重新输入。", vbOKOnly + vbCritical, "错误提示" Else Adodc1.Recordset.AddNew For i = 0 To 4 Adodc1.Recordset.Fields(i) = Text1(i).Text Next i Adodc1.Recordset.Update MsgBox "记录添加成功", vbOKOnly + vbInformation, "Information" Adodc1.RecordSource = "select * from 库存表 order by 药品序号" Adodc1.Refresh End If End Sub Private Sub Form_Load() 'Load事件 Adodc1.Visible = False '隐藏adodc1控件,使其不可见。 Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + App.Path + "\STMZHJ_db.mdb;persist security info=false" '连接数据库 Adodc1.RecordSource = "select * from 库存表 order by 药品序号" '连接数据表 Set DataGrid1.DataSource = Adodc1 '将Adodc1的源数据赋值给Datagrid1。 End Sub
IF 循环语句。
If Adodc1.Recordset.RecordCount > 0 Then '如果存在则执行。
MsgBox "您输入的记录已存在,请重新输入。", vbOKOnly + vbCritical, "错误提示"
为什么当Adodc1.Recordset.Recordcount=1的时候,不执行Then后面的语句,反而执行Else后面的语句?
经验总结:
1.[非技术性]写代码时一定要认真啊。。。纫针啊。。一点的马虎可能会使你整个程序都达不到想要的结果。
2.[技术性]正常的recordcount对于过大的数据库数据不能返回准确的记录数,但对于100条以内的记录还是能准确的(好像和bookmark、游标类型等有关,如果对几十万记录统计记录数将极端消耗资源,必须遍历所有记录后才得到准确的数据)。
所以在做大数据程序的时候要谨慎使用recordcount属性
大家要注意帖子中的几个误区:
1.chen3523言论:“个人理解是:Adodc1.Recordset.RecordCount不存在,所以跳到Else后的语句。”这个是错误的。
2.wmf2014言论:“打开记录集时并不能立即返回记录数,需要异步等一段时间才返回正确的RecordCount”这个是不严谨的。应该是说在大数据的情况下,才会出现不能立即返回的情况。而我仅有10几条记录,不存在这个问题。
3.wmf2014言论:“你想要知道打开的记录里是否有记录应该用语句if rs.eof and rs.bof then 没有记录”这个我测试了,用rs,eof and rs.bof不能完成。(大家可以去试一下。不带表别人不可以)
基于以上的错误言论,大家要注意。列出以上并不是要说谁的不好,只是希望大家提起注意。以上几位给与了我很大的帮助。在此表示感谢。
问题完美解决。感谢xzlxzlxzl版主。
[ 本帖最后由 VB丶小宇 于 2014-12-21 18:37 编辑 ]