执行Recordset的Open时,select语句中写上字段名就出错,字段名写*就OK?在线

我才是蝙蝠侠 2003-05-13 05:41:45
语句如下:
_RecordsetPtr OpenSql(
LPCTSTR TblName, LPCTSTR FldList/* = _T( "*" )*/,
LPCTSTR Constr/* = _T( "" )*/, LPCTSTR OrderBy/* = _T( "" )*/ )
{
ASSERT( m_pConnection != NULL );
//组合SELECT语句
TCHAR sqlstr[256];
lstrcpy( sqlstr, _T( "SELECT " ) );
lstrcat( sqlstr, FldList );
lstrcat( sqlstr, _T( " FROM " ) );
lstrcat( sqlstr, TblName );
lstrcat( sqlstr, _T( " " ) );
lstrcat( sqlstr, Constr );
lstrcat( sqlstr, _T( " " ) );
lstrcat( sqlstr, OrderBy );
if( IsOpen() )
{
m_pRecordset->Close();
}
m_pRecordset->Open(
(_variant_t)sqlstr, m_pConnection.GetInterfacePtr(),
adOpenStatic, adLockOptimistic, adCmdText );
return m_pRecordset;
}

此处如果FldList不为“*”,则Open肯定执行出错。
...全文
29 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
edrftgyh 2003-05-14
  • 打赏
  • 举报
回复
比如说你这个语句合并后可能变成SELECTFldList FROM.....了,这样就会有问题了啊!
edrftgyh 2003-05-14
  • 打赏
  • 举报
回复
是不是你用
lstrcpy( sqlstr, _T( "SELECT " ) );
lstrcat( sqlstr, FldList );
lstrcat( sqlstr, _T( " FROM " ) );
lstrcat( sqlstr, TblName );
lstrcat( sqlstr, _T( " " ) );
lstrcat( sqlstr, Constr );
lstrcat( sqlstr, _T( " " ) );
lstrcat( sqlstr, OrderBy );
生成SQL语句的时候,关键字与表名称之间没有空格键啊!而如果是*则没有这个问题!
丁淇石头 2003-05-14
  • 打赏
  • 举报
回复
可以先将语句简单的测试一下,不要写的这么复杂,可先直接写为:
sqlstr.Format("select * from Tb1Name"); //先测试最简单的
sqlstr.Format("select ??? from Tb1Name"); //???为字段名,有可能需要区分大小写
上述写法一般是可以的,成功后再写ORDER BY 等内容。
Againstwind 2003-05-14
  • 打赏
  • 举报
回复
数据库是SQL Server吗?
如果是,执行的时候用Profiler追踪实际执行的SQL语句不就知道究竟为什麽了吗!直接执行SQL语句肯定是没有错的。
同意1楼的观点,先把SQL语句格式化好,再传入比较好的。
天限天空 2003-05-14
  • 打赏
  • 举报
回复
up
EXCEL里使用SQL的方法(欢乐小爪原创) 急用EXCEL的SQL用法,抄来欢乐小爪几篇文章,支持原创,留下小爪印:http://hi.baidu.com/huanhuanxiaozhua/blog EXCEL(VBA)~SQL 经典法范本汇集(一) 2007-12-10 21:20 编前话:为了更系统的学习sql语句,小爪首次系统的汇集sql 需引用 microsoft activeX Data Objects 2.8 library 1.sql = "select 构件名称,构件代号,横长度,横数量,竖长度,竖数量,比重,相应工艺 from [参数$B2:K1916]where (大样代码='" & DYDH & "') and (内外框='WKXC')" 2.sql = "select 构件名称,构件代号,横长度,横数量,竖长度,竖数量,比重,相应工艺 from [参数$B2:K" & CSMaxrow & "] where (大样代码='" & DYDH & "') and (内外框='WKXC')" **************************************************************** A、根据本工作簿的1个表查询求和法范本 Sub 查询方法一() Set CONN = CreateObject("ADODB.Connection") CONN.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & ThisWorkbook.FullName sql = "select 区域,存货类, sum(代销仓入库数量),sum(代销仓出库数量),sum(日报数量)from [sheet4$a:i] where 区域='" & [b3] & "' and month(日期)='" & Month(Range("F3")) & "' group by 区域,存货类" Sheets("sheet2").[A5].CopyFromRecordset CONN.Execute(sql) CONN.Close: Set CONN = Nothing End Sub ----------------- Sub 查询方法二() Set CONN = CreateObject("ADODB.Connection") CONN.Open "dsn=excel files;dbq=" & ThisWorkbook.FullName sql = "select 区域,存货类, sum(代销仓入库数量),sum(代销仓出库数量),sum(日报数量)from [sheet4$a:i] where 区域='" & [b3] & "' and month(日期)='" & Month(Range("F3")) & "' group by 区域,存货类" Sheets("sheet2").[A5].CopyFromRecordset CONN.Execute(sql) CONN.Close: Set CONN = Nothing End Sub ************************************************************************************************** B、根据本工作簿2个表的不同类别查询求和法范本 Sub 根据入库表和回款表的区域名和月份分别求存货类发货数量和本月回款数量查询() Set conn = CreateObject("adodb.connection") conn.Open "provider=microsoft.jet.oledb.4.0;" & _ "extended properties=excel 8.0;data source=" & ThisWorkbook.FullName Sheet3.Activate Sql = " select a.存货类,a.fh ,b.hk from (select 存货类,sum(本月发货数量) " _ & " as fh from [入库$] where 存货类 is not null and 区域='" & [b2] _ & "' and month(日期)=" & [d2] & " group by 存货类) as a" _ & " left join (select 存货类,sum(数量) as hk from [回款$] where 存货类" _ & " is not null and 区域='" & [b2] & "' and month(开票日期)=" & [d2] & "" _ & " group by 存货类) as b on a.存货类=b.存货类" Range("a5").CopyFromRecordset conn.Execute(Sql) End Sub ******************************************************************* C、根据本文件夹下其他工作簿1个表区域的区域求和 Sub 在工作表1汇总本文件夹下001工作薄的表1分数列查询汇总() Set conn = CreateObject("ADODB.Connection") conn.Open "dsn=excel files;dbq=" & ThisWorkbook.Path & "\001.xls" sql = "select sum(分数) from [sheet1$]" Sheets(1).[a2].CopyFromRecordset conn.Execute(sql) conn.Close: Set conn = Nothing End Sub --------------------- Sub 在工作表1汇总本文件夹下001工作薄的表1A1:A10查询汇总() Set conn = CreateObject("ADODB.Connection") conn.Open "provider=microsoft.jet.oledb.4.0;extended properties='excel 8.0;hdr=no;';data source=" & ThisWorkbook.Path & "\001.xls" sql = "select sum(f1) from [sheet1$a1:a10]" Sheets(1).[A5].CopyFromRecordset conn.Execute(sql) conn.Close: Set conn = Nothing End Sub ----------------------- Sub 在工作表1汇总本文件夹下001工作薄的表1分数列A1:A7查询并msgbox表达汇总() Set conn = CreateObject("ADODB.Connection") Set rr = CreateObject("ADODB.recordset") conn.Open "dsn=excel files;dbq=" & ThisWorkbook.Path & "\001.xls" sql = "select sum(分数) from [sheet1$a1:a7]" Sheets(1).[A8].CopyFromRecordset conn.Execute(sql) rr.Open sql, conn, 3, 1, 1 MsgBox rr.fields(0) conn.Close: Set conn = Nothing End Sub ****************************************************************************************** D、根据本文件夹下其他工作簿多个表区域的单列区域查询求和 sub 本文件夹下其他工作簿的每个工作簿的第4列 30行查询求和 Dim cn As Object, f$, arr&(1 To 30), i% Application.ScreenUpdating = False Set cn = CreateObject("adodb.connection") f = Dir(ThisWorkbook.Path & "\*.xls") Do While f <> "" If f <> ThisWorkbook.Name Then cn.Open "provider=microsoft.jet.oledb.4.0;extended properties='excel 8.0;hdr=no;';data source=" & ThisWorkbook.Path & "\" & f Range("d5").CopyFromRecordset cn.Execute("select f4 from [基表1$a5:d65536]") cn.Close For i = 1 To 30 arr(i) = arr(i) + Range("d" & i + 4) Next i End If f = Dir Loop Range("d5").Resize(UBound(arr), 1) = WorksheetFunction.Transpose(arr) Application.ScreenUpdating = True End Sub ************************************************************************************************** E、根据本文件夹下其他工作簿多个表区域的多列区域查询求和 sub 本文件夹下其他工作簿的每个工作簿的第B\C\D列 25行查询求和 Dim cn As Object, f$, arr&(1 To 25, 1 To 3), i% Application.ScreenUpdating = False Set cn = CreateObject("adodb.connection") f = Dir(ThisWorkbook.Path & "\*.xls") Do While f <> "" If f <> ThisWorkbook.Name Then cn.Open "provider=microsoft.jet.oledb.4.0;extended properties='excel 8.0;hdr=no;';data source=" & ThisWorkbook.Path & "\" & f Range("b6").CopyFromRecordset cn.Execute("select f2,f3,f4 from [基表3$a6:e65536]") cn.Close For i = 1 To 25 For j = 1 To 3 arr(i, j) = arr(i, j) + Cells(i + 5, j + 1) Next j Next i End If f = Dir Loop Range("b6").Resize(UBound(arr), 3) = arr Application.ScreenUpdating = True End Sub *********************************************************************************** F、其他相关知识整理 ' 用excel SQL方法 'conn是建立的连接对象,用open打开 ' 通过 CreateObject("ADODB.Connection") 这一句建立了一个数据库连接对象conn ' 在工程中就不再需要引用“Microsot ActiveX Data Objects 2.0 Library“ 对象 '设置对象 conn 为一个新的 ADO 链接实例,也可以用 set conn = New ADODB.Connection。 -------------- ' conn.Close表示关闭conn连接 ' Set conn = Nothing 是把连接对象conn置空,不然你退出了文件,但数据库还没有关闭 conn.Open "dsn=excel files;dbq=" & ThisWorkbook.Path & "\001.xls"能把这段含义具体解释一下吗? '这里的dbq的作用? '------------------ 'dsn是缩,data source name数据库名 是 excel file ' 'dbq 也是缩,data base query 意思是数据库查询,后接源库文件名 001.xls '--------------------- '代码中长单词怎么记住的? '比如copyfromrecordset可以拆开记忆,copy、from、recordset 这三个单词意思知道吧,就是“复制、从、记录集” '----------------- 'Sql = "select sum(分数) from [sheet1$]"这里加"分数"两字什么作用? ' 'SQL一般结构是select 字段 from 表,意思是从指定的表中查询字段,字段的理解可以是:表 中的列名 ' '分数 是001.xls文件的sheet1第一行A列的字段名,SQL一般以字段来识别每列数据 '------------------- '为什么要用复制的对象引用过来计算呢? ' '因为Sql语句只是对源数据库的字段找到了符合条件的的数据,但不会自动复制到汇总表来,所以需要复制copy ' '注意 这里的 [sheet1$]" ,001文件的数据存放地上sheet1表,应当用方括号并加上$ ' '如果源数据文件001不是excel,而是Access,则引用表,不需要加方括号,也不要$ '----------------- 还有,这里Execute表示什么作用? '' Execute是执行SQL查询语句的意思 ----------------------------- 如果不要字段也可以,那么在打开语句中加上:hdr=no '这样没有分数字段也可实现 'SQL语句我换了形式,而且加上了hdr=no,即无需字段,而且我在SQL中用了sum(f1),f1表示第一列数据 '[sheet1$a1:a10] "是只求a1:a10区域的和" ********************************************** 编后话: 前面也多次听说了sql,总没有间,也没有好好认识它 第一次认真系统学习sql语句,汇集了一些代码。 有不同理解的人,欢迎给予小爪评论,小爪只爱excel
SQL语法大全 SQL语法大全 1. ASP与Access数据库连接: 2. ASP与SQL数据库连接: 建立记录集对象: set rs=server.createobject("adodb.recordset") rs.open SQL语句,conn,3,2 3. SQL常用命令使用方法: (1) 数据记录筛选: sql="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]" sql="select * from 数据表 where 字段名 like \'%字段值%\' order by 字段名 [desc]" sql="select top 10 * from 数据表 where 字段名 order by 字段名 [desc]" sql="select * from 数据表 where 字段名 in (\'值1\',\'值2\',\'值3\')" sql="select * from 数据表 where 字段名 between 值1 and 值2" (2) 更新数据记录: sql="update 数据表 set 字段名=字段值 where 条件表达式" sql="update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表达式" (3) 删除数据记录: sql="delete from 数据表 where 条件表达式" sql="delete from 数据表" (将数据表所有记录删除) (4) 添加数据记录: sql="insert into 数据表 (字段1,字段2,字段3 …) values (值1,值2,值3 …)" sql="insert into 目标数据表 select * from 源数据表" (把源数据表的记录添加到目标数据表) (5) 数据记录统计函数: AVG(字段名) 得出一个表格栏平均值 COUNT(*|字段名) 对数据行数的统计或对某一栏有值的数据行数统计 MAX(字段名) 取得一个表格栏最大的值 MIN(字段名) 取得一个表格栏最小的值 SUM(字段名) 把数据栏的值相加 引用以上函数的方法: sql="select sum(字段名) as 别名 from 数据表 where 条件表达式" set rs=conn.excute(sql) 用 rs("别名") 获取统的计值,其它函数运用同上。 (5) 数据表的建立和删除: CREATE TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度) …… ) 例:CREATE TABLE tab01(name varchar(50),datetime default now()) DROP TABLE 数据表名称 (永久性删除一个数据表) 4. 记录集对象的方法: rs.movenext 将记录指针从当前的位置向下移一行 rs.moveprevious 将记录指针从当前的位置向上移一行 rs.movefirst 将记录指针移到数据表第一行 rs.movelast 将记录指针移到数据表最后一行 rs.absoluteposition=N 将记录指针移到数据表第N行 rs.absolutepage=N 将记录指针移到第N页的第一行 rs.pagesize=N 设置每页为N条记录 rs.pagecount 根据 pagesize 的设置返回总页数 rs.recordcount 返回记录总数 rs.bof
1. ASP与Access数据库连接: <% dim conn,mdbfile mdbfile=server.mappath("数据库名称.mdb") set conn=server.createobject("adodb.connection") conn.open "driver={microsoft access driver (*.mdb)};uid=admin;pwd=数据库密码;dbq="&mdbfile %> 2. ASP与SQL数据库连接: <% dim conn set conn=server.createobject("ADODB.connection") con.open "PROVIDER=SQLOLEDB;DATA SOURCE=SQL服务器名称或IP地址;UID=sa;PWD=数据库密码;DATABASE=数据库名称 %> 建立记录集对象: set rs=server.createobject("adodb.recordset") rs.open SQL语句,conn,3,2 3. SQL常用命令使用方法: (1) 数据记录筛选: sql="select * from 数据表 where 字段名=字段值 order by 字段名 " sql="select * from 数据表 where 字段名 like ‘%字段值%‘ order by 字段名 " sql="select top 10 * from 数据表 where 字段名 order by 字段名 " sql="select * from 数据表 where 字段名 in (‘值1‘,‘值2‘,‘值3‘)" sql="select * from 数据表 where 字段名 between 值1 and 值2" (2) 更新数据记录: sql="update 数据表 set 字段名=字段值 where 条件表达式" sql="update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表达式" (3) 删除数据记录: sql="delete from 数据表 where 条件表达式" sql="delete from 数据表" (将数据表所有记录删除) (4) 添加数据记录: sql="insert into 数据表 (字段1,字段2,字段3 …) valuess (值1,值2,值3 …)" sql="insert into 目标数据表 select * from 源数据表" (把源数据表的记录添加到目标数据表) (5) 数据记录统计函数: AVG(字段名) 得出一个表格栏平均值 COUNT(*|字段名) 对数据行数的统计或对某一栏有值的数据行数统计 MAX(字段名) 取得一个表格栏最大的值 MIN(字段名) 取得一个表格栏最小的值 SUM(字段名) 把数据栏的值相加 引用以上函数的方法: sql="select sum(字段名) as 别名 from 数据表 where 条件表达式" set rs=conn.excute(sql) 用 rs("别名") 获取统的计值,其它函数运用同上。 (5) 数据表的建立和删除: CREATE TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度) …… ) 例:CREATE TABLE tab01(name varchar(50),datetime default now()) DROP TABLE 数据表名称 (永久性删除一个数据表) (6) 记录集对象的方法: rs.movenext 将记录指针从当前的位置向下移一行 rs.moveprevious 将记录指针从当前的位置向上移一行 rs.movefirst 将记录指针移到数据表第一行 rs.movelast 将记录指针移到数据表最后一行 rs.absoluteposition=N 将记录指针移到数据表第N行 rs.absolutepage=N 将记录指针移到第N页的第一行 rs.pagesize=N 设置每页为N条记录 rs.pagecount 根据 pagesize 的设置返回总页数 rs.recordcount 返回记录总数 rs.bof 返回记录指针是否超出数据表首端,true表示是,false为否 rs.eof 返回记录指针是否超出数据表末端,true表示是,false为否 rs.delete 删除当前记录,但记录指针不会向下移动 rs.addnew 添加记录到数据表末端 rs.update 更新数据表记录 判断所填数据是数字型 if not isNumeric(request("字段名称")) then response.write "不是数字" else response.write "数字" end if
      课程设计题目    学生成绩管理系统 课程设计的目的   理解面向对象的软件设计基本理论,学习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

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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