前一段时间一直在查SQL中游标和指针的区别,最后发现好像在SQL Server中没有指针这一概念(不是很确定有没有谁给我个明确的资料看看)。但是,在C++中指针是一种变量存储这内存中的一个物理地址。相当于家庭住址吧,就是你想找谁,按着家庭住址(指针)就能找到他。原来我以为指针和游标是差不多的东西,实际上这是两种完全不同的东西,指针的的实质是一个变量,而游标是一种机制,不过游标也需要声明的(其实当变量理解也可以行的通也)。下面具体说说游标这个东西!
游标的理解
因为关系型数据库是面向集合的,即它的操只能面向集合做统一的操作。这样若要对集合的单条记录做差异化操作时就只能使用where子句去逐条选择,即让结果集中只存在一条记录。很麻烦!而游标就提供了这样的机制可以让你对集合中的记录逐条操作,游标是面向单条记录的。这就好像米老师要找已毕业的学生谈话,谈话结束后米老师还要对其中的某些学生单独谈话。这时候米老师怎么办——叫到他的办公室去,叫到办公室的这个过程其实就是游标的机制。如果没有这个机制,米老师就得先让大家回去,然后再一个个叫,岂不麻烦?
游标的分类
游标分为:T-SQL服务器游标、API服务器游标、客户机游标
在现阶段你使用过游标吗?答案是肯定的我们使用过游标。我们使用的是客户机游标!由于T-SQL服务器和API服务器游标没有使用过这里就不说了,怕说错。我们什么时候使用了客户机游标了呢?请看以下代码:
If InStr("INSERT,DELETE,UPDATE", UCase(StrTokens(0))) Then '判断动作 Objcn.Execute SQL
Msgstring = StrTokens(0) & "成功"
Else
Set Objrs = New ADODB.Recordset
Objrs.Open Trim(SQL), Objcn, adOpenKeyset, adLockOptimistic
Set ExecuteSQL = Objrs '赋予函数返回值
Msgstring = "查询到" & Objrs.RecordCount & "条记录"
End If
不知道大家有没有注意过红色那句代码,这里就涉及道了游标!参数adOpenKeyset就是游标类型。adodb.reccordset.open中游标参数有以下值:
0 adOpenForwardOnly 使用仅向前游标。除了在记录中只能向前滚动外,与静态游标相同。当只需要在 Recordset 中进行一个传递时,用它可提高性能。
1 adOpenKeyset 使用键集游标。尽管从您的 Recordset 不能访问其他用户删除的记录,但除无法查看其他用户添加的记录外,它和动态游标相似。其他用户所做的数据更改依然可见。
2 adOpenDynamic 使用动态游标。其他用户所做的添加、更改或删除均可见,而且允许 Recordset 中的所有移动类型(如果提供者不支持书签,则书签除外)。
3 adOpenStatic 使用静态游标。一组记录的静态副本,可用于查找数据或生成报告。其他用户所做的添加、更改或删除不可见。
-1 adOpenUnspecified 不指定游标类型。
目前我的游标就是这个样子了!以后的以后再说!