VBA连接MYSQL数据库(转载有修改)
2015-10-16 11:17
549 查看
常应该这样用conn.execute(sql) ,conn也就是一个ADODB.Connection对象的实例。
ADO是Active Data Object的缩写,称为ActiveX数据对象。
利用ADO对象,通过ODBC驱动程序或OLE DB连接字符串,可实现对任意数据库的存取和访问。
OLE DB是微软用来替代ODBC的一种数据库访问技术,是一种对关系型数据库和非关系型数据库均有效的一种数据库访问技术。
ADO提供了7个独立的对象,利用这些对象,可实现对数据库的存取和访问:
·Connection 连接对象
·Command 命令对象。利用命令对象可执行一个SQL存储过程或有参数的查询
·Parameter 参数对象
·Recordset 记录集对象,代表从数据表中通过查询所获得的一组记录。通过该对象的方法和属性,可实现对记录的存取和操作。
·Field 字段对象,代表记录集中的一个字段。Fields为字段集合,代表一条记录的全部字段
·Property 属性对象
·Error 错误对象
Connection,Command和Recordset是整个ADO的核心,通过Connection对象与一个数据库建立连接,然后利用Command对象执行查询,从而返回查询结果,并将结果(记录集)存入Recordset对象中,利用服务器端脚本,通过访问Recordset对象,便可获得查询到的记录内容。
另外,利用Connection对象的Execute(执行)方法和Recordset对象的Open(打开)方法,也可执行一个查询,返回一个记录集。
ODBC数据源的用户数据源,系统数据源和文件数据源
原名:Data Source Name 中文名:数据源名称
DSN为ODBC定义了一个确定的数据库和必须用到的ODBC驱动程序。每个ODBC驱动程序定义为该驱动程序支持的一个数据库创建DSN需要的信息。就是说安装ODBC驱动程序以及创建一个数据库之后,必须创建一个DSN。
一个DSN可以定义为以下3种类型中的任意一种:
★用户数据源:这个数据源对于创建它的计算机来说是局部的,并且只能被创建它的用户使用。
★系统数据源:这个数据源属于创建它的计算机并且是属于这台计算机而不是创建它的用户。任何用户只要拥有适当的权限都可以访问这个数据源。
★文件数据源:这个数据源对底层的数据库文件来说是确定的。换句话说,这个数据源可以被任何安装了合适的驱动程序的用户使用。
用户和系统DSN存储在WindowsNT注册表中,系统DSN可被登录的所有用户访问和使用,用户DSN只能提供特定的用户访问和使用。文件DSN是存储在一个扩展名为.dsn的文本文件中,可供多个用户访问和使用,并可实现复制,通用性强,一般采用此方式。
ADO连接对象
连接对象在使用前必须先创建该对象的实例:
Set 实例名=Server.CreateObject("ADODB.Connection")
连接对象的方法:
·Open方法
连接对象.Open 数据源名 | 连接字符串
带参数调用Open方法时,其参数实质是传递给连接对象的Connection String属性的。因此,可事先设置Connection String属性的值,然后再调用不带参数的Open方法
·Close方法
连接对象.Close 释放:Set conn=Nothing
·Execute方法
该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集,该方法的使用格式分为以下两种:
1.执行SQL查询语句时,将返回查询得到的记录集。用法为:
Set 对象变量名=连接对象.Execute("SQL 查询语言")
Execute方法调用后,会自动创建记录集对象,并将查询结果存储在该记录对象中,通过Set方法,将记录集赋给指定的对象保存,以后对象变量就代表了该记录集对象。
2.执行SQL的操作性语言时,没有记录集的返回。此时用法为:
连接对象.Execute "SQL 操作性语句" [, RecordAffected][, Option]
·RecordAffected 为可选项,此出可放置一个变量,SQL语句执行后,所生效的记录数会自动保存到该变量中。通过访问该变量,就可知道SQL语句队多少条记录进行了操作。
·Option 可选项,该参数的取值通常为adCMDText,它用于告诉ADO,应该将Execute方法之后的第一个字符解释为命令文本。通过指定该参数,可使执行更高效。
·BeginTrans、RollbackTrans、CommitTrans方法
这三个方法是连接对象提供的用于事务处理的方法。BeginTrans用于开始一个事物;RollbackTrans用于回滚事务;CommitTrans用于提交所有的事务处理结果,即确认事务的处理。
事务处理可以将一组操作视为一个整体,只有全部语句都成功执行后,事务处理才算成功;若其中有一个语句执行失败,则整个处理就算失败,并恢复到处里前的状态。
BeginTrans和CommitTrans用于标记事务的开始和结束,在这两个之间的语句,就是作为事务处理的语句。判断事务处理是否成功,可通过连接对象的Error集合来实现,若Error集合的成员个数不为0,则说明有错误发生,事务处理失败。Error集合中的每一个Error对象,代表一个错误信息。
另外,利用SQL本身所提供的事务处理语句,通过编写存储过程,然后利用ADO命令对象的相关方法,通过调用执行存储过程,也可实现事务。
连接对象的常用属性:
属性名
CommandTimeOut 设置Execute方法的最长执行时间,默认为30秒。设置为0,无限制。
ConnectionTimeOut 设置Open方法的最长执行时间,默认为15秒。设置为0,无限制。
ConnectionString 设置连接对象的链接信息,如DSN、提供者、用户名、口令等。
例子:
代码编程方式(利用call语句,将多个编程过程进行拆分)
(1) 连接到所需要的数据库
Public Sub ValidatePersonName() ' 调用数据库中用户的姓名
’步骤 1 先打开数据库 2 再根据任务要求提出相对应的数据 3 关闭数据库连接
Call db_util.open_mysql_db
Call clientmgr_service.ValidatePersonName
Call db_util.close_db
End Sub
Public Db_sevip, Db_name, Db_user, Db_pwd As String '设置具体数据库
Public db_connection As ADODB.Connection '定义数据库连接
Public Sub open_mysql_db() ‘开sql数据源 设置链接方式
Call set_db_config '调用数据源的配置
Dim strConn As String ’设置数据库链接字段
strConn = "Driver={MySQL ODBC 5.2 Unicode Driver};" & "Server=ip;" & "database=name;" & "USER=user;" & "PASSWORD=pw;" & "OPTION=3;"
Debug.Print strConn
Set db_connection = New ADODB.Connection
db_connection.Open (strConn)
End Sub
(2)例:对excel表进行操作
常见的excel命令
’Set xlApp = CreateObject("Excel.Application") '创建Excel对象
Set xlBook = xlApp.Workbooks.Open("文件名") '打开已经存在的Excel工件簿文件
xlApp.Visible = True '设置Excel对象可见(或不可见)
Set xlSheet = xlBook.Worksheets("表名") '设置活动工作表
xlSheet.Cells(row, col) =值 '给单元格(row,col)赋值
xlSheet.PrintOut '打印工作表
xlBook.Close (True) '关闭工作簿
xlApp.Quit '结束Excel对象
Set xlApp = Nothing '释放xlApp对象
xlBook.RunAutoMacros (xlAutoOpen) '运行Excel启动宏
xlBook.RunAutoMacros (xlAutoClose) '运行Excel关闭宏
Public Sub UpdateCommission() '假定文件格式为'invest_order_sn commission 提示'假定数据从第2行、第1列开始
Dim xlApp As Excel.Application ‘在通用对象的声明过程中定义Excel对象
Dim xlBook As Excel.Workbook
Dim sheet As Excel.Worksheet
Set xlApp = New Excel.Application ‘设置新的表格对象
Set xlBook = ThisWorkbook
Set sheet = xlBook.ActiveSheet
Dim first_column, row, column, row_cnt As Long
first_column = 1
row_cnt = LastRow(sheet)
rows_loop:
For row = 2 To row_cnt Step 1
row_proc_start:
Dim warning As String
Dim count As Long
Dim iosn_str As String
iosn_str = Trim(sheet.Cells(row, first_column))
If Not IsNumeric(iosn_str) Then
sheet.Cells(row, first_column + 3) = "错误:交易sn并非数值"
GoTo row_proc_end
End If
Dim io_sn As Long
io_sn = CLng(iosn_str)
Dim com_str As String
com_str = Trim(sheet.Cells(row, first_column + 1))
If Not IsNumeric(com_str) Then
sheet.Cells(row, first_column + 3) = "错误:commission并非数值"
GoTo row_proc_end
End If
Dim com As Double
com = CDbl(com_str)
If Not Is_exist_invest_order(io_sn) Then
sheet.Cells(row, first_column + 3) = "错误:没有此交易sn"
Else
If Is_exist_commission(io_sn) Then
Call dao_module.Update_commission(io_sn, com)
sheet.Cells(row, first_column + 3) = "成功:佣金已更新"
Else
Call dao_module.Insert_commission(io_sn, com)
sheet.Cells(row, first_column + 3) = "成功:佣金已写入"
End If
End If
row_proc_end:
Next
MsgBox ("交易佣金,更新完毕")
End Sub
Private Function Is_exist_invest_order(io_sn As Long) As Boolean
Is_exist_invest_order = dao_module.count_investOrder(io_sn) = 1
End Function
Private Function Is_exist_commission(io_sn As Long) As Boolean
Is_exist_commission = dao_module.count_commission(io_sn) = 1
End Function
ADO是Active Data Object的缩写,称为ActiveX数据对象。
利用ADO对象,通过ODBC驱动程序或OLE DB连接字符串,可实现对任意数据库的存取和访问。
OLE DB是微软用来替代ODBC的一种数据库访问技术,是一种对关系型数据库和非关系型数据库均有效的一种数据库访问技术。
ADO提供了7个独立的对象,利用这些对象,可实现对数据库的存取和访问:
·Connection 连接对象
·Command 命令对象。利用命令对象可执行一个SQL存储过程或有参数的查询
·Parameter 参数对象
·Recordset 记录集对象,代表从数据表中通过查询所获得的一组记录。通过该对象的方法和属性,可实现对记录的存取和操作。
·Field 字段对象,代表记录集中的一个字段。Fields为字段集合,代表一条记录的全部字段
·Property 属性对象
·Error 错误对象
Connection,Command和Recordset是整个ADO的核心,通过Connection对象与一个数据库建立连接,然后利用Command对象执行查询,从而返回查询结果,并将结果(记录集)存入Recordset对象中,利用服务器端脚本,通过访问Recordset对象,便可获得查询到的记录内容。
另外,利用Connection对象的Execute(执行)方法和Recordset对象的Open(打开)方法,也可执行一个查询,返回一个记录集。
ODBC数据源的用户数据源,系统数据源和文件数据源
原名:Data Source Name 中文名:数据源名称
DSN为ODBC定义了一个确定的数据库和必须用到的ODBC驱动程序。每个ODBC驱动程序定义为该驱动程序支持的一个数据库创建DSN需要的信息。就是说安装ODBC驱动程序以及创建一个数据库之后,必须创建一个DSN。
一个DSN可以定义为以下3种类型中的任意一种:
★用户数据源:这个数据源对于创建它的计算机来说是局部的,并且只能被创建它的用户使用。
★系统数据源:这个数据源属于创建它的计算机并且是属于这台计算机而不是创建它的用户。任何用户只要拥有适当的权限都可以访问这个数据源。
★文件数据源:这个数据源对底层的数据库文件来说是确定的。换句话说,这个数据源可以被任何安装了合适的驱动程序的用户使用。
用户和系统DSN存储在WindowsNT注册表中,系统DSN可被登录的所有用户访问和使用,用户DSN只能提供特定的用户访问和使用。文件DSN是存储在一个扩展名为.dsn的文本文件中,可供多个用户访问和使用,并可实现复制,通用性强,一般采用此方式。
ADO连接对象
连接对象在使用前必须先创建该对象的实例:
Set 实例名=Server.CreateObject("ADODB.Connection")
连接对象的方法:
·Open方法
连接对象.Open 数据源名 | 连接字符串
带参数调用Open方法时,其参数实质是传递给连接对象的Connection String属性的。因此,可事先设置Connection String属性的值,然后再调用不带参数的Open方法
·Close方法
连接对象.Close 释放:Set conn=Nothing
·Execute方法
该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集,该方法的使用格式分为以下两种:
1.执行SQL查询语句时,将返回查询得到的记录集。用法为:
Set 对象变量名=连接对象.Execute("SQL 查询语言")
Execute方法调用后,会自动创建记录集对象,并将查询结果存储在该记录对象中,通过Set方法,将记录集赋给指定的对象保存,以后对象变量就代表了该记录集对象。
2.执行SQL的操作性语言时,没有记录集的返回。此时用法为:
连接对象.Execute "SQL 操作性语句" [, RecordAffected][, Option]
·RecordAffected 为可选项,此出可放置一个变量,SQL语句执行后,所生效的记录数会自动保存到该变量中。通过访问该变量,就可知道SQL语句队多少条记录进行了操作。
·Option 可选项,该参数的取值通常为adCMDText,它用于告诉ADO,应该将Execute方法之后的第一个字符解释为命令文本。通过指定该参数,可使执行更高效。
·BeginTrans、RollbackTrans、CommitTrans方法
这三个方法是连接对象提供的用于事务处理的方法。BeginTrans用于开始一个事物;RollbackTrans用于回滚事务;CommitTrans用于提交所有的事务处理结果,即确认事务的处理。
事务处理可以将一组操作视为一个整体,只有全部语句都成功执行后,事务处理才算成功;若其中有一个语句执行失败,则整个处理就算失败,并恢复到处里前的状态。
BeginTrans和CommitTrans用于标记事务的开始和结束,在这两个之间的语句,就是作为事务处理的语句。判断事务处理是否成功,可通过连接对象的Error集合来实现,若Error集合的成员个数不为0,则说明有错误发生,事务处理失败。Error集合中的每一个Error对象,代表一个错误信息。
另外,利用SQL本身所提供的事务处理语句,通过编写存储过程,然后利用ADO命令对象的相关方法,通过调用执行存储过程,也可实现事务。
连接对象的常用属性:
属性名
CommandTimeOut 设置Execute方法的最长执行时间,默认为30秒。设置为0,无限制。
ConnectionTimeOut 设置Open方法的最长执行时间,默认为15秒。设置为0,无限制。
ConnectionString 设置连接对象的链接信息,如DSN、提供者、用户名、口令等。
例子:
代码编程方式(利用call语句,将多个编程过程进行拆分)
(1) 连接到所需要的数据库
Public Sub ValidatePersonName() ' 调用数据库中用户的姓名
’步骤 1 先打开数据库 2 再根据任务要求提出相对应的数据 3 关闭数据库连接
Call db_util.open_mysql_db
Call clientmgr_service.ValidatePersonName
Call db_util.close_db
End Sub
Public Db_sevip, Db_name, Db_user, Db_pwd As String '设置具体数据库
Public db_connection As ADODB.Connection '定义数据库连接
Public Sub open_mysql_db() ‘开sql数据源 设置链接方式
Call set_db_config '调用数据源的配置
Dim strConn As String ’设置数据库链接字段
strConn = "Driver={MySQL ODBC 5.2 Unicode Driver};" & "Server=ip;" & "database=name;" & "USER=user;" & "PASSWORD=pw;" & "OPTION=3;"
Debug.Print strConn
Set db_connection = New ADODB.Connection
db_connection.Open (strConn)
End Sub
(2)例:对excel表进行操作
常见的excel命令
’Set xlApp = CreateObject("Excel.Application") '创建Excel对象
Set xlBook = xlApp.Workbooks.Open("文件名") '打开已经存在的Excel工件簿文件
xlApp.Visible = True '设置Excel对象可见(或不可见)
Set xlSheet = xlBook.Worksheets("表名") '设置活动工作表
xlSheet.Cells(row, col) =值 '给单元格(row,col)赋值
xlSheet.PrintOut '打印工作表
xlBook.Close (True) '关闭工作簿
xlApp.Quit '结束Excel对象
Set xlApp = Nothing '释放xlApp对象
xlBook.RunAutoMacros (xlAutoOpen) '运行Excel启动宏
xlBook.RunAutoMacros (xlAutoClose) '运行Excel关闭宏
Public Sub UpdateCommission() '假定文件格式为'invest_order_sn commission 提示'假定数据从第2行、第1列开始
Dim xlApp As Excel.Application ‘在通用对象的声明过程中定义Excel对象
Dim xlBook As Excel.Workbook
Dim sheet As Excel.Worksheet
Set xlApp = New Excel.Application ‘设置新的表格对象
Set xlBook = ThisWorkbook
Set sheet = xlBook.ActiveSheet
Dim first_column, row, column, row_cnt As Long
first_column = 1
row_cnt = LastRow(sheet)
rows_loop:
For row = 2 To row_cnt Step 1
row_proc_start:
Dim warning As String
Dim count As Long
Dim iosn_str As String
iosn_str = Trim(sheet.Cells(row, first_column))
If Not IsNumeric(iosn_str) Then
sheet.Cells(row, first_column + 3) = "错误:交易sn并非数值"
GoTo row_proc_end
End If
Dim io_sn As Long
io_sn = CLng(iosn_str)
Dim com_str As String
com_str = Trim(sheet.Cells(row, first_column + 1))
If Not IsNumeric(com_str) Then
sheet.Cells(row, first_column + 3) = "错误:commission并非数值"
GoTo row_proc_end
End If
Dim com As Double
com = CDbl(com_str)
If Not Is_exist_invest_order(io_sn) Then
sheet.Cells(row, first_column + 3) = "错误:没有此交易sn"
Else
If Is_exist_commission(io_sn) Then
Call dao_module.Update_commission(io_sn, com)
sheet.Cells(row, first_column + 3) = "成功:佣金已更新"
Else
Call dao_module.Insert_commission(io_sn, com)
sheet.Cells(row, first_column + 3) = "成功:佣金已写入"
End If
End If
row_proc_end:
Next
MsgBox ("交易佣金,更新完毕")
End Sub
Private Function Is_exist_invest_order(io_sn As Long) As Boolean
Is_exist_invest_order = dao_module.count_investOrder(io_sn) = 1
End Function
Private Function Is_exist_commission(io_sn As Long) As Boolean
Is_exist_commission = dao_module.count_commission(io_sn) = 1
End Function
相关文章推荐
- JDBC与MySql:手把手教你JDBC入门
- mysql 数据库分区
- servlet中访问mysql无法包含中文的解决
- mysql语句总结
- mysql远程访问
- mysql优化基础
- mysql使用
- 学习MySQL——下载与安装
- mysql sql中类似转换引起的索引无法使用的问题
- mysql性能优化建议
- mysqldump 的用法
- 17.3.1.1 Backing Up a Slave Using mysqldump
- Amoeba搞定mysql主从读写分离
- mysql windows 系统服务
- MySQL存储引擎--MyISAM与InnoDB区别
- MySQL proxy读写分离
- mysql5.6源码编译安装
- mysql 学习记录(十二)--触发器
- MYSQL基础02(查询)
- 彻底删除mysql