打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
用VBA如何实现在exce的工作表中对数据库的读写 - 『 VBA交流 』 - OFFIC...

出自EXCELHOME

Excel 2000访问远程数据的四种方法
Excel 2000作为一个电子表格软件,它不仅有强大的数据处理能力,而且它的报表功能也是十分强大。因而常常用Excel 2000去调用Access、SQL Server、Oracle、DB2等数据库软件建立的大型数据库的内容。用户可以在工作表中对这些数据进行筛选、排序、查询、编辑和打印报表,十分方便,这也是大多数人都熟悉的。但如何去调用这数据呢?本人在这里提供4种方法。
下面四种方法必须要先创建一个数据源,我们以SQL Server7.0内的样本数据库pubs为例。在控制面板/ODBC数据源/系统DSN,单击增加按纽,选取SQL Server驱动程序,建立一个与pubs数据库连接的叫pubs名称数据源。
方法一:
在Excel 2000中,选择 数据/获取外部数据/新建数据库查询,然后按向导的提示一步一步做,最后将数据返回Excel 2000中就行了
这种方法是大家常用的,也是最方便的。但这种方法只能对远程数据进行查询,不能对远程数据进行增加和修改。
方法二:
这种方法需要VBA编程(方法三、方法四也一样),在Visual Basic编程中,我们经常用ADO来访问数据。ADO是Microsoft提供的针对各种各样数据源的新型高级编程接口。它支持大多数据库操作,在Excel 2000中应用ADO来访问数据,是十分理想的方法。看看下面一个实例:
Sub opendb()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
cn.Open "Provider=MSDASQL.1;Persist Security Info=False;Data       Source=pubs"
rs.Open "select * from authors", cn
Range("a1").CopyFromRecordset rs
Rs.close
cn.Close
End Sub
宏中第一、二句定义了一个ADO的Connection对象和一个Recordset对象,第三、四句创建了一个ADO的Connection对象和一个Recordset对象。第五句连接到前面我们建立的数据源pubs数据库。第六句是ADO的Recordset对象执行一条SQL里select语句。在这也可以执行insert,update等等SQL语句的。第七句是将rs里的记录返回当前表里。第八、九句是关闭连接。运行前要在Excel 2000工具/引用中引用ADO的库文件。
在Excel 2000中应用ADO对象,不仅可以对数据库进行查询,而且可以作增加,修改数据库的记录,甚至可以调用SQL SERVER7.0的存储过程,加强Excel 2000对数据库处理能力。
方法三:
Excel 2000的功能是十分强大的,它自带了一个ODBC加载宏,我们在Excel 2000中引用这个宏文件xlodbc.xla,就可以通过下面的方法去访问我们建立的数据源了
Sub opendb()
Dim id as integer
id = SQLOpen(“DSN=pubs”)
SQLExecQuery id, “select * from authors”
Set output = Worksheets("Sheet1").Range("A1")
        SQLRetrieve id, output, , ,
        True SQLClose id        
        End sub
第二句是调用xlodbc.xla宏中的SQLOpen函数建立一个对数据库pubs连接,第三句是SQLExecQuery函数执行了一条select语句,id是由SQLOpen 函数返回的唯一连接标识,第四句是SQLRetrieve函数将SQLExecQuery函数执行的查询的结果返回到Excel 2000中。
这种编程方法可以说来的容易,用得方便。也是一种好的访问远程数据方法。
方法四:
这种方法是使用API方法,下面是一个实例
              '分配环境句柄
          res = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HENV, hEnv)  
          '设置环境属性
              res = SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, SQL_OV_ODBC3, 0)
              '分配数据库连接句柄
              res = SQLAllocHandle(SQL_HANDLE_DBC, hEnv, hSvr)
          '连接到数据源
          sConnect=“DSN=pubs;DATABASE=pubs“
          res=SQLDriverConnect(hSvr,ByVal,0&,sConnect,Len(sConnect),sConnOut,
      Len(sConnOut), _ nConnOutLen, 0)
          sSql =“select * from authors“
          res = SQLExecDirect(hSel, sSql, Len(sSql))
          '将记录返回当前表里
          res=SQLNumResultCols(hSel, Nc)
          Do While (SQLFetch(hSel) <> SQL_NO_DATA_FOUND)
          J=j+1
          FOR I=1 TO Nc
             res = SQLGetData(hSel, I, SQL_C_CHAR, tmp, 512, pl)
             Cells(j, i) =tmp
          Next I
          Loop
          '释放数据库连接句柄
                res = SQLAllocHandle(SQL_HANDLE_STMT, hSvr, hSel)
          '释放数据库连接句柄
                ret = SQLFreeHandle(SQL_HANDLE_ENV, hEnv)
这种方法比较复杂,调试也比较困难,但运行速度快,在进行大量查询数据和自己在API调用方面比较熟时,可以用这个方法。在用上面的实例时,要做API声明和常量的定义。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
在VBA中使用SQL必须要知道的几点
Excel VBA ADO SQL入门教程003:字段的查询
Excel | 如何运用VBA+ADO使EXCEL和ACCESS进行数据交互 | ADO,ACCESS,数据交互,EXCEL,VBA
Access/VBA/Excel-数据库-01
HOW TO:将数据从 Microsoft SQL Server 导入 Microsoft Excel
【VBA与MySql】VBA与MySql数据库连接获取数据
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服