我接触VB不久,刚按照书本上的步骤用VB编了个停车塔管理系统,刚做了一半,到某一步的时候编译报错,提示“无效外部过程”,书本上说:“以NWIND.MDB数据库中的Products数据表为例,读取所有的数据和字段,首先声明两个对象变量:
Public db As Database '定义一个数据库对象变量
Public rs As Recordset' 定义一个数据录集对象变量”
接着分别使用OpenDatabase 和 OpenRecordset 方法,读取NWIND.MDB数据库和Product
数据表,做法如下:
Set db = OpenDatabase(App.Path & "\NWIND.MDB", True, False)
Set rs = db.OpenRecordset("Select * From Products Order By ProductID", dbOpenDynaset)”我编译的代码在下边,才做了一半,按钮还没编译,运行时提示“无效的外部过程”,可书上说到这一步运行可以看到有车辆图案和分组的界面了。还有,这个是用到MSFlextGrid控件的,还有DAO对象,另外我还下载了一个NWIND.MDB。
请高手修改下代码,或告知如何正确操作才能完成这个系统,小弟感激不尽!通用 声明
Option ExplicitConst TotalFloor As Byte = 15
Const TotalGrid As Byte = 4Public db As Database
Public rs As Recordset
Public pic As PictureSet db = OpenDatabase(App.Path & "\NWIND.MDB", True, False)
Set rs = db.OpenRecordset("Select * From Products Order By ProductID", dbOpenDynaset)Form Load
Private Sub Form_Load()
Dim i As IntegerOn Error GoTo LoadError
'加载停车图案
Set pic = LoadPicture(App.Path & "\cars.ico")
'开启数据库
Set db = OpenDatabase(App.Path & "\Park.MDB", False, False)
SetGrid '设置停车塔结构
Open_Table '读取数据录集
If rs.RecordCount > 0 Then '是否有车辆停放
rs.MoveLast: rs.MoveFirst
For i = 1 To rs.RecordCount
ArrangeCar '显示方格里的车辆图案
rs.MoveNext '换下个停车记录
Next
End If
Exit SubLoadError:
MsgBox Err.Description
End SubPublic Sub SetGrid() '设置停车塔结构
Dim i As Integer
MSFlexGrid1.Rows = TotalFloor + 1 '停车塔的总行数
MSFlexGrid1.Cols = TotalGrid + 1 '停车塔的总列数
'设置第0列文字标题 MSFlexGrid1.Row = 0
MSFlexGrid1.Col = 0
MSFlexGrid1.Text = " 楼层"
MSFlexGrid1.Col = 1
MSFlexGrid1.Text = " 第一格"
MSFlexGrid1.Col = 2
MSFlexGrid1.Text = " 第二格"
MSFlexGrid1.Col = 3
MSFlexGrid1.Text = " 第三格"
MSFlexGrid1.Col = 4
MSFlexGrid1.Text = " 第四格"
MSFlexGrid1.Col = 0 '各楼层的标示
For i = 1 To TotalFloor
MSFlexGrid1.Row = i
MSFlexGrid1.Text = i Next End Sub Public Sub Open_Table() '读取数据录集
Dim sql As String
sql = "Select * From Car Order By LicensePlate"
Set rs = db.OpenRecordset(sql, dbOpenDynaset)
End Sub
Public Sub ArrangeCar() '显示方格里的车辆图案
MSFlexGrid1.Row = rs![Floor]
MSFlexGrid1.Col = rs![Grid]
Set MSFlexGrid1.CellPicture = pic
Exit Sub
End SubCommand Click1Private Sub Command1_Click()End SubCommand Click2Private Sub Command1_Click()End SubMSFlexGrid1 ClickPrivate Sub MSFlexGrid1_Click()End Sub
Public db As Database '定义一个数据库对象变量
Public rs As Recordset' 定义一个数据录集对象变量”
接着分别使用OpenDatabase 和 OpenRecordset 方法,读取NWIND.MDB数据库和Product
数据表,做法如下:
Set db = OpenDatabase(App.Path & "\NWIND.MDB", True, False)
Set rs = db.OpenRecordset("Select * From Products Order By ProductID", dbOpenDynaset)”我编译的代码在下边,才做了一半,按钮还没编译,运行时提示“无效的外部过程”,可书上说到这一步运行可以看到有车辆图案和分组的界面了。还有,这个是用到MSFlextGrid控件的,还有DAO对象,另外我还下载了一个NWIND.MDB。
请高手修改下代码,或告知如何正确操作才能完成这个系统,小弟感激不尽!通用 声明
Option ExplicitConst TotalFloor As Byte = 15
Const TotalGrid As Byte = 4Public db As Database
Public rs As Recordset
Public pic As PictureSet db = OpenDatabase(App.Path & "\NWIND.MDB", True, False)
Set rs = db.OpenRecordset("Select * From Products Order By ProductID", dbOpenDynaset)Form Load
Private Sub Form_Load()
Dim i As IntegerOn Error GoTo LoadError
'加载停车图案
Set pic = LoadPicture(App.Path & "\cars.ico")
'开启数据库
Set db = OpenDatabase(App.Path & "\Park.MDB", False, False)
SetGrid '设置停车塔结构
Open_Table '读取数据录集
If rs.RecordCount > 0 Then '是否有车辆停放
rs.MoveLast: rs.MoveFirst
For i = 1 To rs.RecordCount
ArrangeCar '显示方格里的车辆图案
rs.MoveNext '换下个停车记录
Next
End If
Exit SubLoadError:
MsgBox Err.Description
End SubPublic Sub SetGrid() '设置停车塔结构
Dim i As Integer
MSFlexGrid1.Rows = TotalFloor + 1 '停车塔的总行数
MSFlexGrid1.Cols = TotalGrid + 1 '停车塔的总列数
'设置第0列文字标题 MSFlexGrid1.Row = 0
MSFlexGrid1.Col = 0
MSFlexGrid1.Text = " 楼层"
MSFlexGrid1.Col = 1
MSFlexGrid1.Text = " 第一格"
MSFlexGrid1.Col = 2
MSFlexGrid1.Text = " 第二格"
MSFlexGrid1.Col = 3
MSFlexGrid1.Text = " 第三格"
MSFlexGrid1.Col = 4
MSFlexGrid1.Text = " 第四格"
MSFlexGrid1.Col = 0 '各楼层的标示
For i = 1 To TotalFloor
MSFlexGrid1.Row = i
MSFlexGrid1.Text = i Next End Sub Public Sub Open_Table() '读取数据录集
Dim sql As String
sql = "Select * From Car Order By LicensePlate"
Set rs = db.OpenRecordset(sql, dbOpenDynaset)
End Sub
Public Sub ArrangeCar() '显示方格里的车辆图案
MSFlexGrid1.Row = rs![Floor]
MSFlexGrid1.Col = rs![Grid]
Set MSFlexGrid1.CellPicture = pic
Exit Sub
End SubCommand Click1Private Sub Command1_Click()End SubCommand Click2Private Sub Command1_Click()End SubMSFlexGrid1 ClickPrivate Sub MSFlexGrid1_Click()End Sub
Set rs = db.OpenRecordset("Select * From Products Order By ProductID", dbOpenDynaset) 另外,你必须有 Park.MDB 数据库文件。
Form_Load() 事件,注意变量名称
就放在:“ '开启数据库”的后面比较合适。
6L和7L的朋友,我把代码放到后面后可以运行了,但提示
然后显示的程序为http://i.6.cn/tu.6.cn/f4/c5/bd/7c8b873fd5b0a55a27678034e23f8077.nail.jpg
可书上显示的界面里,MSFlexGrid控件里有很多个表格和车辆的图案可我的都没有
Public Sub SetGrid() '设置停车塔结构
Dim i As Integer
MSFlexGrid1.Rows = TotalFloor + 1 '停车塔的总行数
MSFlexGrid1.Cols = TotalGrid + 1 '停车塔的总列数
'设置第0列文字标题 MSFlexGrid1.Row = 0
MSFlexGrid1.Col = 0
MSFlexGrid1.Text = " 楼层"
MSFlexGrid1.Col = 1
MSFlexGrid1.Text = " 第一格"
MSFlexGrid1.Col = 2
MSFlexGrid1.Text = " 第二格"
MSFlexGrid1.Col = 3
MSFlexGrid1.Text = " 第三格"
MSFlexGrid1.Col = 4
MSFlexGrid1.Text = " 第四格"
MSFlexGrid1.Col = 0 '各楼层的标示
For i = 1 To TotalFloor
MSFlexGrid1.Row = i
MSFlexGrid1.Text = i Next End Sub
MsgBox Err.Description .....原因是 Set pic = LoadPicture(App.Path & "\cars.ico") 你是不是没有这个文件cars.ico的文件啊??你自己做一个吧...
做个图片放到生成的exe目录里,ico是个图片....你用mspaint做一个都成....大哥你是怎么看的书啊
弄完后运行还是提示
现在Form里的代码是这样的,不知道有没有问题:
Private Sub Form_Load()
Dim i As IntegerOn Error GoTo LoadError
'加载停车图案
Set pic = LoadPicture(App.Path & "\cars.ico")
'开启数据库
Set db = OpenDatabase(App.Path & "\Park.MDB", False, False)
Set db = OpenDatabase(App.Path & "\NWIND.MDB", True, False)
Set rs = db.OpenRecordset("Select * From Products Order By ProductID", dbOpenDynaset)
SetGrid '设置停车塔结构
Open_Table '读取数据录集
If rs.RecordCount > 0 Then '是否有车辆停放
rs.MoveLast: rs.MoveFirst
For i = 1 To rs.RecordCount
ArrangeCar '显示方格里的车辆图案
rs.MoveNext '换下个停车记录
Next
End If
Exit SubLoadError:
MsgBox Err.Description
End Sub
on error resume next算了...把LoadError:
MsgBox Err.Description 注释掉,算了....看看其他情况再说
改成
on error resume next你能不能注意看我的回答啊....
请问怎么修改呢,另外车辆图案还是没显示Command1 ClickPrivate Sub Command1_Click() '停入
Dim i, j As Byte
Dim txt As String
On Error GoTo CommandErr
'是否已客满
If rs.RecordCount = TotalFloor * TotalGrid Then
MsgBox "目前停车塔已客满", vbExclamation + vbOKOnly, ""
Exit Sub
CommandErr:
MsgBox Err.Description
End If
'输入车牌号码,并检查是否6位
txt = InputBox("请出入车牌号码(6位),如AH9124", "输入车号")
If Len(txt) <> 6 Then
MsgBox "输入车号错误", vbCritical + vbOKOnly, "错误"
Exit Sub
End If
'寻找空位及存储该车停车数据
For i = 1 To TotalFloor
For j = 1 To TotalGrid
MSFlexGrid1.Row = i '更换寻找目标
MSFlexGrid1.Col = j
'检查是否为空位
If MSFlexGrid1.CellPicture = 0 Then
'此格为空位,开始写入停车数据
rs.AddNew '新增一笔空白记录
'以上登陆数据至此空白记录
rs![LicensePlata] = txt '车牌
rs![Floor] = i '楼层
rs![Grid] = j '第几格
rs![In_Time] = Now '停车起始时间
rs.Update '将此记录写入数据库
'告知停车信息
MsgBox "这部车将停放在第" & Str(i) & "层第" & Str(j) & "格", vbInformation + vbOKOnly, "进场信息"
'显示该格已停车的图案
Set MSFlexGrid1.CellPicture = pic
Exit Sub '跳离程序
End If
Next
Next
End SubPrivate Sub Form_Load()
Dim i As IntegerOn Error Resume Next
'加载停车图案
Set pic = LoadPicture(App.Path & "\cars.ico")
'开启数据库
Set db = OpenDatabase(App.Path & "\Park.MDB", False, False)
Set db = OpenDatabase(App.Path & "\NWIND.MDB", True, False)
Set rs = db.OpenRecordset("Select * From Products Order By ProductID", dbOpenDynaset)
SetGrid '设置停车塔结构
Open_Table '读取数据录集
If rs.RecordCount > 0 Then '是否有车辆停放
rs.MoveLast: rs.MoveFirst
For i = 1 To rs.RecordCount
ArrangeCar '显示方格里的车辆图案
rs.MoveNext '换下个停车记录
Next
End If
Exit SubLoadError:
MsgBox Err.Description
End Sub
Set rs = db.OpenRecordset("Select * From Products Order By ProductID", dbOpenDynaset) 你这两行要摆在事件里面,不能摆在通用区 (无效外部过程错误)
你自己测试测试loadpicture,单独做个程序....
你重命名 cars.ico → cars
再试试。
(如果改为 cars 后,文件类型那儿没显示‘图标’了,则撤消重命名。你的加载图标的错误可能是“千古之谜”了)。
Set pic = LoadPicture(App.Path & "\cars.ico")这一句没有任何错误!
Option ExplicitPrivate pic As PicturePrivate Sub Form_Load() Me.AutoRedraw = True
Set pic = LoadPicture(App.Path & "\Scenery.ico")
Me.PaintPicture pic, 300, 420End Sub
Form1 里的代码Private Sub Form_Load()
Dim i As IntegerOn Error Resume Next
'加载停车图案
Set pic = LoadPicture(App.Path & "\cars.ico")
'开启数据库
Set db = OpenDatabase(App.Path & "\Park.MDB", False, False)
Set db = OpenDatabase(App.Path & "\NWIND.MDB", True, False)
Set rs = db.OpenRecordset("Select * From Products Order By ProductID", dbOpenDynaset)
SetGrid '设置停车塔结构
Open_Table '读取数据录集
If rs.RecordCount > 0 Then '是否有车辆停放
rs.MoveLast: rs.MoveFirst
For i = 1 To rs.RecordCount
ArrangeCar '显示方格里的车辆图案
rs.MoveNext '换下个停车记录
Next
End If
Exit SubLoadError:
MsgBox Err.Description
End Sub
Set pic = LoadPicture("D:\停车塔模拟管理系统\cars.ico")
运行一下试试看。
Set db = OpenDatabase(App.Path & "\Park.MDB", False, False)
Set db = OpenDatabase(App.Path & "\NWIND.MDB", True, False) 你的第一个数据库没用了啊!!!
你得另外声明一个变量。
Private Sub Command2_Click() '驶出
Dim i, j As Byte
Dim txt As String
On Error GoTo CommandErr
'目前塔内若没有车辆,就不能接受驶出动作
If rs.RecordCount = 0 Then
MsgBox "目前停车塔没有任何车辆", vbExclamation + vbOKOnly
Exit Sub
End If
'输入要驶出的车辆,并作车牌是否6位的判断
txt = InputBox("请输入车牌号码(6位),如AH9124", "输入车号")
If Len(txt) <> 6 Then
MsgBox "输入车号错误", vbCritical + vbOKOnly, "错误"
Exit Sub
End If
'要搜寻驶出的车辆位置
txt "LicensePlate =" & "'" & txt & "'"
rs.FindFirst txt
If Not rs.NoMatach Then '若找到该辆车子
'产生该车停放在塔内的位置
MsgBox "这部车停放在第" & Str(rs![Floor]) & "层第" & r(rs![Grid]) & "格", vbInformation + vbOKOnly, "出场信息"
'将该车在方格的图案予以消除
MSFlexGrid1.Row = rs![Floor]
MSFlexGrid1.Col = rs![Grid]
Set MSFlexGrid1.CellPicture = LoadPicture("")
rs.Delete '删除该辆车的记录
Else
'该车牌的车子并没有停在塔里
MsgBox "没有停放这辆车", vbCritical + vbOKOnly, ""
End If
Exit Sub
CommandErr:
MsgBox Err.DescriptionEnd Sub
翻译过来是:Microsoft Jet数据库引擎不能识别'LicensePlate'作为一个有效的字段名或表达式
请问怎么解决。。