对大家来说是一很简单的问题
各们高手,有个问题想请教一下:我在想做一个让两个组合框产生联动效果时当执行到
Set M_rec = Db.OpenRecordset(M_SQL)(第五行)时就出现了,实时错误’424’ 要求对象 的提示,不知道是为什么,麻烦各位高手指点下迷津,Dim Db As Database、Dim M_rec As Recordset、
Dim M_SQL As String已经在别的窗体的通用中定义了,还有在Form_Load中的语句都执行正常,已经将数据库中的信息添加到组合框一(CmbPhoneName)中了
谢谢大家了
Private Sub CmbPhoneName_Click()
Dim PhoneID As String
M_SQL = "select id from phonesort where phonename='" + CmbPhoneName.Text + "'"
Set M_rec = Db.OpenRecordset(M_SQL)
PhoneID = M_rec!id
M_SQL = "select phonetype from phonetype where phonesortid='" + PhoneID + "'"
Set M_rec = Db.OpenRecordset(M_SQL)
M_rec.MoveLast
M_rec.movefrist
For i = 0 To M_rec.RecordCount - 1
CmbPhoneType.AddItem M_rec!phonetype
M_rec.MoveNext
Next
End Sub
Private Sub Form_Load()
Dim Dbpath As String
Dbpath = App.Path + "\phone.mdb"
Set Db = DBEngine.Workspaces(0).OpenDatabase(Dbpath)
M_SQL = "select phonename from phonesort"
Set M_rec = Db.OpenRecordset(M_SQL)
M_rec.MoveLast
M_rec.MoveFirst
For i = 0 To M_rec.RecordCount - 1
CmbPhoneName.AddItem M_rec!phonename
M_rec.MoveNext
Next
End Sub
问题点数:30、回复次数:20Top
1 楼tztz520(午夜逛街)回复于 2004-08-04 14:07:05 得分 2
M_SQL = "select phonetype from phonetype where phonesortid='" + PhoneID + "'"这句
你确定"phonetype"是一个表吗?
Top
2 楼SoHo_Andy(冰)回复于 2004-08-04 14:09:05 得分 3
打开的记录集没有关闭
试试载form_load 最后加入
m_rec.close
试试
或者在
Set M_rec = Db.OpenRecordset(M_SQL) 之前
加入
if m_rec.state=1 then
m_rec.close
end ifTop
3 楼tztz520(午夜逛街)回复于 2004-08-04 14:14:28 得分 2
DAO没关闭也没问题的.Top
4 楼Risinging()回复于 2004-08-04 14:27:09 得分 0
没错,phonetype是一个表名也是一个字段名,再说还没执行到那一步就提示错误了呀,麻烦再看看还有什么别的问题吗Top
5 楼Risinging()回复于 2004-08-04 14:38:42 得分 0
加了m_rec.close也不好用Top
6 楼Risinging()回复于 2004-08-08 13:10:44 得分 0
麻烦大家再帮我想想该怎么解决呀,谢谢了Top
7 楼RUKYO(蠢蠢的男子汉 - 恋星夜柔光,舔烈酒豪情)回复于 2004-08-08 15:48:56 得分 10
Option Explicit
Public Db As Database
Public mWrk As Workspace
Public M_rec As Recordset
Private Sub CmbPhoneName_Click()
Dim PhoneID As String
M_SQL = "select id from phonesort where phonename='" + CmbPhoneName.Text + "'"
Set M_rec = Db.OpenRecordset(M_SQL)
PhoneID = M_rec!id
M_SQL = "select phonetype from phonetype where phonesortid='" + PhoneID + "'"
Set M_rec = Db.OpenRecordset(M_SQL)
M_rec.MoveLast
M_rec.movefrist
For i = 0 To M_rec.RecordCount - 1
CmbPhoneType.AddItem M_rec!phonetype
M_rec.MoveNext
Next
End Sub
Private Sub Form_Load()
Dim Dbpath As String
Dbpath = App.Path + "\phone.mdb"
Set mWrk = CreateWorkspace("", "admin", "", dbUseJet)
Set Db = mWrk.OpenDatabase(Dbpath)
M_SQL = "select phonename from phonesort"
Set M_rec = Db.OpenRecordset(M_SQL)
M_rec.MoveLast
M_rec.MoveFirst
For i = 0 To M_rec.RecordCount - 1
CmbPhoneName.AddItem M_rec!phonename
M_rec.MoveNext
Next
End Sub
Top
8 楼Risinging()回复于 2004-08-08 17:29:26 得分 0
RUKYO,你好,谢谢你的帮助,不过这把连Form_Load都过不去了,黄色的标记指在Form_Load上就停了,提示变量未定义
小弟才学VB,还有个问题想请教一下:我的这个写法Set Db = DBEngine.Workspaces(0).OpenDatabase(Dbpath)有没有问题
谢谢了Top
9 楼RUKYO(蠢蠢的男子汉 - 恋星夜柔光,舔烈酒豪情)回复于 2004-08-08 17:33:17 得分 2
你不是说M_SQL在别的窗体已经定义了吗,如果这样在Option Explicit下加上Public M_SQL As StringTop
10 楼RUKYO(蠢蠢的男子汉 - 恋星夜柔光,舔烈酒豪情)回复于 2004-08-08 17:36:06 得分 2
Set mWrk = DBEngine.CreateWorkspace("", "admin", "", dbUseJet)
Set Db = DBEngine.Workspaces(0).OpenDatabase(Dbpath,False,False)Top
11 楼Risinging()回复于 2004-08-08 17:55:25 得分 0
对呀,是在别的窗体中定义了
我一开始就把Public M_SQL As String加了一下,不然的是指向M_SQL = "select phonename from phonesort"提示变量未定义
加了后是指在Form_Load上
Top
12 楼Risinging()回复于 2004-08-08 17:59:08 得分 0
这是我的第一个窗体的代码,只有两个组合框和一个按扭,为的是向数据库中添加电话的种类和型号
麻烦了老大
Dim Db As Database
Dim M_rec As Recordset
Dim M_SQL As String
Private Sub CmdAdd_Click()
Dim PhoneID As String '用来储存PhoneSort表中ID的值
If CmbPhoneName.Text = "" Then '判断电话名称和电话型号是否为空
MsgBox ("电话名称不能为空")
End If
If TxtPhoneType.Text = "" Then
MsgBox ("电话的型号不能为空")
End If
'判断组合框中电话的名称是否为新品种的电话(也就是说看数据库中以前有没有),没有的话就往PhoneSort表中添加新的品种
M_SQL = "select phonename from phonesort where phonename='" + CmbPhoneName.Text + "'"
Set M_rec = Db.OpenRecordset(M_SQL)
If M_rec.EOF Or M_rec.BOF Then
M_SQL = "insert into phonesort(phonename) values('" + CmbPhoneName.Text + "')"
Db.Execute M_SQL
CmbPhoneName.AddItem CmbPhoneName.Text '这句话是为了如果有新增电话名的话,刷新,使之显示出来
End If
M_SQL = "select id from phonesort where phonename='" + CmbPhoneName.Text + "'" '这句话一是为了如果是新建的电话品种的话重新刷新一下数据库再取其ID
'二是新添数据时因为PhoneSort和PhoneType这两个表是通过ID关联的,所以要取一下ID
Set M_rec = Db.OpenRecordset(M_SQL)
PhoneID = M_rec!id
'以下是判断要向数据库中添加的电话型号是否有重复
M_SQL = "select * from phonetype where phonesortid='" + PhoneID + "'and phonetype='" + TxtPhoneType.Text + "'"
Set M_rec = Db.OpenRecordset(M_SQL)
If M_rec.EOF Or M_rec.BOF Then
'如果重复才让添加
M_SQL = "insert into phonetype(phonesortid,phonetype) values('" + PhoneID + "','" + TxtPhoneType.Text + "')"
Db.Execute M_SQL
Else
a = CmbPhoneName.Text + " " + TxtPhoneType.Text + "已经存在了"
MsgBox (a)
End If
End Sub
Private Sub Form_Load()
Dim Dbpath As String
Dbpath = App.Path + "\phone.mdb"
Set Db = DBEngine.Workspaces(0).OpenDatabase(Dbpath)
M_SQL = "select phonename from phonesort"
Set M_rec = Db.OpenRecordset(M_SQL)
M_rec.MoveLast
M_rec.MoveFirst
For i = 0 To M_rec.RecordCount - 1
CmbPhoneName.AddItem M_rec!phonename
M_rec.MoveNext
Next
End Sub
Private Sub Form_Unload(Cancel As Integer)
Db.Close
End Sub
Private Sub TxtPhoneType_GotFocus()
TxtPhoneType.Text = ""
End Sub
Top
13 楼Risinging()回复于 2004-08-08 18:51:04 得分 0
等了好几天了Top
14 楼mycys(IT民工)回复于 2004-08-22 15:51:31 得分 4
学习Top
15 楼Risinging()回复于 2004-08-23 12:39:40 得分 0
各位高手帮帮忙呀Top
16 楼Risinging()回复于 2004-08-24 10:51:11 得分 0
各位高手,帮忙看看呀,小弟拔号在线等,谢谢Top
17 楼wumylove1234(毁于随)回复于 2004-08-25 00:35:19 得分 5
唉.扔了DAO嘛!学ADO.Top
18 楼Risinging()回复于 2004-09-04 09:16:48 得分 0
还是麻烦各位高手帮忙看看吧,为什么Form_Load中的M_rec可以用,而CmbPhoneName_Click就不可以了呢,谢谢了Top
19 楼Risinging()回复于 2004-09-07 15:18:21 得分 0
upTop
20 楼Risinging()回复于 2004-09-12 10:49:45 得分 0
结了吧,也没什么人回答了Top




