ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: henrry

[分享]利用ADO建立EXCEL与SQL SERVER、ACCESS的联系,可以导入、导出EXCEL数据

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2004-3-12 14:43 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖已被收录到知识树中,索引项:ADO技术
使用对象的 ADO 编程模型
ADO 的目标是访问、编辑和更新数据源,而编程模型体现了为完成该目标所必需的系列动作的顺序。ADO 提供类和对象以完成以下活动: 连接到数据源 (Connection),并可选择开始一个事务。
可选择创建对象来表示 SQL 命令 (Command)。
可选择在 SQL 命令中指定列、表和值作为变量参数 (Parameter)。
执行命令 (Command、Connection 或 Recordset)。
如果命令按行返回,则将行存储在缓存中 (Recordset)。
可选择创建缓存视图,以便能对数据进行排序、筛选和定位 (Recordset)。
通过添加、删除或更改行和列编辑数据 (Recordset)。
在适当情况下,使用缓存中的更改内容来更新数据源 (Recordset)。
如果使用了事务,则可以接受或拒绝在完成事务期间所作的更改。结束事务 (Connection)。

TA的精华主题

TA的得分主题

发表于 2004-3-12 15:18 | 显示全部楼层
henrry兄:   能否做个Excel往SQL server 里倒数据的例子?还有用update语句更新数据库后怎样做个msgbox用来提示几行受到影响。

TA的精华主题

TA的得分主题

 楼主| 发表于 2004-3-12 15:51 | 显示全部楼层
做了注释的简化程序: Sub insertData()
Dim Conn As New ADODB.Connection
Dim Rs As New ADODB.Recordset
Dim I%, strTemp$, strTemp2$, RowNum%
Dim wkSheet As Worksheet


I = MsgBox("确认要导入数据吗?", vbYesNo)
If I = 7 Then
Exit Sub
End If

'建立与SQL的连接
Conn.Open "provider=sqloledb.1;persist security info=false;user id=用户名;pwd=口令;data source=192.168.2.2;initial catalog=首选数据库" Application.ScreenUpdating = False
Set wkSheet = Worksheets("Check")
wkSheet.Activate
'找出不为空的需要倒入SQL的数据
RowNum = Range("a1").End(xlUp).Row '开始倒数据 '直接插入数据表
Conn.BeginTrans '开始一个事务,防止别人同时操作同一个表
For I = 2 To RowNum
If wkSheet.Cells(I, 4).Value <> "" Then
'拼写INSERT语句的SQL语句
strTemp = "insert into tclass (name,code) "
strTemp = strTemp & " vaues('" & wkSheet.Cells(I, 1).Value & ",'" & wkSheet.Cells(I, 2).Value & "')"
'执行INSERT语句
Conn.Execute strTemp
End If
Next
Conn.CommitTrans '结束插入操作的事务

ThisWorkbook.Save
'显示需要替换的记录条数
Rs.Open "select count(*) from tclass where tclass.sdate is null", Conn, adOpenKeyset
MsgBox "需要替换的记录条数:" & Str(Rs.RecordCount)
Rs.Close

'将表中的日期字段填上
Conn.Execute "update tclass set tclass.sdate=" & Format(Date, "yyyy-mm-dd") & " where tclass.sdate is null"
Conn.Close '关闭链接
Set Rs = Nothing '释放内存
Set Conn = Nothing '释放内存

Set wkSheet = Nothing
Application.ScreenUpdating = True
MsgBox "导入完毕!"
End Sub

TA的精华主题

TA的得分主题

发表于 2004-3-12 16:29 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
非常感谢,要学好一阵了 Provider=msdaora  是对ORACELR连接,如我的ORACLE数据库名为SWDB,在上面的代码中,怎么没看到运用这个库名啊?

TA的精华主题

TA的得分主题

 楼主| 发表于 2004-3-12 16:38 | 显示全部楼层
oracel我不熟悉,在SQL SERVER中 Conn.Open "provider=sqloledb.1;persist security info=false;user id=用户名;pwd=口令;data source=192.168.2.2;initial catalog=首选数据库" 如果首选数据库没有定义,则在SQL语句中要要定义,如: select * from 数据库名.dbo.数据表名 这种情况用于一个连接操作多个数据库的情况 如果只操作一个数据库,initial catalog=首选数据库,就要定义缺省的连接数据库

TA的精华主题

TA的得分主题

发表于 2004-3-12 16:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
谢谢楼主

TA的精华主题

TA的得分主题

发表于 2004-3-12 23:27 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
真的不错。

TA的精华主题

TA的得分主题

发表于 2004-3-12 23:32 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2004-3-15 08:41 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
VB6.0用ADO连接Sybase数据库采用OLE DB For ODBC Driver 新建工程,在工程菜单中引用Microsoft ActiveX Data Object 2.0 Library Public cnTest As New ADODB.Connection '声明ADO连接对象,为工程级全局变量 '连接子程序 Public Function connectSybase() As Boolean On Error GoTo ErrHandle Dim strConnect As String '通过下句与ODBC数据源进行连接,不需用户选择数据源 strConnect="Provider=MSDASQL.1;DRIVER={Sybase System 11}; " _ ' & " Persist Security Info=False;DSN=;" _ & " SRVR=WIND;DB=master;UID=sa;PWD=password" 'Persist Security是否采用集成安全机制 connectSybase = True Exit Function ErrHandle: connectSybase = False End Function
Private Sub Form_Load() Dim rsTest As New ADODB.Recordset Dim strSQL As String If connectSybase Then strSQL = "Select * from sysusers" 'strSQL可以是SQL语句(块),存储过程 rsTest.CursorLocation = adUseClient rsTest.Open strSQL, cnTest 'cnTest为打开的活动的连接 Else MsgBox "打开数据库失败" Exit Sub End If Do Until rsTest.EOF Debug.Print rsTest.Fields(0), rsTest.Fields(1) rsTest.MoveNext Loop End Sub

TA的精华主题

TA的得分主题

发表于 2004-3-15 10:48 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
高手啊!高手!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-23 23:10 , Processed in 0.036180 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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