读书人

学生信息管理系统之模块的了解

发布时间: 2012-08-27 21:21:56 作者: rapoo

学生信息管理系统之模块的理解

ExecuteSQL的定义'传递参数SQL传递查询语句,MsgString传递查询信息。自身以一个数据集对象的形式返回
Public Function ExecuteSQL(ByVal SQL As String, MsgString As String) As ADODB.Recordset
Dim Cnn As ADODB.Connection '定义连接
Dim Rst As ADODB.Recordset
Dim sTokens() As String '定义字符串

On Error GoTo ExecuteSQL_Error '异常处理

sTokens = Split(SQL) '用Split函数产生一个包含各个子串的数组

Set Cnn = New ADODB.Connection '创建连接
Cnn.Open ConnectString

If InStr("INSERT,DELETE,UPDATE", UCase$(sTokens(0))) Then '判断字符串中是否含有指定内容
Cnn.Execute SQL '执行查询语句
MsgString = sTokens(0) & "query successful" '返回查询信息
Else
Set Rst = New ADODB.Recordset '闯将数据集对象
Rst.Open Trim$(SQL), Cnn, adOpenKeyset, adLockOptimistic '返回查询结果
Set ExecuteSQL = Rst '返回记录集对象
MsgString = "查询到" & Rst.RecordCount & " 条记录"
End If

ExecuteSQL_Exit:

Set Rst = Nothing '清空数据集对象
Set Cnn = Nothing '中断连接
Exit Function

ExecuteSQL_Error: '判断错误类型

MsgString = "查询错误:" & Err.Description
MsgBox MsgString
Resume ExecuteSQL_Exit
上面是模块中ExecuteSQL函数的定义过程,它的目的就是执行SQL语句。那它是怎样的逻辑呢?首先它运用了一个Split函数,在msdn中查找它的意思就是返回一组下标为0的数组。 看一个例子: 写一句SQL语句:"select * from student_Info" 执行sTokens=Split(SQL) sTokens(0)="select" sTokens(1)="*" sTokens(2)="from" sTokens(3)="student_Info" 这样就把一个查询语句拆分成了一个数组 然后看InStr("INSERT,DELETE,UPDATE", UCase$(sTokens(0)))这句话,InStr函数在msdn中的解释: InStr([start, ]string1, string2[, compare]),下标从1开始  返回指定一字符串在另一字符串中最先出现的位置。在字符串string1中,从start开始找string2,省略start时 从string1头开始找。找不到时,函数值为0。 因为SQL语句中最常用的就是 SELECT,INSERT,DELETE,UPDATE,所以这句话的意思就是在"INSERT,DELETE,UPDATE"中查找SQL语句开头的单词,如果能够找到就执行下边的语句,如果找不到就执行Else中的语句。 大家肯定会疑惑为什么红色字部分没有SELECT,原因是现在这个语句的功能是单纯地判断是不是Select语句,如果是就执行Else。 最后看ExecuteSQL_Exit:
Set Rst = Nothing '清空数据集对象
Set Cnn = Nothing '中断连接
Exit Function
这是典型的单个退出点。当执行正确的时候就直接退出了Exit Function,如果出错了才执行错误处理语句。单个退出点的作用就是确保出错时才执行错误处理语句。 说说遇到的问题:昨天上午和佳翰讨论时,他的代码部分"INSERT,DELETE,UPDATE"都用的小写,但是后边缺家了Ucase,我们在调试delete语句的时候怎么也不执行Else之前的语句,后来找了焕月师姐她说转换成大写肯定找不到从前边找到delete,所以就不执行。
20楼han_yankun20092小时前
支持
19楼zhanglianhai5552小时前
强悍,支持一下!
Re: ggibenben13142小时前
太强悍了,哈哈
18楼hejingyuan62小时前
呵呵,支持
Re: ggibenben13142小时前
嘿嘿
17楼leihengxin4小时前
加油。
Re: ggibenben13142小时前
谢谢
16楼duskysea4小时前
不错
15楼lantingxv_jing6小时前
我都还没有做到这里呢,,,,
Re: ggibenben13145小时前
我觉得应该先敲模块
14楼dandanzmc昨天 22:15
嘻嘻,呵呵
Re: ggibenben1314昨天 23:39
小丫头
13楼a137151062昨天 19:58
加油
Re: ggibenben1314昨天 20:03
向刚哥学习
12楼lishehe昨天 19:10
顶学习了
Re: ggibenben1314昨天 19:10
向社河学习
11楼xvshu昨天 18:59
加油!加油!加油!
Re: ggibenben1314昨天 19:03
谢谢
10楼yi_zz昨天 18:34
继续努力呀~
Re: ggibenben1314昨天 18:34
一定
9楼liujiahan629629昨天 17:37
这个讨论讨论记得挺清楚的!
Re: ggibenben1314昨天 17:48
就是就是
8楼han_yankun2009昨天 16:50
不错,学习了
Re: ggibenben1314昨天 16:50
嘿嘿
7楼yueyangxiaoliang昨天 15:02
学习一下
Re: ggibenben1314昨天 16:50
互相学习
6楼lyg673770712昨天 14:31
晓哥剖析的很深刻呀
Re: ggibenben1314昨天 14:50
嘿嘿还行吧
5楼wj8023昨天 14:23
学习了,加油!
Re: ggibenben1314昨天 14:23
嘿嘿
4楼liutengteng130昨天 11:52
支持。
Re: ggibenben1314昨天 11:52
嘿嘿谢啦
3楼lfmilaoshi昨天 11:51
还要系统的写文章。文章太过于零散。。。米老师
Re: ggibenben1314昨天 11:51
嗯知道了
2楼jiudihanbing昨天 11:46
学生信息管理系统…… 好熟悉的项目。总结的不错。代码的注释写的也不错! 加油……
Re: ggibenben1314昨天 11:48
向师哥学习
1楼cjr15233661143昨天 11:42
理解的真透呀
Re: ggibenben1314昨天 11:43
是师傅讲的透,自己看也看不懂

读书人网 >其他数据库

热点推荐