当前位置:首页>网络学院>程序开发>Visual Basic教程>文章内容
广告位出租 广告位出租

RDO 的建立记录集(一

[ 来源: | 作者: | 时间:2007-06-26 | 收藏 | 推荐 ] 【

广告位出租

上回谈的是如何建立连结,这SQL与Informix没有什麽不同,但是
再来要谈的是令人十分痛苦的事了,那便是如何产生一个rdoResultSet物件
rdoResultSet相对应於DAO的Recordset物件,产生的方式主要如下:

Private WithEvents cn   As rdoConnection
Private en As rdoEnvironment
Private rs As rdoResultset
Private qry As rdoQuery
Dim sql As String 

Set en = rdoEnvironments(0)
Set cn = New rdoConnection

en.CursorDriver = rdUseServer  '见注一
connstr = "UID=cww;PWD=jjh5612;Database=cwwpf@eis;" _
        + "Driver={OpenLink Generic 32 Bit Driver};" _
        + "Host=192.168.0.61;" _
        + ";FetchBufferSize=30" _
        + ";NoLoginBox=Yes" _
        + ";Options=" _
        + ";Protocol=TCP/IP" _
        + ";ReadOnly=No" _
        + ";ServerOptions=" _
        + ";ServerType=Informix 7.2"
cn.Connect = connstr
Set cn = en.OpenConnection("", rdDriverNoPrompt, _
                           False, connstr)   '第三个叁数False表示非ReadOnly
.
.
rs.Close
cn.Close

如果不想cn 加入en.Connections之中,则改用以下方式
Set en = rdoEnvironments(0)
Set cn = New rdoConnection
connstr = "UID=cww;PWD=jjh5612;Database=cwwpf@eis;" _
        + "Driver={OpenLink Generic 32 Bit Driver};" _
        + "Host=192.168.0.61;" _
        + ";FetchBufferSize=30" _
        + ";NoLoginBox=Yes" _
        + ";Options=" _
        + ";Protocol=TCP/IP" _
        + ";ReadOnly=No" _
        + ";ServerOptions=" _
        + ";ServerType=Informix 7.2"
Set cn = New rdoConnection
cn.CursorDriver = rdUseServer
cn.EstablishConnection rdDriverNoPrompt, False
sql = "Select * From qppfa"
Set rs = cn.OpenResultset(sql, rdOpenForwardOnly, _
    rdConcurReadOnly)
.
.
rs.Close
cn.Close

重点都是在OpenResultset这个方法上,但是如果要做更多的控制,我会在rdoQuery上使
用OpenResultset,如下:

Set en = rdoEnvironments(0)
Set cn = New rdoConnection

cn.CursorDriver = rdUseServer
connstr = "UID=cww;PWD=jjh5612;Database=cwwpf@eis;" _
        + "Driver={OpenLink Generic 32 Bit Driver};" _
        + "Host=192.168.0.61;" _
        + ";FetchBufferSize=30" _
        + ";NoLoginBox=Yes" _
        + ";Options=" _
        + ";Protocol=TCP/IP" _
        + ";ReadOnly=No" _
        + ";ServerOptions=" _
        + ";ServerType=Informix 7.2"
cn.Connect = connstr
cn.EstablishConnection rdDriverNoPrompt, False
sql = "Select * From testtab"

Set qry = cn.CreateQuery("MyQuery", sql)
qry.RowsetSize = 50   '见注二
qry.MaxRows = 200     '见注三 
Set rs = qry.OpenResultset(rdOpenKeyset, _
        rdConcurRowVer)
.
.
rs.Close
cn.Close

至於说OpenResultset方法中又提及记录集又分成以下四种:

rdOpenForwardOnly 0  (预设值)是固定集 (Fixed Set),不可卷动 (Non-Scrolling)
rdOpenKeyset      1   固定集,可卷动的查询记录集的资料指标,存的只是Key,而其
                      他的资料於需要时可以去读取,因此它可以读到其他人更新过後
                      的资料,当然,需和RowSetSize做搭配,别人在我们读取到Data
                      後才更新资料时,我们的Process仍然没有反映最新的资料,此
                      时下个Move 0指令可以更新至最新的Data。不过看不到其他人新
                      增到该Result Set的资料
                     
rdOpenDynamic     2   动态集的资料指标,特性和rdOpenKeyset同,唯其他Process加入
                      该Resultset的资料可以在目前Process中看到。
rdOpenStatic      3   是固定集,和rdOpenKeyset不同的是,资料集一建立之後就看不
                      见其他Process对Resultset的修正。

其实,我觉得MS 对於这些东西的说明十分不清楚,而且上面的说明针对的都是rdUseServer
的Server端之Cursor,而ODBC端的Cursor没有像上面所说的那样,ODBC端的Cursor因为
资料是Copy到Client端,自然也就看不到他人是如何对Resultset成员的修改了;当然了,
理论上还是可以得知,不过这要花上代价,那就是每一次读取资料时还得向Server来询问
是否有改,那不就失去Client端Cursor的原意了吗?所以我们可以想像,ODBC端的Cursor
只有rdOpenForwardOnly与rdOpenStatic这两种。

这样就结束了吗?还没有!以上是MS SQL SERVER6.5的特性,而Informix呢?InforMix
Server端的Cursor只有rdOpenForwardOnly与rdOpenKeyset两种(注意,不是rdOpenStatic)
这和Informix Server有关,然而我们在Informix为後端的Server中使用rdOpenStatic/
rdOpenDynamic时,也不会有误,只是行为和rdOpenKeyset相同。而Informix为後端,但
我们使用rdUseOdbc之Client端Cursor呢,此时只有rdOpenForwardonly与rdOpenStatic
(注意,不是rdOpenKetset喔),这个原因是来自於ODBC Cursor的特性。

而不管是SQL SERVER或Informix为後端,rdUseNone的方式就没有太多的选择,一律只能
使用rdOpenForwardonly的Cursor型态,这不必多说,应是很自然的事吧。

透过上面的说明,何时用Client端的Cursor何时用Server端的Cursor应比较有念了吧。

注一:
CursorDriver 有以下数种方式 rdUseIfNeeded 0 ODBC 驱动程序 将选取适当的资料指标样式。可能的话,使用 伺服端资料指标。 rdUseOdbc 1 将使用ODBC 资料指标程序库(ODBC Cursor Library)。 rdUseServer 2 使用伺服端资料指标。 rdUseClientBatch 3 RDO 将使用乐观批次资料指标程序库 rdUseNone 4 记录集(Result Set)不以资料指标型态传回。

(阅读次数:

返回顶部
共2页: 上一页 1 [2] 下一页  
广告位出租

网友评论

[以下评论为网友观点,不代表本站。请自觉遵守互联网相关政策法规,所有连带责任均有评论者自负。]
[不超过250字]