Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3366|回复: 4

[已解决]求助Open参数问题

[复制链接]
发表于 2010-4-10 09:49 | 显示全部楼层 |阅读模式

下面的语句

rs.Open sql, cnn, adOpenKeyset, adLockOptimistic

 

后面两个参数是什么含义啊?

[em06]
最佳答案
2010-4-10 10:59
QUOTE:
以下是引用danser在2010-4-10 9:49:00的发言:

下面的语句

rs.Open sql, cnn, adOpenKeyset, adLockOptimistic

后面两个参数是什么含义啊?

[em06]

你这个因该是摘录下来的吧,希望下面的例子对你有帮助:

Public Sub a()
    Dim mydata, mytable, SQL As String
    mydata = "C:\Documents and Settings\lily.yu\Desktop\AutoDB1.mdb"
    mytable = "BU4List"
    Dim cnn As ADODB.Connection
    Dim rs As ADODB.Recordset
   
    Dim i As Integer
    Set cnn = New ADODB.Connection
    With cnn
        .provider = "microsoft.jet.oledb.4.0"
        .Open mydata
    End With
    SQL = "select * from" & mytable
    Set rs = New ADODB.Recordset
    rs.Open SQL, cnn, adOpenKeyset, adLockOptimistic
    Range("A2").CopyFromRecordset rs
   
End Sub

rs.Open SQL, cnn, adOpenKeyset, adLockOptimistic提示出错

是因为用 Set cnn = New ADODB.Connection 而不是用 dim cnn as new ADODB.Connection  加 引用
就缺少了引用.

所以不能用 rs.Open SQL, cnn, adOpenKeyset, adLockOptimistic   只能用 1,2,3..........数字来代替
比如  rs.Open SQL, cnn, 1,1 或者 rs.Open SQL, cnn, 3,1 或者 rs.Open SQL, cnn, 1,3

或者 就引用一下  MICROSOFT ACTIVEX DATA OBJECTS 2.x  LIBRARY

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2010-4-10 10:55 | 显示全部楼层

第一个参数:sql 即SQL语句

第二个数:conn 即数据库的连接

第三个参数:
0 创建只能向前滚动的只读记录集
1 游标允许你添加,删除和修改记录,但是看不到当你的记录集打开是其他用户所做的修改
2 游标允许你添加,删除和修改记录,并且可以看到其他用户所做的修改
3 创建一个具有所有定位功能的只读记录集,即:可以向前,向后,并且可以标记书签

第四个:
1 记录是只读的,并且不能改变
2 记录在你可以对其进行编辑时是被锁定的
3 在你调用Update方法提交你所做的改变时记录是被锁定的
4 如果你在对一系列记录进行批量更新,在需要它

记录集rs.open 参数说明RS.OPEN SQL,CONN,A,B


A: 

ADOPENFORWARDONLY(=0) 
只读,且当前数据记录只能向下移动

ADOPENKEYSET(=1) 
只读,当前数据记录可自由移动

ADOPENDYNAMIC(=2) 
可读写,当前数据记录可自由移动

ADOPENSTATIC(=3) 
可读写,当前数据记录可自由移动,可看到新增记录

B:

ADLOCKREADONLY(=1) 
缺省锁定类型,记录集是只读的,不能修改记录

ADLOCKPESSIMISTIC(=2) 
悲观锁定,当修改记录时,数据提供者将尝试锁定记录以确保成功地编辑记录。只要编辑一开始,则立即锁住记录。

ADLOCKOPTIMISTIC(=3) 
乐观锁定 ,直到用Update方法提交更新记录时才锁定记录。

ADLOCKBATCHOPTIMISTIC(=4) 
批量乐观锁定,允许修改多个记录,只有调用UpdateBatch方法后才锁定记录。

当不需要改动任何记录时,应该使用只读的记录集,这样提供者不用做任何检测。
对于一般的使用,乐观的锁定可能是最好的选择,因为记录只被锁定一小段时间,
数据在这段时间被更新。这减少了资源的使用。

DISTINCT 参数用来选取一列中所有的不同的值。例如:表中城区记录中有3000条数据,但是城区只有5个,

从中提取出城区的名称: SELECT DISTINCT 城区 FROM Table。

对于类似城区,街道从数据库中数据进行关联,可以使用以下语句:

Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim strSQL As String

Private Sub DataCombo1_Change()
Set rs = New ADODB.Recordset
strSQL = "SELECT DISTINCT 街道 FROM shuju WHERE 城区='" & DataCombo1.Text & "'"
rs.Open strSQL, cnn, adOpenKeyset, adLockReadOnly
    Set DataCombo2.DataSource = rs
    Set DataCombo2.RowSource = rs
    DataCombo2.ListField = rs.Fields("街道").Name
End Sub

Private Sub Form_Load()  'load 城区 to DataCombo1
Set cnn = New ADODB.Connection
    cnn.Provider = "Microsoft.Jet.OLEDB.4.0"
    cnn.ConnectionString = "Data Source=" & App.Path & "\data.mdbersist Security Info=False"
    cnn.Open
Set rs = New ADODB.Recordset
strSQL = "SELECT DISTINCT 城区 FROM shuju"
rs.Open strSQL, cnn, adOpenKeyset, adLockReadOnly
    Set DataCombo1.DataSource = rs
    Set DataCombo1.RowSource = rs
    DataCombo1.ListField = rs.Fields("城区").Name
End Sub

回复

使用道具 举报

发表于 2010-4-10 10:59 | 显示全部楼层    本楼为最佳答案   

QUOTE:
以下是引用danser在2010-4-10 9:49:00的发言:

下面的语句

rs.Open sql, cnn, adOpenKeyset, adLockOptimistic

后面两个参数是什么含义啊?

[em06]

你这个因该是摘录下来的吧,希望下面的例子对你有帮助:

Public Sub a()
    Dim mydata, mytable, SQL As String
    mydata = "C:\Documents and Settings\lily.yu\Desktop\AutoDB1.mdb"
    mytable = "BU4List"
    Dim cnn As ADODB.Connection
    Dim rs As ADODB.Recordset
   
    Dim i As Integer
    Set cnn = New ADODB.Connection
    With cnn
        .provider = "microsoft.jet.oledb.4.0"
        .Open mydata
    End With
    SQL = "select * from" & mytable
    Set rs = New ADODB.Recordset
    rs.Open SQL, cnn, adOpenKeyset, adLockOptimistic
    Range("A2").CopyFromRecordset rs
   
End Sub

rs.Open SQL, cnn, adOpenKeyset, adLockOptimistic提示出错

是因为用 Set cnn = New ADODB.Connection 而不是用 dim cnn as new ADODB.Connection  加 引用
就缺少了引用.

所以不能用 rs.Open SQL, cnn, adOpenKeyset, adLockOptimistic   只能用 1,2,3..........数字来代替
比如  rs.Open SQL, cnn, 1,1 或者 rs.Open SQL, cnn, 3,1 或者 rs.Open SQL, cnn, 1,3

或者 就引用一下  MICROSOFT ACTIVEX DATA OBJECTS 2.x  LIBRARY

回复

使用道具 举报

发表于 2010-4-10 11:59 | 显示全部楼层

好复杂。学习中
回复

使用道具 举报

发表于 2010-4-10 13:32 | 显示全部楼层

要学习

[em06]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-18 11:09 , Processed in 0.419968 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表