ahlzl 发表于 2004-1-11 10:10:00

[求助]求ADO的示范代码

我想学ADO编程,请高手给我写一段完整示范代码。通过ADO读取ACCESS和EXCEL,在CAD中画一直线和两个圆,直线的端点和圆的圆心是第一点和第二点。(请看附件)

efan2000 发表于 2004-1-11 15:21:00

第一个为连接Access数据库的例子,第二个为连接Excel数据库的例子。

Sub test1()

    '创建对数据库的连接
    Dim cn As ADODB.Connection
    Set cn = New ADODB.Connection
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\access.mdb"
   
    '通过语句创建数据集
    Dim rs As ADODB.Recordset
    Set rs = New ADODB.Recordset
    rs.Open "select * from 表1", cn, adOpenKeyset, adLockOptimistic, adCmdText
   
    ' 移到首记录
    rs.MoveFirst
    Dim cPt(0 To 2) As Double
    Do While Not rs.EOF
      cPt(0) = rs.Fields("x")
      cPt(1) = rs.Fields("y")
      cPt(2) = 0
      ' 创建圆
      ThisDrawing.ModelSpace.AddCircle cPt, rs.Fields("r")
      ' 移到下一条
      rs.MoveNext
    Loop
   
    ' 关闭、释放对象
    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
End Sub

Sub test2()

    '创建对数据库的连接,因为是连接Excel,故要指定扩展属性
    ' HDR表示第一行是做为字段名称还是数据行
    Dim cn As ADODB.Connection
    Set cn = New ADODB.Connection
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\excel.xls;Extended Properties=" & """" & "Excel 8.0;HDR=Yes;" & """"
   
    '通过表创建数据集
    Dim rs As ADODB.Recordset
    Set rs = New ADODB.Recordset
    rs.Open "表1", cn, adOpenKeyset, adLockOptimistic, adCmdTable
   
    ' 移到首记录
    rs.MoveFirst
    Dim cPt(0 To 2) As Double
    Do While Not rs.EOF
      cPt(0) = rs.Fields("x")
      cPt(1) = rs.Fields("y")
      cPt(2) = 0
      ' 创建圆
      ThisDrawing.ModelSpace.AddCircle cPt, rs.Fields("r")
      ' 移到下一条
      rs.MoveNext
    Loop
   
    ' 关闭、释放对象
    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
End Sub

注:关于Excel做为数据库使用时的表名设置,见下图。
这里并不是以工作表的名字做为表名,而是以单元格区域的名称。

ahlzl 发表于 2004-1-11 20:16:00

谢谢efan大师!成功了.
代码rs.Open "select * from 表1", cn, adOpenKeyset, adLockOptimistic, adCmdText中红色的东东是什么意思啊?
如果把CAD的内容用ADO的方法写到ACCESS或EXCEL中,那代码又该怎么写啊?

efan2000 发表于 2004-1-11 20:29:00

1、ActiveConnection参数,是数据集当前所属的Connection对象,也可以是一个连接字符串。
2、CursorType参数,游标类型。
3、LockType参数,锁定类型。
4、Options参数,指定Source的类型。
其中游标类型与锁定类型的值跟数据库本身的支持有关系。

CursorType   可选,CursorTypeEnum 值,确定提供者打开 Recordset 时应该使用的游标类型。可为下列常量之一(参阅 CursorType 属性可获得这些设置的定义)。

常量 说明
AdOpenForwardOnly (默认值)打开仅向前类型游标。
AdOpenKeyset 打开键集类型游标。
AdOpenDynamic 打开动态类型游标。
AdOpenStatic 打开静态类型游标。

LockType   可选。确定提供者打开 Recordset 时应该使用的锁定(并发)类型的 LockTypeEnum 值,可为下列常量之一(参见 LockType 属性可获得详细信息)。

常量 说明
AdLockReadOnly (默认值)只读 — 不能改变数据。
AdLockPessimistic 保守式锁定(逐个) — 提供者完成确保成功编辑记录所需的工作,通常通过在编辑时立即锁定数据源的记录。
AdLockOptimistic 开放式锁定(逐个) — 提供者使用开放式锁定,只在调用Update 方法时才锁定记录。
AdLockBatchOptimistic 开放式批更新—用于批更新模式(与立即更新模式相对)。

Options   可选,长整型值,用于指示提供者如何计算 Source 参数(如果它代表的不是 Command 对象),或从以前保存 Recordset 的文件中恢复 Recordset。可为下列常量之一(参见 CommandType 属性可获得该列表中前五个常量的详细说明)。

常量 说明
adCmdText 指示提供者应该将 Source 作为命令的文本定义来计算。
adCmdTable 指示 ADO 生成 SQL 查询以便从在 Source 中命名的表中返回所有行。
adCmdTableDirect 指示提供者更改从在 Source 中命名的表中返回所有行。
adCmdStoredProc 指示提供者应该将 Source 视为存储过程。
adCmdUnknown 指示 Source 参数中的命令类型为未知。
adCmdFile 指示应从在 Source 中命名的文件中恢复保留(保存的)Recordset。
adAsyncExecute 指示应异步执行 Source。
adAsyncFetch 指示在提取 Initial Fetch Size 属性中指定的初始数量后,应该异步提取所有剩余的行。如果所需的行尚未提取,主要的线程将被堵塞直到行重新可用。
adAsyncFetchNonBlocking 指示主要线程在提取期间从未堵塞。如果所请求的行尚未提取,当前行自动移到文件末尾。
页: [1]
查看完整版本: [求助]求ADO的示范代码