想检测用data控件返回的recordset对象中的EOF属性,但想尽办法不能成功,如下的语句出错,老提示"实时错误'91',对象变量或with块变量未设置"
If Data1.Recordset.EOF Then NotUnlock = False Else NotUnlock = True
然后我又定义
dim a as recordset(写成dim a as new recordset 时同样出错)
set a= data1.recordset
if a.eof then ... else ...
也提示出错!
data控件返回的recordset对象里面的EOF属性究竟该怎么用,请大侠指教!紧急求救!!!!!!!!!!!
If Data1.Recordset.EOF Then NotUnlock = False Else NotUnlock = True
然后我又定义
dim a as recordset(写成dim a as new recordset 时同样出错)
set a= data1.recordset
if a.eof then ... else ...
也提示出错!
data控件返回的recordset对象里面的EOF属性究竟该怎么用,请大侠指教!紧急求救!!!!!!!!!!!
我的if又不是块语句,加什么endif
主要是怎么获取对象的属性,用什么方法
请高手针对关键点指点小弟一下!!!
我这样写就不会错
Private Sub Command2_Click()
If Data1.Recordset.EOF = True Then
MsgBox "无数据"
Else
MsgBox "有数据"
End If
End SubPrivate Sub Form_Load()
Data1.DatabaseName = App.Path & "\db1.mdb"
End Sub这样就会错
Private Sub Form_Load()
Data1.DatabaseName = App.Path & "\db1.mdb"
If Data1.Recordset.EOF = True Then
MsgBox "无数据"
Else
MsgBox "有数据"
End If
End Sub看看是不是你的问题
要想实现我说的功能,即一打开窗口加载data后就检测到数据表是否为空还有什么方法?
用data的Reposition和Validate事件行不?怎么实现呢?
敬请SoHo_Andy(冰) 帮忙!
谢谢!
之所以会发生楼主所说的错误,是因为下面的过程中
Private Sub Form_Load()
Data1.DatabaseName = App.Path & "\db1.mdb"
If Data1.Recordset.EOF = True Then
MsgBox "无数据"
Else
MsgBox "有数据"
End If
End Sub 你用到了Data1的动态记录集对象Recordset,即Data1.Recordset,而在你的这个过程中你只是设置了Data1.DatabaseName = App.Path & "\db1.mdb" ,并没有初始化Data控件的动态记录集对象,也就是说这个时候动态记录集都还不存在,又哪来Data1.Recordset.EOF呢?是不是? 所以你应该在设计中将Data1控件的RecordSource属性设置好(选定数据库文件中的一个表名也可以),不过,如果你在设计时没有指定Data1控件的DatabaseName属性,只是在窗体装载过程中用代码Data1.DatabaseName = App.Path & "\db1.mdb" 来指定数据库名,那么你就得在代码中设置Data1.RecordSource属性,这样你可能就不会发现有错了,下面是我修改过的代码,给你一个参考:
Private Sub Form_Load()
Data1.DatabaseName = App.Path & "\db1.mdb"
data1.recordsource="这里输入你具体的表名或查询语句" '在这里加上这一句,后面的可能就不会有错了。
If Data1.Recordset.EOF = True Then
MsgBox "无数据"
Else
MsgBox "有数据"
End If
End Sub同时提醒:设计时要注意Data1控件的RecordType属性 我很少用DAO及其控件Data的(我一般用ADO),不过楼主可以参照我的观点和方法试试看,我刚学VB,很多不懂,望各位大侠指教!! 若有问题,愿与楼主讨论。
to cdxiaogan(小干)
你还是不要用data控件了下面是用ADO写的例子,引用ADO对象即可Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strSQl As String
Private Sub Form_Load()
If cn.State = 1 Then
cn.Close
End If
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\db1.mdb"
strSQl = "select * from students"
rs.Open strSQl, cn, adOpenDynamic, adLockOptimistic
If Not rs.EOF And Not rs.BOF Then
MsgBox "有记录 " & rs.RecordCount & " 条"
Else
MsgBox "没有找到学生的记录"
rs.Close
Exit Sub
End If
rs.Close
End Sub
至于上面的问题哪个对?我没有做实验。
我觉的zjp8310(z一阵风z) 说的更在理一些。
不用测试,谁都知道,一个记录集对象还没有初始化的时候,你能够引用它的Data1.Recordset.EOF属性吗?不信你自己按你的方法去试试,你先不要设置Data1.RecordSource属性,看你能不能通过,然后再先设置Data1.RecordSource,再运用你的方法试试。楼主出错的根本原因是在设计中和运行中都没有设置Data1.RecordSource属性,也没有初始化Data1.Recordset,如果引用Data1.Recordset.EOF之前先初始化了Data1.Recordset,我敢保证在哪里引用Data1.Recordset.EOF属性都不会出错。
呵呵!我刚学VB,很多不懂,愿向各位讨论学习,还望各位大侠不啬指教!
Private Sub Command2_Click()
If Data1.Recordset.EOF = True Then
MsgBox "无数据"
Else
MsgBox "有数据"
End If
End SubPrivate Sub Form_Load()
Data1.DatabaseName = App.Path & "\db1.mdb"
End Sub
你的测试不通过
Private Sub Form_Load()
Data1.DatabaseName = App.Path & "\db1.mdb"
data1.recordsource="select * from students"
If Data1.Recordset.EOF = True Then
MsgBox "无数据"
Else
MsgBox "有数据"
End If
End Sub
我原来的测试环境已经设置好了recordsource,所以那样写没有出错zjp8310(z一阵风z) 是对的,他上面的代码出错是因为没有刷新,加一句代码即可下面的代码就是楼主想要的答案了
Private Sub Form_Load()
Data1.DatabaseName = "d:\db1.mdb"
Data1.RecordSource = "select * from students"
Data1.Refresh
If Data1.Recordset.EOF = True Then
MsgBox "无数据"
Else
MsgBox "有数据"
End If
End Subto 大家,特别是zjp8310(z一阵风z),不好意思了,差点误人子弟,呵呵
If Not rs.EOF And Not rs.BOF Then
MsgBox "有记录 " & rs.RecordCount & " 条"
Else
MsgBox "没有找到学生的记录"
rs.Close
Exit Sub
End If
中的条件Not rs.EOF And Not rs.BOF永远都是成立的,而且永远都会弹出信息框“有记录-1条”,因为这个时候rs.RecordCount的值永远都是-1,表明记录集根本就不存在(这又有点象楼主的那个错误了),如果不信你可以调试看看,之所以出这个错,是因为你的连接字串用的驱动程序是Provider=Microsoft.Jet.OLEDB.4.0,而且又没有设置cn.cursorlocation=aduseclient,因此记录集实际上根本不存在本机内存中,所以对它的任何引用同样会出错,但是如果你的连接字串中的驱动程序用MSDASQL.1(当然这时候连接字串都变了),即使你没有设置cn.cursorlocation=aduseclient,却又不会出错,不信你把你的连接字串中的驱动程序改为MSDASQL.1(连接字串的其他内容相应修改)试试看。 愿意向SoHo_Andy(冰)学习讨论!希望你能再次来这里回话.