VB中 DO ...LOOP循环问题

lp370480 2009-01-15 04:19:34
一个成品料号需要若干种配置零件,每个零件需要的数量也不样,在根据成品配置去领用零件时,希望当零件的配置数量大于现有库存时能不予受理,并有报错提示!下面是我的代码,执行是说:“loop缺少do”请高手能帮忙看下问题在那。
Dim rs1 As ADODB.Recordset '定义一个记录集对象rs1
Set rs1 = New ADODB.Recordset
Dim cnn1 As ADODB.Connection '定义一个连接对象cnn1
Set cnn1 = New ADODB.Connection
cnn1.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\daoju.mdb;Persist Security Info=False"
Dim connter As Integer
Dim sql1 As String
Dim sql2 As String
Dim sql3 As String
Dim sql4 As String
Dim zhi As String
sql3 = "Select * From zuoye where 成品料号 = '" + Text1.Text + "' " '以成品料号查询其配置零件编码及其配置数量Set rs1 = cnn1.Execute(sql3)
x = rs1("零件编码")’把上面查询到的成品料号配置零件编码设为变量X y = rs1("零件配置数量")‘把上面查询到的成品料号配置零件数量设为变量Y
Do While Not rs1.EOF
sql4 = "select * from chuwei where 零件编码 ='" & x & "' and 零件库存数量>='" & y & "'" '逐个查询每个零件库存数量大于该配置零件的数量cnn1.Execute (sql4)
If rs1.EOF = True Then 如发现有配置零件数量大于现有库存时
MsgBox ("领出数量大于可用数量!")
zhi = 1 对上面的特殊情况做一个标示 赋个值 Exit Do
rs1.MoveNext
Loop
Close
If zhi <> 1 Then 当不符合上面的特殊情况就执行下面的语句
Do While Not rs1.EOF
sql1 = "update chuwei set 零件库存数量 = 零件库存数量-'" & y & "' where bianma ='" & x & "' "
cnn1.Execute (sql1)
cnn1.Execute (sql2)

rs1.MoveNext
Loop
End If

cnn1.Close
Set cnn1 = Nothing

MsgBox ("信息保存成功!")
...全文
384 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lp370480 2009-01-16
  • 打赏
  • 举报
回复
谢谢各位 搞定了
Simao 2009-01-16
  • 打赏
  • 举报
回复
零件库存数量>='" & y & "'" 红色的不匹配呢
jhone99 2009-01-16
  • 打赏
  • 举报
回复
sql4 = "select * from chuwei where 零件编码 ='" & x & "' and 零件库存数量>=" & y
lp370480 2009-01-16
  • 打赏
  • 举报
回复
谢谢你们上面的提示,现在还有一个问题, sql4 = "select * from chuwei where 零件编码 ='" & x & "' and 零件库存数量>='" & y & "'" 说这个语句表达式中数据类型不匹配。
数据库中“零件库存数量”是长整型,
数据库中“零件编码”是文本型,
x = rs1("零件编码" 数据库中是文本型) '把上面查询到的成品料号配置零件编码设为变量X
y = rs1("零件配置数量"数据库中是长整型 ) '把上面查询到的成品料号配置零件数量设为变量Y
这是什么原因?
jhone99 2009-01-15
  • 打赏
  • 举报
回复
Dim rs1 As ADODB.Recordset            '定义一个记录集对象rs1
Set rs1 = New ADODB.Recordset
Dim rs2 As ADODB.Recordset '定义一个记录集对象rs1
Set rs2 = New ADODB.Recordset
Dim cnn1 As ADODB.Connection '定义一个连接对象cnn1
Set cnn1 = New ADODB.Connection
cnn1.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\daoju.mdb;Persist Security Info=False"
Dim connter As Integer
Dim sql1 As String
Dim sql2 As String
Dim sql3 As String
Dim sql4 As String
Dim zhi As String

sql3 = "Select * From zuoye where 成品料号 = '" + Text1.Text + "' " '以成品料号查询其配置零件编码及其配置数量
Set rs1 = cnn1.Execute(sql3)
x = rs1("零件编码") '把上面查询到的成品料号配置零件编码设为变量X
y = rs1("零件配置数量") '把上面查询到的成品料号配置零件数量设为变量Y

Do While Not rs1.EOF
sql4 = "select * from chuwei where 零件编码 ='" & x & "' and 零件库存数量>='" & y & "'" '逐个查询每个零件库存数量大于该配置零件的数量
Set rs2 = cnn1.Execute(sql4) '*****这里要加rs2*****

If rs2.EOF = True Then 如发现有配置零件数量大于现有库存时
MsgBox ("领出数量大于可用数量!")
zhi = 1 '对上面的特殊情况做一个标示 赋个值
Exit Do
End If '*****加*****


rs1.MoveNext
Loop

rs1.MoveFirst '*****要移回开头*****

If zhi <> 1 Then 当不符合上面的特殊情况就执行下面的语句
Do While Not rs1.EOF
sql1 = "update chuwei set 零件库存数量 = 零件库存数量-'" & y & "' where bianma ='" & x & "' "
cnn1.Execute (sql1)
cnn1.Execute (sql2)

rs1.MoveNext
Loop
End If


cnn1.Close
Set cnn1 = Nothing

MsgBox ("信息保存成功!")
jhone99 2009-01-15
  • 打赏
  • 举报
回复
Dim rs1 As ADODB.Recordset            '定义一个记录集对象rs1
Set rs1 = New ADODB.Recordset
Dim rs2 As ADODB.Recordset '定义一个记录集对象rs1
Set rs2 = New ADODB.Recordset
Dim cnn1 As ADODB.Connection '定义一个连接对象cnn1
Set cnn1 = New ADODB.Connection
cnn1.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\daoju.mdb;Persist Security Info=False"
Dim connter As Integer
Dim sql1 As String
Dim sql2 As String
Dim sql3 As String
Dim sql4 As String
Dim zhi As String

sql3 = "Select * From zuoye where 成品料号 = '" + Text1.Text + "' " '以成品料号查询其配置零件编码及其配置数量
Set rs1 = cnn1.Execute(sql3)
x = rs1("零件编码") '把上面查询到的成品料号配置零件编码设为变量X
y = rs1("零件配置数量") '把上面查询到的成品料号配置零件数量设为变量Y

Do While Not rs1.EOF
sql4 = "select * from chuwei where 零件编码 ='" & x & "' and 零件库存数量>='" & y & "'" '逐个查询每个零件库存数量大于该配置零件的数量
Set rs2 = cnn1.Execute(sql4)

If rs2.EOF = True Then 如发现有配置零件数量大于现有库存时
MsgBox ("领出数量大于可用数量!")
zhi = 1 '对上面的特殊情况做一个标示 赋个值
Exit Do
End If


rs1.MoveNext
Loop

rs1.MoveFirst

If zhi <> 1 Then 当不符合上面的特殊情况就执行下面的语句
Do While Not rs1.EOF
sql1 = "update chuwei set 零件库存数量 = 零件库存数量-'" & y & "' where bianma ='" & x & "' "
cnn1.Execute (sql1)
cnn1.Execute (sql2)

rs1.MoveNext
Loop
End If


cnn1.Close
Set cnn1 = Nothing

MsgBox ("信息保存成功!")


改了很多,可能还有错误
king06 2009-01-15
  • 打赏
  • 举报
回复

Dim rs1 As ADODB.Recordset '定义一个记录集对象rs1
Set rs1 = New ADODB.Recordset

sql3 = "Select * From zuoye where 成品料号 = '" + Text1.Text + "' " '以成品料号查询其配置零件编码及其配置数量
Set rs1 = cnn1.Execute(sql3)
x = rs1("零件编码") '把上面查询到的成品料号配置零件编码设为变量X
y = rs1("零件配置数量") '把上面查询到的成品料号配置零件数量设为变量Y
Do While Not rs1.EOF
sql4 = "select * from chuwei where 零件编码 ='" & x & "' and 零件库存数量>='" & y & "'" '逐个查询每个零件库存数量大于该配置零件的数量
cnn1.Execute (sql4)

If rs1.EOF = True Then 如发现有配置零件数量大于现有库存时
MsgBox ("领出数量大于可用数量!")
zhi = 1 '对上面的特殊情况做一个标示 赋个值
Exit Do
End If '缺少
rs1.MoveNext
Loop

Close

If zhi <> 1 Then 当不符合上面的特殊情况就执行下面的语句
Do While Not rs1.EOF
sql1 = "update chuwei set 零件库存数量 = 零件库存数量-'" & y & "' where bianma ='" & x & "' "
cnn1.Execute (sql1)
cnn1.Execute (sql2)
rs1.MoveNext
Loop
End If

cnn1.Close
Set cnn1 = Nothing

MsgBox ("信息保存成功!")


整理好看点就容易看出来问题
lp370480 2009-01-15
  • 打赏
  • 举报
回复
一个成品料号需要若干种配置零件,每个零件需要的数量也不样,在根据成品配置去领用零件时,希望当零件的配置数量大于现有库存时能不予受理,同时整个成品其他配置零件也不予受理,并有报错提示!下面是我的代码,执行是说:“loop缺少do”请高手能帮忙看下问题在那。
Dim rs1 As ADODB.Recordset '定义一个记录集对象rs1
Set rs1 = New ADODB.Recordset
Dim cnn1 As ADODB.Connection '定义一个连接对象cnn1
Set cnn1 = New ADODB.Connection
cnn1.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\daoju.mdb;Persist Security Info=False"
Dim connter As Integer
Dim sql1 As String
Dim sql2 As String
Dim sql3 As String
Dim sql4 As String
Dim zhi As String
sql3 = "Select * From zuoye where 成品料号 = '" + Text1.Text + "' " '以成品料号查询其配置零件编码及其配置数量
Set rs1 = cnn1.Execute(sql3)
x = rs1("零件编码")’把上面查询到的成品料号配置零件编码设为变量X
y = rs1("零件配置数量")‘把上面查询到的成品料号配置零件数量设为变量Y
Do While Not rs1.EOF
sql4 = "select * from chuwei where 零件编码 ='" & x & "' and 零件库存数量>='" & y & "'" '逐个查询每个零件库存数量大于该配置零件的数量
cnn1.Execute (sql4)
If rs1.EOF = True Then 如发现有配置零件数量大于现有库存时
MsgBox ("领出数量大于可用数量!")
zhi = 1 对上面的特殊情况做一个标示 赋个值
Exit Do
rs1.MoveNext
Loop
Close
If zhi <> 1 Then 当不符合上面的特殊情况就执行下面的语句
Do While Not rs1.EOF
sql1 = "update chuwei set 零件库存数量 = 零件库存数量-'" & y & "' where bianma ='" & x & "' "
cnn1.Execute (sql1)
cnn1.Execute (sql2)

rs1.MoveNext
Loop
End If

cnn1.Close
Set cnn1 = Nothing

MsgBox ("信息保存成功!")
绝对经典完整的入门教程 由于70MB的文件限制 分为两节下载 搜索“[Visual.Basic.2010.入门经典(第6版)].Thearon.Willi等.扫描版(2/2)”可以下载另外一半 或者直接打开链接“http://download.csdn.net/detail/sfstream6/8240837” 目 录 第1 章 初识Visual Basic 2010 ............ 1 1.1 事件驱动编程 .............................. 2 1.2 安装Visual Basic 2010 ................ 3 1.3 Visual Basic 2010 集成开发 环境 .............................................. 5 1.3.1 初始化开发环境 ...................... 6 1.3.2 菜单 .......................................... 6 1.3.3 工具栏 ...................................... 7 1.4 创建简单的应用程序 .................. 8 1.4.1 工具箱 .................................... 11 1.4.2 改进型匈牙利表示法 ............ 13 1.4.3 代码编辑器 ............................ 14 1.5 使用帮助系统 ............................ 17 1.6 小结 ............................................ 18 1.7 练习 ............................................ 18 第2 章 .NET Framework 概述 ............ 19 2.1 微软的信心来自于Windows .... 19 2.1.1 MSN 1.0 .................................. 20 2.1.2 .NET理念 .............................. 20 2.1.3 .NET与Java 有些类似 .......... 21 2.1.4 现在所处的阶段 .................... 22 2.2 为Windows 编写软件 ............... 22 2.2.1 .NET Framework类 ............... 23 2.2.2 执行代码 ................................ 24 2.3 公共语言运行时 ........................ 25 2.3.1 载入并执行代码 .................... 25 2.3.2 应用程序隔离 ........................ 25 2.3.3 安全性 .................................... 25 2.3.4 互操作 .................................... 26 2.3.5 异常处理 ................................ 26 2.4 通用类型系统和公共语言 规范 ............................................ 26 2.5 小结 ............................................ 27 第3 章 编写软件 ................................ 29 3.1 信息和数据 ................................ 29 3.1.1 算法 ........................................ 29 3.1.2 编程语言 ................................ 30 3.2 变量 ............................................ 31 3.3 注释和空白 ................................ 33 3.3.1 注释 ........................................ 33 3.3.2 空白 ........................................ 35 3.4 数据类型 .................................... 35 3.4.1 数字类型 ................................ 35 3.4.2 常见的整型数学运算 ............. 36 3.4.3 整型运算的缩写方式 ............. 38 3.4.4 浮点型数学运算 ..................... 40 3.4.5 字符串类型 ............................ 42 3.4.6 使用日期 ................................ 49 3.4.7 布尔类型 ................................ 54 3.5 存储变量 .................................... 55 3.5.1 二进制 .................................... 55 3.5.2 位和字节 ................................ 55 3.5.3 值的表示 ................................ 56 3.5.4 值的转换 ................................ 57 3.6 方法 ............................................ 58 3.6.1 使用方法的原因 ..................... 59 3.6.2 前面曾介绍过的方法 ............. 59 3.6.3 创建方法 ................................ 62 3.6.4 选择方法名称 ........................ 65 3.6.5 作用域 .................................... 65 3.7 小结 ............................................ 67 3.8 练习 ............................................ 68 第4 章 流程控制 .................................. 69 4.1 作出决策 .................................... 69 Visual Basic 2010 入门经典( 第6 版) X 4.2 If 语句 ........................................ 70 4.2.1 Else 语句 ................................ 71 4.2.2 可进行多重选择的ElseIf 语句 ........................................ 72 4.2.3 嵌套的If 语句 ........................ 73 4.2.4 单行If 语句 ............................ 73 4.2.5 比较运算符 ............................ 74 4.2.6 字符串比较 ............................ 81 4.3 Select Case 语句 ........................ 83 4.3.1 不区分大小写的Select Case 语句 ........................................ 86 4.3.2 多重选择 ................................ 88 4.3.3 Case Else 语句 ........................ 89 4.3.4 Select Case 的不同数据 类型 ........................................ 89 4.4 循环 ............................................ 90 4.4.1 For…Next 循环 ..................... 90 4.4.2 Do…Loop 循环 ...................... 95 4.4.3 嵌套循环 ................................ 99 4.4.4 提前退出循环 ...................... 100 4.4.5 死循环 .................................. 102 4.5 小结 .......................................... 103 4.6 练习 .......................................... 104 第5 章 处理数据结构 ....................... 105 5.1 数组 .......................................... 105 5.1.1 定义和使用数组 .................. 105 5.1.2 使用 For Each…Next 循环 .... 108 5.1.3 将数组作为参数传递 .......... 110 5.1.4 数组的排序 .......................... 112 5.1.5 反向检索 .............................. 113 5.1.6 用值初始化数组 .................. 115 5.2 枚举 .......................................... 116 5.2.1 使用枚举 .............................. 116 5.2.2 确定状态 .............................. 119 5.2.3 设置无效值 .......................... 121 5.3 常量 .......................................... 121 5.3.1 使用常量 .............................. 122 5.3.2 各种常量类型 ...................... 123 5.4 结构 .......................................... 123 5.4.1 创建结构 .............................. 124 5.4.2 为结构添加属性 .................. 126 5.5 数组列表 .................................. 127 5.5.1 使用数组列表 ..................... 127 5.5.2 在数组列表进行删除 操作 ..................................... 131 5.5.3 显示数组列表的项 .......... 134 5.6 集合 .......................................... 134 5.6.1 创建 CustomerCollection 类 ... 135 5.6.2 添加Item 属性 .................... 136 5.7 使用散列表创建查询表 .......... 138 5.7.1 使用散列表 ......................... 138 5.7.2 Remove、RemoveAt和Clear 方法 ..................................... 141 5.7.3 区分大小写 ......................... 143 5.8 高级数组操作 .......................... 144 5.8.1 动态数组 ............................. 144 5.8.2 使用Preserve 关键字 .......... 146 5.9 小结 .......................................... 147 5.10 练习 ........................................ 147 第6 章 可扩展应用程序标记语言 (XAML) ................................ 149 6.1 什么是XAML ......................... 149 6.2 XAML语法 ............................. 150 6.3 WPF .......................................... 153 6.3.1 创建一个富WPF用户 界面 ..................................... 154 6.3.2 使用WPF通用控件 ........... 159 6.3.3 连接事件 ............................. 163 6.4 小结 .......................................... 166 6.5 练习 .......................................... 167 第7 章 构建Windows应用程序 ...... 169 7.1 响应事件 .................................. 169 7.2 创建简单的应用程序 .............. 176 7.2.1 构建窗体 ............................. 176 7.2.2 统计字符 ............................. 179 7.2.3 统计单词 ............................. 181 7.3 创建更复杂的应用程序 .......... 187 7.3.1 Text Editor 项目 .................. 187 7.3.2 创建工具栏 ......................... 187 目 录 XI 7.3.3 创建状态栏 .......................... 191 7.3.4 创建编辑框 .......................... 193 7.3.5 清除编辑框 .......................... 194 7.3.6 响应工具栏按钮 .................. 197 7.4 使用多个窗体 .......................... 202 7.5 小结 .......................................... 205 7.6 练习 .......................................... 206 第8 章 显示对话框 ........................... 207 8.1 MessageBox 对话框 ................ 207 8.1.1 MessageBox的可用 图标 ...................................... 208 8.1.2 MessageBox的可用 按钮 ...................................... 208 8.1.3 设置默认按钮 ...................... 209 8.1.4 其他选项 .............................. 209 8.1.5 Show 方法的语法 ................ 209 8.1.6 MessageBox的示例 ............. 211 8.2 OpenFileDialog 控件 ............... 214 8.2.1 OpenFileDialog 控件 ............ 214 8.2.2 OpenFileDialog 的属性 ........ 215 8.2.3 OpenFileDialog 的方法 ........ 216 8.2.4 使用OpenFileDialog 控件 ... 216 8.3 SaveFileDialog 控件 ................ 220 8.3.1 SaveFileDialog 的属性 ........ 221 8.3.2 SaveFileDialog 的方法 ........ 221 8.3.3 使用SaveFileDialog控件 .... 221 8.4 FontDialog 控件 ....................... 225 8.4.1 FontDialog 的属性 ............... 225 8.4.2 FontDialog 的方法 ............... 225 8.4.3 使用FontDialog 控件 .......... 225 8.5 ColorDialog 控件 ..................... 228 8.5.1 ColorDialog的属性 ............. 228 8.5.2 使用ColorDialog控件 ........ 229 8.6 PrintDialog 控件 ...................... 230 8.6.1 PrintDialog 的属性 ............... 231 8.6.2 使用PrintDialog 控件 .......... 231 8.6.3 PrintDocument类 ................. 231 8.6.4 打印文档 .............................. 232 8.7 FolderBrowserDialog控件 ...... 238 8.7.1 FolderBrowserDialog 控件 的属性 ................................. 238 8.7.2 使用FolderBrowserDialog 控件 ..................................... 238 8.8 小结 .......................................... 241 8.9 练习 .......................................... 242 第9 章 创建菜单 .............................. 243 9.1 菜单功能概述 .......................... 243 9.1.1 图形 ..................................... 243 9.1.2 访问键 ................................. 244 9.1.3 快捷键 ................................. 244 9.1.4 复选标记 ............................. 244 9.1.5 Properties窗格 .................... 245 9.2 创建菜单 .................................. 246 9.2.1 设计菜单 ............................. 246 9.2.2 添加工具栏和控件 .............. 247 9.2.3 为菜单编写代码 .................. 249 9.2.4 为View菜单和工具栏编写 代码 ..................................... 253 9.2.5 测试代码 ............................. 254 9.3 上下文菜单 .............................. 256 9.3.1 创建上下文菜单 .................. 256 9.3.2 激活或禁用菜单项和工具栏 按钮 ..................................... 259 9.4 小结 .......................................... 262 9.5 练习 .......................................... 263 第10章 调试和错误处理 ................. 265 10.1 主要错误类型 ........................ 265 10.1.1 语法错误 ......................... 266 10.1.2 执行错误 ......................... 269 10.1.3 逻辑错误 ......................... 269 10.2 调试 ........................................ 270 10.2.1 创建示例项目 ................. 270 10.2.2 设置断点 ......................... 285 10.2.3 使用Watch窗格和 QuickWatch 对话框 进行调试 ......................... 291 10.2.4 使用Autos窗格进行 调试 ................................. 293 Visual Basic 2010 入门经典( 第6 版) XII 10.2.5 使用Locals 窗格进行 调试 .................................. 293 10.3 错误处理 ................................ 294 10.4 小结 ........................................ 298 10.5 练习 ........................................ 298 第11章 构建对象 ............................. 299 11.1 对象的概念 ............................ 299 11.1.1 封装 .................................. 300 11.1.2 方法和属性 ...................... 300 11.1.3 事件 .................................. 301 11.1.4 可见性 .............................. 301 11.1.5 类的概念 .......................... 302 11.2 构建类 .................................... 302 11.3 重用性 .................................... 303 11.4 设计对象 ................................ 304 11.4.1 状态 .................................. 305 11.4.2 行为 .................................. 305 11.4.3 存储状态 .......................... 305 11.4.4 属性 .................................. 308 11.4.5 读/ 写属性 ......................... 311 11.4.6 IsMoving 方法 .................. 313 11.5 构造函数 ................................ 315 11.6 继承 ........................................ 317 11.6.1 添加新方法和属性 .......... 318 11.6.2 添加 GetPowerToWeightRatio 方法 ................................... 320 11.6.3 改变默认值 ...................... 321 11.6.4 多态性 .............................. 323 11.6.5 重写更多的方法 .............. 324 11.6.6 从对象类继承 .............. 326 11.7 对象和结构 ............................ 326 11.8 .NET Framework 类 ............... 326 11.8.1 名称空间 .......................... 327 11.8.2 Imports 语句 ..................... 328 11.8.3 创建自己的名称空间 ...... 329 11.8.4 .NET Framework 的继承 ............................... 331 11.9 小结 ........................................ 332 11.10 练习 ...................................... 332 第12章 面向对象的高级技术 .......... 333 12.1 构建收藏页浏览应用程序 .... 333 12.1.1 Internet 快捷方式和 收藏页 .............................. 333 12.1.2 使用类 ............................. 336 12.1.3 遍历收藏页 ..................... 341 12.1.4 查看收藏页 ..................... 347 12.2 另一个收藏页浏览应用 程序 ........................................ 349 12.2.1 构建收藏页的系统托盘 图标 ................................. 350 12.2.2 显示收藏页 ..................... 351 12.3 使用共享属性和方法 ............ 354 12.3.1 使用共享属性 ................. 355 12.3.2 使用共享方法 ................. 358 12.4 理解面向对象编程和内存 管理 ........................................ 360 12.4.1 垃圾回收 ......................... 361 12.4.2 释放资源 ......................... 361 12.4.3 整理碎片和压缩 ............. 362 12.5 小结 ........................................ 363 12.6 练习 ........................................ 364 第13章 建立类库 ............................ 365 13.1 理解类库 ................................ 365 13.1.1 创建类库 ......................... 366 13.1.2 为Favorites Viewer 项目 创建类库 .......................... 367 13.1.3 多层应用程序 ................. 370 13.2 使用强名 ................................ 371 13.2.1 对程序集签名 ................. 371 13.2.2 程序集的版本 ................. 373 13.3 注册程序集 ............................ 374 13.3.1 Gacutil 实用程序 ............. 374 13.3.2 程序集在References 对话框不可见的原因 ... 374 13.4 设计类库 ................................ 375 13.5 使用第三方类库 .................... 375 13.6 用对象浏览器查看类 ............ 376 13.7 小结 ........................................ 377 13.8 练习 ........................................ 378 目 录 XIII 第14章 创建Windows窗体用户 控件 ................................... 379 14.1 Windows 窗体控件 ................ 379 14.2 创建和测试用户控件 ............ 380 14.3 给用户控件添加属性、方法 和事件 .................................... 383 14.3.1 给用户控件添加属性 ...... 383 14.3.2 给用户控件添加方法 ...... 385 14.3.3 给用户控件添加事件 ...... 386 14.4 设计期间或运行期间 ............ 389 14.5 创建Command Link控件 ..... 391 14.5.1 创建Command Link 控件 .................................. 392 14.5.2 使用Command Link 控件 .................................. 399 14.6 小结 ........................................ 402 14.7 练习 ........................................ 402 第15章 访问数据库 ......................... 405 15.1 数据库的概念 ........................ 405 15.1.1 Microsoft Access 对象 ..... 406 15.1.2 表 ...................................... 406 15.1.3 查询 .................................. 406 15.2 SQL 的SELECT 语句 ....... 407 15.3 Access 的查询 .................... 408 15.4 数据访问组件和控件 ............ 412 15.4.1 DataSet 组件 .................... 412 15.4.2 DataGridView 控件 .......... 413 15.4.3 BindingSource 组件 ......... 413 15.4.4 BindingNavigator 控件 .... 413 15.4.5 TableAdapter 组件 ............ 413 15.5 数据绑定 ................................ 414 15.6 小结 ........................................ 419 15.7 练习 ........................................ 420 第16章 使用SQL Server和ADO.NET 进行数据库编程 .................. 421 16.1 ADO.NET .............................. 422 16.1.1 ADO.NET 数据名称 空间 .................................. 422 16.1.2 SqlConnection 类 ............. 423 16.1.3 SqlCommand类 .............. 425 16.1.4 SqlDataAdapter 类 ........... 427 16.1.5 DataSet 类 ........................ 431 16.1.6 DataView 类 .................... 431 16.2 使用ADO.NET类 ................. 433 16.3 数据绑定 ................................ 441 16.3.1 BindingContext 和 CurrencyManager对象 ... 441 16.3.2 绑定控件 ......................... 442 16.4 小结 ........................................ 468 16.5 练习 ........................................ 468 第17章 动态数据网站 ..................... 469 17.1 创建一个动态数据 LINQ to SQL 网站 ................ 469 17.2 定制动态数据网站的设计 .... 473 17.3 小结 ........................................ 478 17.4 练习 ........................................ 478 第18章 ASP.NET ........................ 479 18.1 瘦客户端体系结构 ................ 479 18.2 Web 窗体和Windows 窗体 的比较 .................................... 480 18.2.1 Windows 窗体的优点 ..... 480 18.2.2 Web 窗体的优点 ............. 481 18.3 Web 应用程序基础 ................ 481 18.3.1 Web 服务器 ..................... 482 18.3.2 浏览器 ............................. 482 18.3.3 HTML .............................. 482 18.3.4 JavaScript ......................... 482 18.3.5 CSS .................................. 482 18.4 关于ASP 页面 ....................... 483 18.4.1 ASP.NET Web 页面的 优点 .................................. 483 18.4.2 特殊的We b 站点文件 .... 483 18.4.3 开发方式 ......................... 483 18.4.4 工具箱 ............................. 484 18.5 构建Web 应用程序 ............... 484 18.5.1 为客户端和服务器端 处理创建We b 窗体 ......... 484 Visual Basic 2010 入门经典( 第6 版) XI V 18.5.2 Visual Studio 2010 We b 站点的位置 .............. 489 18.5.3 数据的输入和验证 .......... 491 18.5.4 设计布局、主题和导航 .... 496 18.5.5 使用GridView 构建数据 驱动的We b 窗体 ............. 501 18.6 小结 ........................................ 505 18.7 练习 ........................................ 506 第19章 Visual Basic 2010 和XML ... 507 19.1 了解XML .............................. 507 19.1.1 XML 简介 ........................ 508 19.1.2 向Visual Basic编程新手 介绍XML ......................... 510 19.1.3 规则 .................................. 510 19.2 地址簿项目 ............................ 510 19.2.1 创建项目 .......................... 511 19.2.2 SerializableData类 ........... 512 19.2.3 载入XML文件 ............... 517 19.2.4 修改数据 .......................... 519 19.2.5 发送email ........................ 520 19.2.6 创建地址列表 .................. 521 19.2.7 忽略成员 .......................... 525 19.2.8 载入地址 .......................... 527 19.2.9 添加新地址 ...................... 528 19.2.10 地址导航 ........................ 529 19.2.11 删除地址 ........................ 531 19.3 集成地址簿应用程序 ............ 533 19.3.1 集成规则 ......................... 533 19.3.2 从其他应用程序读取 地址簿 .............................. 534 19.4 小结 ........................................ 539 19.5 练习 ........................................ 540 第20章 部署应用程序 ..................... 541 20.1 部署简介 ................................ 541 20.1.1 ClickOnce 部署 ............... 542 20.1.2 XCOPY 部署 ................... 546 20.2 创建Visual Studio 2010 安装 程序 ........................................ 547 20.3 UI 编辑器 ............................... 550 20.4 部署不同的解决方案 ............ 553 20.4.1 私有程序集 ..................... 553 20.4.2 共享程序集 ..................... 554 20.4.3 部署桌面应用程序 ......... 554 20.4.4 部署Web 应用程序 ........ 554 20.4.5 部署XML Web服务 ....... 555 20.4.6 一些有用的工具 ............. 555 20.5 小结 ........................................ 555 20.6 练习 ........................................ 556 附录A 练习题答案 ........................... 557 附录B 如何深入学习 ....................... 569
      课程设计题目    学生成绩管理系统 课程设计的目的   理解面向对象的软件设计基本理论,学习VB软件设计的基本方法,熟悉一般软件项目开发的基本步骤,培养运用VB解决实际问题的能力和技巧。 课程设计的主要内容和要求(包括原始数据、技术参数、设计要求、工作量要求等) 四、工作进度安排 2011-2012学年第19周。 五、主要参考文献 Visual Basic程序设计教程 审核批准意见                                           系主任(签字)    年  月  日     指导教师评语及成绩 指 导 教 师 评 语                           成 绩                                    导师签字: 年 月 日                    设计思路及其创建过程    一、任务概述     简易学生成绩管理系统主要完成学生成绩的管理,包括:    1)、添加信息模块:主要完成学生记录、课程记录、学生成绩和用户记录的添加工作。    2)、删除信息模块:主要完成学生记录、课程记录、学生成绩和用户记录的删除工作。    3)、修改成绩模块:主要完成学生成绩的修改工作。    4)、查询模块:主要完成学生成绩的查询工作。    1.进行数据库设计     要编写一个实用的数据库程序,必须系统地学习过数据库原理的知识,并首先设计出符合用户业务需求的数据库体系,然后才能利用某种语言,开发出针对这个数据库的交互程序:数据库应用程序。    2. 程序的主要功能    利用SQL语句完成对学生成绩表的插入、修改、删除和查询操作。比如:    (1)插入记录:    Insert Into 学生成绩表(学号,课程号,成绩)    Values(‘001’,’001’,85)    (2)删除记录    Delete From 学生成绩表    Where 学号=‘001’ And 课程号=‘001’    (3)修改记录    Update 学生成绩表 set 成绩 =90    Where 学号=‘001’ And 课程号=‘001’    (4)按学号查询    Select * From 学生成绩表 Where 学号=‘001’    二、界面设计    1.创建工程    新建一“标准EXE”工程.工程名为“成绩查询”.    2.创建主窗体(frmMain)-MDI主窗体    设计菜单:    增加 删除 修改 查询 退出    增加学生记录 删除学生记录 修改成绩    增加课程记录 删除课程记录    增加成绩 删除成绩记录    增加用户 删除用户 3.创建新增学生记录窗体(frmAddStudent)-MDI子窗体 4、建新增课程记录窗体(frmAddCourse)-MDI子窗体 5.创建新增成绩记录窗体(frmAddGrade)-MDI子窗体 6.创建新增用户记录窗体(frmAddUser)-MDI子窗体 7. 创建修改记录窗体( frmUpdate )-MDI子窗体 8.创建删除学生记录窗体(frmDeleteStudent)-MDI子窗体 9.创建删除课程记录窗体(frmDeleteCourse)-MDI子窗体 10.创建删除成绩记录窗体(frmDeleteGrade)-MDI子窗体 11.创建删除用户窗体(frmDelete)-MDI子窗体 12.创建查询记录窗体(frmQuery)-MDI子窗体 13.创建身份验证窗体-MDI子窗体 1.3 代码设计 1. 连接数据库代码 步骤: (1)通过“工程—引用”菜单添加对象库: Microsoft Activex Data Objects 2.7 Library (Ado数据对象)。 (2)通过工程菜单添加一个标准模块(Module),并设计代码。 (3) 通过“工程—工程1属性”菜单,将主窗体(frmMain)MDIform1设置为启动对象。 添加标准模块代码: '声明全局对象变量ABOcn,用于创建于数据库的连接 Public ADOcn As New ADODB.Connection 添加主窗体初始化过程代码: Private Sub MDIForm_Initialize() ADOcn.ConnectionString = "Provider=SQLOLEDB.1;Password=;User ID=sa;Initial Catalog=成绩;Data Source= localhost;" If ADOcn.State = adStateClosed Then ADOcn.Open '打开到数据库的连接 End Sub 完成本项工作后,就创建了一个全局变量ADOcn,但它是一个特殊的变量,其数据类型是数据连接对象(Connection对象)。可以把ADDcn理解成是一个虚拟的数据库。或者称为VB程序的逻辑数据库,通过它可以非常方便地访问其的数据。换句话说,ADOcn是VB程序的后台数据库交互的通道。 2.设置窗体间的调用关系 2.设置窗体间的调用关系 ’调用增加课程窗体 Private Sub AddCourse_Click(Index As Integer) frmAddCourse.Show End Sub ’调用增加成绩窗体 Private Sub AddGrade_Click(Index As Integer) FrmAdd.Show End Sub ’调用增加学生窗体 Private Sub AddStudent_Click(Index As Integer) FrmAddStudent.Show End Sub ’调用增加用户窗体 Private Sub AddUser_Click() FrmAddUser.Show End Sub ’调用删除课程窗体 Private Sub DeleteCourse_Click() frmDeleteCourse.Show End Sub ’调用删除成绩窗体 Private Sub DeleteGrade_Click() frmDelete.Show End Sub ’调用删除学生窗体 Private Sub DeleteStudent_Click() frmDeleteStudent.Show End Sub ’调用删除用户窗体 Private Sub DeleteUser_Click() frmDeleteUser.Show End Sub ’调用学生基本信息查询窗体 Private Sub Querystudent_Click() frmQuerystudent.Show End Sub ’调用学生成绩查询窗体 Private Sub QueryGrade_Click() frmQueryGrade.Show End Sub’调用修改成绩窗体 Private Sub Update_Click() FrmUpdate.Show End Sub 调用退出程序 Private Sub Exit_Click() End End Sub 3.frmAddStudent (增加学生)窗体的代码设计: Private Sub Command1_Click() Dim ADOrs As New Recordset '声明一个记录集对象 Dim strSQL As String ADOrs.ActiveConnection = ADOcn '与ADOcn连接对象关联 If Text1.Text = "" Then MsgBox "未输入学号,请重新输入数据!", vbCritical + vbOKOnly Text1.SetFocus '定位光标 Exit Sub End If If Text2.Text = "" Then MsgBox "未输入姓名,请重新输入数据!", vbCritical + vbOKOnly Text2.SetFocus '定位光标 Exit Sub End If '首先查询表是否存在关键字相同的记录 strSQL = "select * from 学生情况表" strSQL = strSQL & " Where 学号='" + Text1.Text + " '" strSQL = strSQL & " and 姓名='" + Text2.Text + "'" ADOrs.Open strSQL '如果关键字重复,则退出 If Not ADOrs.EOF Then MsgBox "该记录已经存在,不能继续增加", vbCritical + vbOKOnly Exit Sub End If '拼写Insert插入语句 strSQL = "Insert Into 学生情况表(学号,姓名)" strSQL = strSQL + " Values('" + Text1.Text + "'," strSQL = strSQL + "'" + Text2.Text + "'" + ")" ADOcn.Execute strSQL '执行Insert语句 Text1.Text = "“ '初始化文本框控件 Text2.Text = "" Text1.SetFocus '定位光标 MsgBox "已成功添加新记录", vbQuestion + vbOKOnly ADOrs.Close '关闭记录集 Set ADOrs = Nothing End Sub Private Sub Command2_Click() Unload Me End Sub 4.frmAddCourse (增加课程)窗体的代码设计: (1)在Load事件,进行初始化工作,代码如下: Private Sub Form_Load() '初始化文本框控件 Text1.Text = "" Text2.Text = "" End Sub (2)’Command1_Click()(”确定”按钮)事件代码 Private Sub Command1_Click() Dim ADOrs As New Recordset '声明一个记录集对象 Dim strSQL As String '与ADOcn连接对象关联 ADOrs.ActiveConnection = ADOcn If Text1.Text = "" Then MsgBox "未输入课程号,请重新输入数据!", vbCritical + vbOKOnly Text1.SetFocus '定位光标 Exit Sub End If If Text2.Text = "" Then MsgBox "未输入课程名,请重新输入数据!", vbCritical + vbOKOnly Text2.SetFocus '定位光标 Exit Sub End If ’Command1_Click()(”确定”按钮)事件代码 '首先查询表是否存在关键字相同的记录 strSQL = "select * from 课程情况表" strSQL = strSQL & " Where 课程号='" + Text1.Text + " '" strSQL = strSQL & " and 课程名='" + Text2.Text + "'" ADOrs.Open strSQL '如果关键字重复,则退出 If Not ADOrs.EOF Then MsgBox "该记录已经存在,不能继续增加", vbCritical + vbOKOnly Exit Sub End If ’Command1_Click()(”确定”按钮)事件代码 '拼写Insert插入语句 strSQL = "Insert Into 学生情况表(学号,姓名)" strSQL = strSQL + " Values('" + Text1.Text + "'," strSQL = strSQL + "'" + Text2.Text + "'" + ")" ADOcn.Execute strSQL '执行Insert语句 Text1.Text = "“ '初始化文本框控件 Text2.Text = "" Text1.SetFocus '定位光标 MsgBox "已成功添加新记录", vbQuestion + vbOKOnly ADOrs.Close '关闭记录集 Set ADOrs = Nothing End Sub (3)’Command2_Click()(”返回”按钮)事件代码 Private Sub Command2_Click() Unload Me End Sub 5.frmAddGrade(增加成绩)窗体的代码设计: (1)在Load事件,进行初始化工作,代码如下: Private Sub Form_Load() Dim ADOrs As New Recordset '声明记录集对象 ADOrs.ActiveConnection = ADOcn '与ADOcn连接对象关联 '对Combo1组合框进行初始化 ADOrs.Open "Select 学号 From 学生情况表 Order By 学号" Combo1.Clear Do While Not ADOrs.EOF Combo1.AddItem Trim(ADOrs.Fields("学号")) '添加"学号"字段值 ADOrs.MoveNext '取下一条记录 Loop ADOrs.Close '关闭记录集 (1)Load事件代码 '对Combo2组合框进行初始化 ADOrs.Open "select 课程号 from 课程情况表 Order By 课程号" Combo2.Clear Do While Not ADOrs.EOF Combo2.AddItem Trim(ADOrs.Fields("课程号")) '添加"课程号"字段值 ADOrs.MoveNext '取下一条记录 Loop ADOrs.Close '关闭记录集 '初始化文本框控件 Text1.Text = "" Text2.Text = "" Text3.Text = "0" End Sub (2) Combo1_Click 事件代码 Private Sub Combo1_Click() Dim ADOrs As New Recordset '声明一个记录集对象 ADOrs.ActiveConnection = ADOcn '与ADOcn连接对象关联 '如果输入了学号,则把姓名显示在Text1.Text strSQL = "select * from 学生情况表" strSQL = strSQL + " Where 学号='" + Combo1.Text + " '" ADOrs.Open strSQL Text1.Text = ADOrs.Fields("姓名") ADOrs.Close '关闭记录集 Set ADOrs = Nothing End Sub (3) Combo2_Click 事件代码 Private Sub Combo2_Click() Dim ADOrs As New Recordset '声明一个记录集对象 ADOrs.ActiveConnection = ADOcn '与ADOcn连接对象关联 '如果输入了课程号,则把课程名显示在Text2.text strSQL = "select * from 课程情况表" strSQL = strSQL + " Where 课程号='" + Combo2.Text + " '" ADOrs.Open strSQL Text2.Text = ADOrs.Fields("课程名") ADOrs.Close '关闭记录集 Set ADOrs = Nothing End Sub (4) Command1_Click(确认) 事件代码 Private Sub Command1_Click() Dim strSQL As String Dim ADOrs As New Recordset '声明一个记录集对象 ADOrs.ActiveConnection = ADOcn '与ADOcn连接对象关联 '检查学号与课程号是否输入 If Combo1.Text = "" Or Combo2.Text = "" Then MsgBox "输入数据不全,请重新输入数据!", vbCritical + vbOKOnly Exit Sub End If '首先查询表是否存在关键字相同的记录 strSQL = "select * from 学生成绩表" strSQL = strSQL & " Where 学号='" + Combo1.Text + " '" strSQL = strSQL & " and 课程号='" + Combo2.Text + "'" ADOrs.Open strSQL '如果关键字重复,则退出 If Not ADOrs.EOF Then MsgBox "该记录已经存在,不能继续增加", vbCritical + vbOKOnly Exit Sub End If (4) Command1_Click(确认) 事件代码 '拼写Insert插入语句 strSQL = "Insert Into 学生成绩表(学号,课程号,成绩)" strSQL = strSQL + "Values('" + Combo1.Text + "','" strSQL = strSQL + Combo2.Text + "'," + Str(Val(Text3.Text)) + ")" ADOcn.Execute strSQL '执行Insert语句 MsgBox "已成功添加新记录", vbQuestion + vbOKOnly '初始化文本框控件 Text1.Text = "" Text2.Text = "" Text3.Text = "0" ADOrs.Close '关闭记录集 Set ADOrs = Nothing End Sub (5) Command2_Click(返回) 事件代码 Private Sub Command2_Click() Unload Me End Sub 6.frmAddUser(增加用户)代码设计 (1)在Load事件,进行初始化工作,代码如下: Private Sub Form_Load() '初始化文本框控件 Text1.Text = "" Text2.Text = "" Text3.Text = "" End Sub (2) Command1_Click(确认) 事件代码 Private Sub Command1_Click() Dim strSQL As String Dim ADOrs As New Recordset '声明一个记录集对象 ADOrs.ActiveConnection = ADOcn '与ADOcn连接对象关联 '记录已输入的用户信息 UserName = Text1.Text PaasWord = Text2.Text PaasWord1 = Text3.Text '若 Text1.Text 或Text2.Text或Text3.Text为空则提示用户重新输入 If Text1.Text = "" Or Text2.Text = "" Or Text3.Text = "" Then MsgBox "未输入用户名、密码或密码确认,请重新输入!", vbCritical + vbOKOnly Exit Sub End If '若 两此输入密码不一致则提示用户重新输入 If PaasWord PaasWord1 Then MsgBox "两次输入的密码不一致,请重新输入!", vbCritical + vbOKOnly Text2.Text = "" Text3.Text = "" Text2.SetFocus Exit Sub End If '首先查询用户是否存在相同的记录 strSQL = "Select * From 用户" strSQL = strSQL + " Where 用户名='" + UserName + "'" ADOrs.Open strSQL If Not ADOrs.EOF Then '如果关键字重复,则退出 MsgBox "该用户已经存在,请重新注册", vbCritical + vbOKOnly Exit Sub End If '拼写Insert插入语句 strSQL = "Insert Into 用户(用户名,密码)" strSQL = strSQL + " Values('" + UserName + "','" + PaasWord + "')" ADOcn.Execute strSQL '执行Insert语句 MsgBox "已成功添加新记录", vbQuestion + vbOKOnly ADOrs.Close '关闭记录集 Set ADOrs = Nothing End Sub (3) Command2_Click(返回) 事件代码 Private Sub Command2_Click() Unload Me End Sub 7.frmUpdata (修改成绩)窗体代码设计 (1)、在Load事件,进行初始化工作,代码如下: Private Sub Form_Load() Dim ADOrs As New Recordset '声明记录集对象 ADOrs.ActiveConnection = ADOcn '与ADOcn连接对象关联 '对Combo1组合框进行初始化 ADOrs.Open "Select 学号 From 学生情况表 Order By 学号" Combo1.Clear Do While Not ADOrs.EOF Combo1.AddItem Trim(ADOrs.Fields("学号")) '添加"学号"字段值 ADOrs.MoveNext '取下一条记录 Loop ADOrs.Close '关闭记录集 (1)、Form_Load()事件代码 '对Combo2组合框进行初始化 ADOrs.Open "select 课程号 from 课程情况表 Order By 课程号" Combo2.Clear Do While Not ADOrs.EOF Combo2.AddItem Trim(ADOrs.Fields("课程号")) '添加"课程号"字段值 ADOrs.MoveNext '取下一条记录 Loop ADOrs.Close '关闭记录集 '初始化文本框控件 Text1.Text = "" Text2.Text = "" Text3.Text = "0" End Sub (2) Combo1_Click 事件代码 Private Sub Combo1_Click() Dim ADOrs As New Recordset '声明一个记录集对象 ADOrs.ActiveConnection = ADOcn '与ADOcn连接对象关联 '如果输入了学号,则把姓名显示在Text1.Text strSQL = "select * from 学生情况表" strSQL = strSQL + " Where 学号='" + Combo1.Text + " '" ADOrs.Open strSQL Text1.Text = ADOrs.Fields("姓名") ADOrs.Close '关闭记录集 (2) Combo1_Click 事件代码 If Combo2 "" Then '输入完毕则显示成绩信息 '查询学生成绩表是否有指定指定学号与课程号的记录 strSQL = "select * from 学生成绩表" strSQL = strSQL & " Where 学号='" + Combo1.Text + " '" strSQL = strSQL & " and 课程号='" + Combo2.Text + "'" ADOrs.Open strSQL If ADOrs.EOF Then MsgBox "学生成绩表在不存在学号为" + Combo1.Text + "课程号为" + Combo2.Text + "的记录,请重新输入!", vbCritical + vbOKOnly Text1.Text = "" Text3.Text = "" Exit Sub Else Text3.Text = ADOrs.Fields("成绩") End If End If If ADOrs.State = adStateOpen Then ADOrs.Close '关闭记录集 Set ADOrs = Nothing End Sub (3) Combo2_Click 事件代码 Private Sub Combo2_Click() Dim ADOrs As New Recordset '声明一个记录集对象 ADOrs.ActiveConnection = ADOcn '与ADOcn连接对象关联 '如果输入了课程号,则把课程名显示在Text2.text strSQL = "select * from 课程情况表" strSQL = strSQL + " Where 课程号='" + Combo2.Text + " '" ADOrs.Open strSQL Text2.Text = ADOrs.Fields("课程名") ADOrs.Close '关闭记录集 (3) Combo2_Click 事件代码 If Combo1 "" Then '输入完毕则显示成绩信息 '查询学生成绩表是否有指定指定学号与课程号的记录 strSQL = "select * from 学生成绩表" strSQL = strSQL & " Where 学号='" + Combo1.Text + " '" strSQL = strSQL & " and 课程号='" + Combo2.Text + "'" ADOrs.Open strSQL If ADOrs.EOF Then MsgBox "学生成绩表在不存在学号为" + Combo1.Text + "课程号为" + Combo2.Text + "的记录,请重新输入!", vbCritical + vbOKOnly Text2.Text = "" Text3.Text = "" Exit Sub Else Text3.Text = ADOrs.Fields("成绩") End If End If If ADOrs.State = adStateOpen Then ADOrs.Close '关闭记录集 Set ADOrs = Nothing End Sub (4)、 Command1_Click()(修改/确认按钮)事件代码 Private Sub Command1_Click() Dim strSQL As String Dim ADOrs As New Recordset '声明一个记录集对象 ADOrs.ActiveConnection = ADOcn '与ADOcn连接对象关联 '检查学号与课程号是否输入 If Combo1.Text = "" Or Combo2.Text = "" Then MsgBox "输入数据不全,请重新输入数据!", vbCritical + vbOKOnly Exit Sub End If (4)、 Command1_Click()(修改/确认按钮)事件代码 '根据当前按钮文字的不同进行相关处理 If Command1.Caption = "修改" Then Command1.Caption = "确认" Command2.Caption = "放弃" Else Command1.Caption = "修改" Command2.Caption = "返回" '拼写Update语句,以便进行修改 strSQL = "Update 学生成绩表" strSQL = strSQL + " Set 成绩=" + Text3.Text strSQL = strSQL + " Where 学号='" + Combo1.Text + "'" strSQL = strSQL + " And 课程号='" + Combo2.Text + " '" ADOcn.Execute strSQL '执行Updata语句 MsgBox "修改成功!", vbQuestion + vbOKOnly End If If ADOrs.State = adStateOpen Then ADOrs.Close '关闭记录集 Set ADOrs = Nothing End Sub (5) Command2_Click(返回/放弃) 事件代码 Private Sub Command2_Click() If Command2.Caption = "返回" Then Unload Me Else Command2.Caption = "返回" Command1.Caption = "修改" End If End Sub 8.frmDeleteStudent (删除学生)窗体的代码设计 (1)、Form_Load()事件代码 Private Sub Form_Load() Dim ADOrs As New Recordset '声明记录集对象 ADOrs.ActiveConnection = ADOcn '与ADOcn连接对象关联 '对Combo1组合框进行初始化 ADOrs.Open "select 学号 from 学生情况表 Order By 学号" Combo1.Clear Do While Not ADOrs.EOF Combo1.AddItem Trim(ADOrs.Fields("学号")) '添加"学号"字段值 ADOrs.MoveNext '取下一条记录 Loop ADOrs.Close '关闭记录集 '对Combo2组合框进行初始化 ADOrs.Open "select 姓名 from 学生情况表 Order By 学号" Combo2.Clear Do While Not ADOrs.EOF Combo2.AddItem Trim(ADOrs.Fields("姓名")) '添加"姓名"字段值 ADOrs.MoveNext '取下一条记录 Loop ADOrs.Close '关闭记录集 End Sub (2) Combo1_Click 事件代码 Private Sub Combo1_Click() Dim ADOrs As New Recordset '声明一个记录集对象 ADOrs.ActiveConnection = ADOcn '与ADOcn连接对象关联 '若选择了学号则将姓名自动填写到Combo2.Text ADOrs.Open "Select 姓名 From 学生情况表 Where 学号 ='" + Combo1.Text + "'" If ADOrs.EOF Then MsgBox "学生情况表没有学号为" + Combo1.Text + "的记录,请重新输入!", vbQuestion + vbOKOnly Combo1.Text = "" Exit Sub Else Combo2.Text = ADOrs.Fields("姓名") End If ADOrs.Close '关闭记录集 End Sub (3) Combo2_Click 事件代码 Private Sub Combo2_Click() Dim ADOrs As New Recordset '声明一个记录集对象 ADOrs.ActiveConnection = ADOcn '与ADOcn连接对象关联 '若选择了姓名则将学号自动填写到Combo1.Text ADOrs.Open "Select 学号 From 学生情况表 Where 姓名 ='" + Combo2.Text + "'" If ADOrs.EOF Then MsgBox "学生情况表没有姓名为" + Combo2.Text + "的记录,请重新输入!", vbQuestion + vbOKOnly Combo1.Text = "" Exit Sub Else Combo1.Text = ADOrs.Fields("学号") End If ADOrs.Close '关闭记录集 End Sub (4)、 Command1_Click()(确定按钮)事件代码 Private Sub Command1_Click() Dim ADOrs As New Recordset '声明记录集对象 Dim ADOrs1 As New Recordset '声明记录集对象 ADOrs.ActiveConnection = ADOcn '与ADOcn连接对象关联 ADOrs1.ActiveConnection = ADOcn '与ADOcn连接对象关联 '若学号和姓名同时为空则提示用户重新输入 If Combo1.Text = "" And Combo2.Text = "" Then MsgBox "学号和姓名不能同时为空,请重新输入!", vbQuestion + vbOKOnly Exit Sub End If (4)、 Command1_Click()(确定按钮)事件代码 '若输入了学号则将姓名自动填写到Combo2.Text If Combo1.Text "" And Combo2.Text = "" Then ADOrs.Open "Select 姓名 From 学生情况表 Where 学号 ='" + Combo1.Text + "'" If ADOrs.EOF Then MsgBox "学生情况表没有学号为" + Combo1.Text + "的记录,请重新输入!", vbQuestion + vbOKOnly Combo1.Text = "" Exit Sub Else Combo2.Text = ADOrs.Fields("姓名") End If If ADOrs.State = adStateOpen Then ADOrs.Close '关闭记录集 End If (4)、 Command1_Click()(确定按钮)事件代码 '若输入了号姓名则将学号自动填写到Combo1.Text If Combo2.Text "" And Combo1.Text = "" Then ADOrs1.Open "Select 学号 From 学生情况表 Where 姓名='" + Combo2.Text + "'" If ADOrs1.EOF Then MsgBox "学生情况表没有姓名为" + Combo2.Text + "的记录,请重新输入!", vbQuestion + vbOKOnly Combo2.Text = "" Exit Sub Else Combo1.Text = ADOrs1.Fields("学号") End If If ADOrs1.State = adStateOpen Then ADOrs1.Close '关闭记录集 End If '查询学生情况表是否有指定学号和指定姓名的记录 If Combo1.Text "" And Combo2.Text "" Then ADOrs.Open "Select * From 学生情况表 Where 学号='" + Combo1.Text + "'" + " And 姓名='" + Combo2.Text + "'" If ADOrs.EOF Then MsgBox "学生情况表没有学号为" + Combo1.Text + "且姓名为" + Combo2.Text + "的记录,请重新输入!", vbQuestion + vbOKOnly Combo1.Text = "" Combo2.Text = "" Exit Sub Else Combo1.Text = ADOrs.Fields("学号") Combo2.Text = ADOrs.Fields("姓名") End If If ADOrs.State = adStateOpen Then ADOrs.Close '关闭记录集 End If End Sub (5)、 Command2_Click()(确认按钮)事件代码 Private Sub Command2_Click() Dim xm As String Dim xh As String Dim strSQL As String Dim ADOrs As New Recordset '声明记录集对象 ADOrs.ActiveConnection = ADOcn '与ADOcn连接对象关联 '如果学号与姓名同时为空则提示重新输入/选择 If Combo1.Text = "" Or Combo2.Text = "" Then MsgBox "学号和姓名不能为空,请重新输入!", vbQuestion + vbOKOnly Else xh = Combo1.Text xm = Combo2.Text If MsgBox("删除学号为" + xh + "姓名为" + xm + "的学生记录,该学生在学生成绩表的全部记录也将一起删除,是否继续?", vbQuestion + vbYesNo) = vbYes Then '拼写Delete学生成绩表指定记录语句 strSQL = "Delete From 学生成绩表" strSQL = strSQL + " Where 学号='" + Combo1.Text + "'" ADOcn.Execute strSQL '执行Delete语句 '拼写Delete学生情况表指定记录语句 strSQL = "Delete From 学生情况表" strSQL = strSQL + " Where 学号='" + Combo1.Text + "'" ADOcn.Execute strSQL '执行Delete语句 MsgBox "删除成功!", vbQuestion + vbOKOnly Combo1.Text = "" Combo2.Text = "" End If End If If ADOrs.State = adStateOpen Then ADOrs.Close '关闭记录集 End Sub (6)、 Command3_Click()(返回按钮)事件代码 Private Sub Command3_Click() Unload Me End Sub 9. frmDeleteCourse(删除课程)窗体代码设计 (1)、Form_Load()事件代码 Private Sub Form_Load() Dim ADOrs As New Recordset '声明记录集对象 ADOrs.ActiveConnection = ADOcn '与ADOcn连接对象关联 '对Combo1组合框进行初始化 ADOrs.Open "select 课程号 from 课程情况表 Order By 课程号" Combo1.Clear Do While Not ADOrs.EOF Combo1.AddItem Trim(ADOrs.Fields("课程号")) '添加"课程号"字段值 ADOrs.MoveNext '取下一条记录 Loop ADOrs.Close '关闭记录集 '对Combo2组合框进行初始化 ADOrs.Open "select 课程名 from 课程情况表 Order By 课程号" Combo2.Clear Do While Not ADOrs.EOF Combo2.AddItem Trim(ADOrs.Fields("课程名")) '添加"课程名"字段值 ADOrs.MoveNext '取下一条记录 Loop ADOrs.Close '关闭记录集 End Sub (2) Combo1_Click 事件代码 Private Sub Combo1_Click() Dim ADOrs As New Recordset '声明一个记录集对象 ADOrs.ActiveConnection = ADOcn '与ADOcn连接对象关联 '若选择了课程号则将课程名自动填写到Combo2.Text ADOrs.Open "Select 课程名 From 课程情况表 Where 课程号 ='" + Combo1.Text + "'" If ADOrs.EOF Then MsgBox "课程情况表没有课程号为" + Combo1.Text + "的记录,请重新输入!", vbQuestion + vbOKOnly Combo1.Text = "" Exit Sub Else Combo2.Text = ADOrs.Fields("课程名") End If ADOrs.Close '关闭记录集 End Sub (3) Combo2_Click 事件代码 Private Sub Combo2_Click() Dim ADOrs As New Recordset '声明一个记录集对象 ADOrs.ActiveConnection = ADOcn '与ADOcn连接对象关联 '若选择了课程名则将课程号自动填写到Combo1.Text ADOrs.Open "Select 课程号 From 课程情况表 Where 课程名 ='" + Combo2.Text + "'" If ADOrs.EOF Then MsgBox "课程情况表没有课程名为" + Combo2.Text + "的记录,请重新输入!", vbQuestion + vbOKOnly Combo1.Text = "" Exit Sub Else Combo1.Text = ADOrs.Fields("课程号") End If ADOrs.Close '关闭记录集 End Sub (4)、 Command1_Click()(确定按钮)事件代码 Private Sub Command1_Click() Dim ADOrs As New Recordset '声明记录集对象 Dim ADOrs1 As New Recordset '声明记录集对象 ADOrs.ActiveConnection = ADOcn '与ADOcn连接对象关联 ADOrs1.ActiveConnection = ADOcn '与ADOcn连接对象关联 '若课程号和课程名同时为空则提示用户重新输入 If Combo1.Text = "" And Combo2.Text = "" Then MsgBox "课程号和课程名不能同时为空,请重新输入!", vbQuestion + vbOKOnly Exit Sub End If (4)、 Command1_Click()(确定按钮)事件代码 '若输入了课程号则将课程名自动填写到Combo2.Text If Combo1.Text "" And Combo2.Text = "" Then ADOrs.Open "Select 课程名 From 课程情况表 Where 课程号 ='" + Combo1.Text + "'" If ADOrs.EOF Then MsgBox "课程情况表没有课程号为" + Combo1.Text + "的记录,请重新输入!", vbQuestion + vbOKOnly Combo1.Text = "" Exit Sub Else Combo2.Text = ADOrs.Fields("课程名") End If If ADOrs.State = adStateOpen Then ADOrs.Close '关闭记录集 End If (4)、 Command1_Click()(确定按钮)事件代码 '若输入了课程名则将课程号自动填写到Combo1.Text If Combo2.Text "" And Combo1.Text = "" Then ADOrs1.Open "Select 课程号 From 课程情况表 Where 课程名='" + Combo2.Text + "'" If ADOrs1.EOF Then MsgBox "课程情况表没有课程名为" + Combo2.Text + "的记录,请重新输入!", vbQuestion + vbOKOnly Combo2.Text = "" Exit Sub Else Combo1.Text = ADOrs1.Fields("课程号") End If If ADOrs1.State = adStateOpen Then ADOrs1.Close '关闭记录集 End If (4)、 Command1_Click()(确定按钮)事件代码 '查询课程情况表是否有指定课程号和指定课程名的记录 If Combo1.Text "" And Combo2.Text "" Then ADOrs.Open "Select * From 课程情况表 Where 课程号='" + Combo1.Text + "'" + " And 课程名='" + Combo2.Text + "'" If ADOrs.EOF Then MsgBox "课程情况表没有课程号为" + Combo1.Text + "且课程名为" + Combo2.Text + "的记录,请重新输入!", vbQuestion + vbOKOnly Combo1.Text = "" Combo2.Text = "" Exit Sub Else Combo1.Text = ADOrs.Fields("课程号") Combo2.Text = ADOrs.Fields("课程名") End If If ADOrs.State = adStateOpen Then ADOrs.Close '关闭记录集 End If End Sub (5)、 Command2_Click()(确认按钮)事件代码 Private Sub Command2_Click() Dim xm As String Dim xh As String Dim strSQL As String Dim ADOrs As New Recordset '声明记录集对象 ADOrs.ActiveConnection = ADOcn '与ADOcn连接对象关联 '如果课程号与课程名同时为空则提示重新输入/选择 If Combo1.Text = "" Or Combo2.Text = "" Then MsgBox "课程号和课程名不能为空,请重新输入!", vbQuestion + vbOKOnly Else xh = Combo1.Text xm = Combo2.Text If MsgBox("删除课程号为" + xh + "课程名为" + xm + "的课程记录,该课程在学生成绩表的全部记录也将一起删除,是否继续?", vbQuestion + vbYesNo) = vbYes Then (5)、 Command2_Click()(确认按钮)事件代码 '拼写Delete学生成绩表指定记录语句 strSQL = "Delete From 学生成绩表" strSQL = strSQL + " Where 课程号='" + Combo1.Text + "'" ADOcn.Execute strSQL '执行Delete语句 '拼写Delete课程情况表指定记录语句 strSQL = "Delete From 课程情况表" strSQL = strSQL + " Where 课程号='" + Combo1.Text + "'" ADOcn.Execute strSQL '执行Delete语句 MsgBox "删除成功!", vbQuestion + vbOKOnly Combo1.Text = "" Combo2.Text = "" End If End If If ADOrs.State = adStateOpen Then ADOrs.Close '关闭记录集 End Sub (6)、 Command3_Click()(返回按钮)事件代码 Private Sub Command3_Click() Unload Me End Sub 10. frmDeleteGrade (删除成绩)窗体代码设计 (1)、Form_Load()事件代码 Private Sub Form_Load() Dim ADOrs As New Recordset '声明记录集对象 ADOrs.ActiveConnection = ADOcn '与ADOcn连接对象关联 '对Combo1组合框进行初始化 ADOrs.Open "Select 学号 From 学生情况表 Order By 学号" Combo1.Clear Do While Not ADOrs.EOF Combo1.AddItem Trim(ADOrs.Fields("学号")) '添加"学号"字段值 ADOrs.MoveNext '取下一条记录 Loop ADOrs.Close '关闭记录集 '对Combo2组合框进行初始化 ADOrs.Open "select 课程号 from 课程情况表 Order By 课程号" Combo2.Clear Do While Not ADOrs.EOF Combo2.AddItem Trim(ADOrs.Fields("课程号")) '添加"课程号"字段值 ADOrs.MoveNext '取下一条记录 Loop ADOrs.Close '关闭记录集 'End Sub (2) Combo1_Click 事件代码 Private Sub Combo1_Click() Dim ADOrs As New Recordset '声明一个记录集对象 ADOrs.ActiveConnection = ADOcn '与ADOcn连接对象关联 '如果输入了学号,则把姓名显示在Text1.Text strSQL = "select * from 学生情况表" strSQL = strSQL + " Where 学号='" + Combo1.Text + " '" ADOrs.Open strSQL Text1.Text = ADOrs.Fields("姓名") ADOrs.Close '关闭记录集 (2) Combo1_Click 事件代码(续) If Combo2 "" Then '输入完毕则显示成绩信息 '查询学生成绩表是否有指定指定学号与课程号的记录 strSQL = "select * from 学生成绩表" strSQL = strSQL & " Where 学号='" + Combo1.Text + " '" strSQL = strSQL & " and 课程号='" + Combo2.Text + "'" ADOrs.Open strSQL If ADOrs.EOF Then MsgBox "学生成绩表在不存在学号为" + Combo1.Text + "课程号为" + Combo2.Text + "的记录,请重新输入!", vbCritical + vbOKOnly Text1.Text = "" Text3.Text = "" Exit Sub Else Text3.Text = ADOrs.Fields("成绩") End If End If If ADOrs.State = adStateOpen Then ADOrs.Close '关闭记录集 Set ADOrs = Nothing End Sub (3) Combo2_Click 事件代码 Private Sub Combo2_Click() Dim ADOrs As New Recordset '声明一个记录集对象 ADOrs.ActiveConnection = ADOcn '与ADOcn连接对象关联 '如果输入了课程号,则把课程名显示在Text2.text strSQL = "select * from 课程情况表" strSQL = strSQL + " Where 课程号='" + Combo2.Text + " '" ADOrs.Open strSQL Text2.Text = ADOrs.Fields("课程名") ADOrs.Close '关闭记录集 (3) Combo2_Click 事件代码(续) If Combo1 "" Then '输入完毕则显示成绩信息 '查询学生成绩表是否有指定指定学号与课程号的记录 strSQL = "select * from 学生成绩表" strSQL = strSQL & " Where 学号='" + Combo1.Text + " '" strSQL = strSQL & " and 课程号='" + Combo2.Text + "'" ADOrs.Open strSQL If ADOrs.EOF Then MsgBox "学生成绩表在不存在学号为" + Combo1.Text + "课程号为" + Combo2.Text + "的记录,请重新输入!", vbCritical + vbOKOnly Text2.Text = "" Text3.Text = "" Exit Sub Else Text3.Text = ADOrs.Fields("成绩") End If End If If ADOrs.State = adStateOpen Then ADOrs.Close '关闭记录集 Set ADOrs = Nothing End Sub (4)、 Command1_Click()(确定按钮)事件代码 Private Sub Command1_Click() Dim strSQL As String Dim ADOrs As New Recordset '声明一个记录集对象 ADOrs.ActiveConnection = ADOcn '与ADOcn连接对象关联 Dim ADOrs1 As New Recordset '声明一个记录集对象 ADOrs1.ActiveConnection = ADOcn '与ADOcn连接对象关联 Dim ADOrs2 As New Recordset '声明一个记录集对象 ADOrs2.ActiveConnection = ADOcn '与ADOcn连接对象关联 ‘如果学号为空则提示用户重新输入 If Combo1.Text = "" Then MsgBox "学号不能为空,请重新输入!", vbQuestion + vbOKOnly Combo1.Text = "" Text1.Text = "" Exit Sub End If (4)、 Command1_Click()(确定按钮)事件代码---续 '如果课程号为空则提示拥护重新输入 If Combo2.Text = "" Then MsgBox "课程号不能为空,请重新输入!", vbQuestion + vbOKOnly Combo2.Text = "" Text2.Text = "" Exit Sub End If '查询学生情况表是否有指定学号的记录 If Combo1.Text "" Then ADOrs1.Open "Select 姓名 From 学生情况表 Where 学号='" + Combo1.Text + "'" If ADOrs1.EOF Then MsgBox “学生情况表没有学号为” + Combo1.Text + “的记录,请重新输入!”, vbQuestion + vbOKOnly Combo1.Text = "" Text1.Text = "" Exit Sub Else '若有指定学号的学生记录,则将姓名字段值填写到text1 Text1.Text = ADOrs1.Fields("姓名") End If End If '查询课程情况表是否有指定课程号的记录 If Combo2.Text "" Then ADOrs2.Open "Select 课程名 From 课程情况表 Where 课程号='" + Combo2.Text + "'" If ADOrs2.EOF Then MsgBox "课程情况表没有课程号为" + Combo2.Text + "的记录,请重新输入!", vbQuestion + vbOKOnly Combo2.Text = "" Text2.Text = "" Exit Sub Else '若有指定课程号的课程记录,则将课程名字段值填写到text2 Text2.Text = ADOrs2.Fields("课程名") End If End If '查询学生表是否有指定学号与课程号的记录 If Combo1 "" And Combo1 "" Then strSQL = "select * from 学生成绩表" strSQL = strSQL & " Where 学号='" + Combo1.Text + " '" strSQL = strSQL & " and 课程号='" + Combo2.Text + "'" ADOrs.Open strSQL If ADOrs.EOF Then MsgBox "学生成绩表在不存在学号为" + Combo1.Text + "课程号为" + Combo2.Text + "的记录,请重新输入!", vbCritical + vbOKOnly Combo1.Text = "" Combo2.Text = "" Text1.Text = "" Text2.Text = "" Text3.Text = "" Exit Sub Else Text3.Text = Val(ADOrs.Fields("成绩")) End If End If End Sub 5)、 Command2_Click()(确认按钮)事件代码 Private Sub Command2_Click() If MsgBox("是否要删除学号为" + Combo1.Text + "课程号为" + Combo2.Text + "的成绩记录?", vbQuestion + vbYesNo) = vbYes Then '拼写Delete语句 strSQL = "Delete From 学生成绩表" strSQL = strSQL + " Where 学号='" + Combo1.Text + "'" strSQL = strSQL + " And 课程号='" + Combo2.Text + "'" ADOcn.Execute strSQL '执行Delete语句 Combo1.Text = "" Combo2.Text = "" Text1.Text = "" Text2.Text = "" Text3.Text = "" MsgBox "删除成功!", vbQuestion + vbOKOnly End If End Sub (6)、 Command3_Click()(返回按钮)事件代码 Private Sub Command3_Click() Unload Me End Sub 11. frmDeleteUser(删除用户)窗体代码设计 (1)、 Command1_Click()(确定按钮)事件代码 Private Sub Command1_Click() '定义变量,建立与数据库的连接 Dim strSQL As String Dim ADOrs2 As New Recordset ADOrs2.ActiveConnection = ADOcn If Trim(Text1.Text) = "" Then MsgBox "请输入用户名!", , "删除用户" Text1.SetFocus Exit Sub End If If Trim(Text2.Text) = "" Then MsgBox "请输入用户密码!", , "删除用户" Text2.SetFocus Exit Sub End If '查询是否有指定用户名和密码的记录 ADOrs2.Open "Select * From 用户 Where 用户名='" + Text1.Text + "'" + " And 密码='" + Text2.Text + "'" If ADOrs2.EOF Then MsgBox "用户没有名为:" + Text1.Text + " 密码为:" + Text2.Text + "的记录,请重新输入!", vbQuestion + vbOKOnly Text1.Text = "" Text2.Text = "" Text1.SetFocus Else If MsgBox("是否删除用户名为“" + Text1.Text + "”密码为“" + Text2.Text + "”的用户记录?", vbQuestion + vbYesNo) = vbYes Then '拼写Delete用户指定记录语句 strSQL = "Delete From 用户 Where 用户名='" + Text1.Text + "'" + " And 密码='" + Text2.Text + "'" ADOcn.Execute strSQL '执行Delete语句 MsgBox "删除成功!", vbQuestion + vbOKOnly Text1.Text = "" Text2.Text = "" Text1.SetFocus End If End If End Sub (2)、 Command2_Click()(返回按钮)事件代码 Private Sub Command2_Click() Unload Me End Sub 12. frmQuerystudent(学生基本信息查询)窗体代码设计 使用ado数据控件与DataGrid数据绑定控件实现 (1)、Form_Load()事件代码 Private Sub Form_Load() Combo1.Text = "全部学生" '默认查询全部学生 Label2.Caption = "全部学生数据浏览表格:" Label1.Visible = False Text1.Visible = False End Sub 说明:这里使用ado数据控件adodc1与DataGrid数据绑定控件DataGrid1,并已设置好adodc属性---查询数据库的表格(学生情况表)。 (2) Combo1_Click 事件代码 Private Sub Combo1_Click() Select Case Combo1.ListIndex '根据选择的组合框项进行处理 Case 0 '选择“全部学生”时隐藏提示信息 strSQL = "select * from 学生情况表" Adodc1.CommandType = adCmdText Adodc1.RecordSource = strSQL Adodc1.Refresh Label2.Caption = "全部学生数据浏览表格:“ DataGrid1.Visible = True Label1.Visible = False Text1.Visible = False Case 1 '选择“按学号查询”时给出提示并定位光标 Label1.Visible = True Text1.Visible = True Text1.SetFocus Label1.Caption = "请输入学号并按回车键确认:" Case 2 '选择“按姓名查询”时给出提示并定位光标 Label1.Visible = True Text1.Visible = True Text1.SetFocus Label1.Caption = "请输入姓名并按回车键确认:" End Select End Sub (3) Text1_KeyPress 事件代码 Private Sub Text1_KeyPress(KeyAscii As Integer) Dim atrsql As String If KeyAscii = 13 Then Select Case Combo1.ListIndex '根据选择的组合框项进行处理 Case 1 '选择“按学号查询”时 strSQL = "select * from 学生情况表 where 学号='" & Trim(Text1.Text) & "'" Adodc1.CommandType = adCmdText Adodc1.RecordSource = strSQL Adodc1.Refresh If Adodc1.Recordset.EOF Then '没有找到时 Label2.Caption = "" DataGrid1.Visible = False MsgBox "没有该生记录信息,请检查你输入的学号是否正确!" Else '找到时 Label2.Caption = "学号为" & Text1.Text & "的学生数据浏览表格:" DataGrid1.Visible = True End If Text1.Text = "" Case 2 '选择“按姓名查询”时 strSQL = "select * from 学生情况表 where 姓名='" & Trim(Text1.Text) & "'" Adodc1.CommandType = adCmdText Adodc1.RecordSource = strSQL Adodc1.Refresh If Adodc1.Recordset.EOF Then '没有找到时 Label2.Caption = "" DataGrid1.Visible = False MsgBox "没有该生记录信息,请检查你输入的姓名是否正确!" Else '找到时 Label2.Caption = "姓名为" & Text1.Text & "的学生数据浏览表格:" DataGrid1.Visible = True End If Text1.Text = "" End Select End If End Sub (4) Command1_Click(返回按钮)事件代码 Private Sub Command1_Click() Unload Me End Sub 13. frmQueryGrade(学生成绩查询)窗体代码设计 使用MSFlexGrid1控件(编程模型)实现 (1)、Form_Load()事件代码 Private Sub Form_Load() Dim ADOrs As New Recordset '声明一个记录集对象 ADOrs.ActiveConnection = ADOcn '与ADOcn连接对象关联 MSFlexGrid1.Visible = False '隐藏MSFlexGrid1控件 '对Combo1组合框进行初始化 ADOrs.Open "select 学号 from 学生情况表 Order By 学号" Combo1.Clear Do While Not ADOrs.EOF Combo1.AddItem Trim(ADOrs.Fields("学号")) '添加"学号"字段值 ADOrs.MoveNext '取下一条记录 Loop ADOrs.Close '关闭记录集对象 Text1.Text = "" End Sub (2) Combo1_Click 事件代码 Private Sub Combo1_Click() Dim ADOrs As New Recordset '声明一个记录集对象 ADOrs.ActiveConnection = ADOcn '与ADOcn连接对象关联 '若选择了学号则将姓名自动填写到text1 ADOrs.Open "Select 姓名 From 学生情况表 Where 学号 ='" & Combo1.Text & "'" If ADOrs.EOF Then MsgBox "学生情况表没有学号为" & Combo1.Text & "的记录,请重新输入!", vbQuestion & vbOKOnly Text1.Text = "" Else Text1.Text = ADOrs.Fields("姓名") End If ADOrs.Close '关闭记录集 End Sub (3) Command1_Click(确定按钮)事件代码 Private Sub Command1_Click() Dim strSQL As String, strSQL2 As String Dim strRecord As String Dim ADOrs As New Recordset '声明记录集对象 Dim ADOrs2 As New Recordset ADOrs.ActiveConnection = ADOcn '与ADOcn连接对象关联 ADOrs2.ActiveConnection = ADOcn strSQL = "select * from 学生情况表 Where 学号='" & Combo1.Text & " '" ADOrs.Open strSQL If ADOrs.EOF Then MsgBox ("数据库找不到学号为" & Combo1.Text & "的记录,请重新输入!") Combo1.Text = "" Text1.Text = "" Else Text1.Text = ADOrs.Fields("姓名") End If '拼写Select语句 strSQL2 = "Select 学生成绩表.学号,学生成绩表.课程号,学生成绩表.成绩," strSQL2 = strSQL2 & "学生情况表.姓名,课程情况表.课程名" strSQL2 = strSQL2 & " From 学生成绩表,学生情况表,课程情况表" strSQL2 = strSQL2 & " Where 学生成绩表.学号=学生情况表.学号" strSQL2 = strSQL2 & " And 学生成绩表.课程号=课程情况表.课程号" strSQL2 = strSQL2 & " And 学生成绩表.学号= '" & Combo1.Text & "'" ADOrs2.Open strSQL2 '执行Select语句 If ADOrs2.EOF = True Then MSFlexGrid1.Visible = False '隐藏MSFlexGrid1控件 MsgBox "没有该生成绩!" Else '初始化MSFlexGrid表格 MSFlexGrid1.Rows = 0 '行数 MSFlexGrid1.Cols = 5 '列数 MSFlexGrid1.ColWidth(3) = 1500 '调节第4列宽度 MSFlexGrid1.Visible = True '显示MSFlexGrid1控件 '设置表格标题栏 strRecord = "学号" & vbTab & "姓名" & vbTab & "课程号" strRecord = strRecord & vbTab & "课程名" & vbTab & "成绩" MSFlexGrid1.AddItem strRecord '从第一条记录开始循环,直至表尾,填写表格内容 Do While Not ADOrs2.EOF '拼写表格内容 strRecord = Trim(ADOrs2.Fields("学号")) & vbTab & Trim(ADOrs2.Fields("姓名")) & vbTab strRecord = strRecord & Trim(ADOrs2.Fields("课程号")) & vbTab & Trim(ADOrs2.Fields("课程名")) strRecord = strRecord & vbTab & Trim(Str(ADOrs2.Fields("成绩"))) MSFlexGrid1.AddItem strRecord '向表格内添加行 ADOrs2.MoveNext '取下一条记录 Loop End If ADOrs.Close '关闭记录集对象 ADOrs2.Close '释放记录集对象 Set ADOrs = Nothing Set ADOrs2 = Nothing End Sub (4) Command2_Click(返回按钮)事件代码 Private Sub Command2_Click() Unload Me End Sub 14.身份验证窗体(frmlogin)代码设计 1)、Form_Initialize()事件代码 Private Sub Form_Initialize() ADOcn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=成绩.MDB" If ADOcn.State = adStateClosed Then ADOcn.Open '打开到数据库的连接 End Sub 2)、Command1_Click()事件代码—登录按钮 Private Sub Command1_Click() Dim ADOrs As New Recordset '声明记录集对象 Dim strSQL As String ADOrs.ActiveConnection = ADOcn '与连接对象adocn关联 If Trim(Text1.Text) = "" Or Trim(Text2.Text) = "" Then '检验用户名与密码为空否 MsgBox "帐号和密码不能为空,请重新填写", vbOKOnly + vbInformation Exit Sub End If strSQL = "select * from 用户 where 用户名='" + Trim(Text1.Text) + "'" ADOrs.Open strSQL '按用户名查询 If ADOrs.EOF Then '找不到该用户 MsgBox "用户不存在", vbCritical + vbOKOnly Text1.Text = "" Text1.SetFocus Exit Sub ElseIf Trim(Text2.Text) ADOrs.Fields(“密码”) Then ‘找到用户后检验密码 MsgBox "密码不正确", vbOKOnly + vbInformation Text2.Text = "" Text2.SetFocus Exit Sub End If '用户登录成功,记录用户类型参数 usertype = ADOrs.Fields("用户类型") Unload Me MDIForm1.Show '登录成功,打开MDI主窗体 ADOrs.Close Set ADOrs = Nothing End Sub 3)、Command2_Click()事件代码—退出按钮 Private Sub Command2_Click() ADOcn.Close Set ADOcn = Nothing Unload Me End Sub 4)、登录成功并打开MDI主窗体后,应根据人员类型设置菜单权限 Private Sub MDIForm_Load() '根据人员类型设置菜单权限 Select Case usertype 'Case "管理员" Case "查询人员" addmenu.Enabled = False deletemenu.Enabled = False Updata.Enabled = False End Select End Sub 1.4 其他 一、用户自定义函数的使用 1、初始化窗体大小及显示座标函数 Public Sub init(frmname As Object, X As Integer, Y As Integer) frmname.Width = X frmname.Height = Y frmname.Left = (MDIForm1.Width - frmname.Width) / 2 frmname.Top = (MDIForm1.Height - frmname.Height) / 2 End Sub 2、校验输入的文本框字符是否为数字或backspace回格键函数 ,’如果是则返回true,否则返回false Public Function in_int(KeyAscii As Integer) As Boolean Dim Accept_int(10) As String '可接受的字符数组 Accept_int(0) = "0" Accept_int(1) = "1" Accept_int(2) = "2" Accept_int(3) = "3" Accept_int(4) = "4" Accept_int(5) = "5" Accept_int(6) = "6" Accept_int(7) = "7" Accept_int(8) = "8" Accept_int(9) = "9" Accept_int(10) = Chr(8) 'Chr(8)是backspace键对应的字符 in_int = False For i = 1 To 10 '检查输入的字符是否在数组 If Chr(KeyAscii) = Accept_int(i) Then in_int = True End If Next i End Function
一个可以显示历史的菜单 Option Explicit Dim main As New main_frm Public max_index As Integer Public myindex As Integer Private Sub close_Click() On Error Resume Next '循环语句 For Each main In Forms If main.MDIChild = True Then Unload main End If Next Dim FNum As Integer Dim strfilename As String Dim i As Integer FNum = FreeFile strfilename = App.Path & "\cdxx.ini" If Dir(strfilename) <> "" Then Kill strfilename Open strfilename For Output As #FNum For i = 1 To mnufilelist.Count - 1 Print #FNum, mnufilelist(i).Caption Next Close #FNum Exit Sub End Sub Private Sub MDIForm_Load() Dim file As Long Dim mystring As String Dim s As String Dim strfilename As String strfilename = App.Path & "\cdxx.ini" file = FreeFile() On Error Resume Next Open strfilename For Input As #file '打开文件菜单列表 Do While Not EOF(file) Line Input #file, mystring If mystring <> "" Then max_index = max_index + 1 Load mnufilelist(max_index) mnufilelist(max_index).Caption = mystring mnufilelist(max_index).Visible = True End If Loop Close #file '关闭文件菜单列表 End Sub Private Sub MDIForm_Unload(Cancel As Integer) close_Click End Sub Private Sub mnufilelist_Click(Index As Integer) If mnufilelist(Index).Caption <> "" Then Static i As Integer If i < 1 Then i = 1 main_frm.Visible = False Dim main As New main_frm main.Caption = mnufilelist(Index).Caption i = i + 1 main.Picture = LoadPicture(mnufilelist(Index).Caption) main.Show End If End Sub Private Sub open_Click() '打开带图形的窗体 CommonDialog1.Filter = "所有图形文件" & "|*.jpg; *.bmp ; *.ico ;*.gif;*.cur" CommonDialog1.ShowOpen Static i As Integer If i < 1 Then i = 1 main_frm.Visible = False Dim main As New main_frm main.Caption = CommonDialog1.FileName i = i + 1 main.Picture = LoadPicture(CommonDialog1.FileName) main.Show max_index = mnufilelist.Count Load mnufilelist(max_index) mnufilelist(max_index).Caption = CommonDialog1.FileName mnufilelist(max_index).Visible = True End Sub Private Sub exit_Click() close_Click End End Sub

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧