VBA连接MYSQL数据库(转载有修改)常应该这样⽤ute(sql) ,conn也就是⼀个ADODB.Connection对象的实例。
ADO是Active Data Object的缩写,称为ActiveX数据对象。
利⽤ADO对象,通过ODBC驱动程序或OLE DB连接字符串,可实现对任意数据库的存取和访问。
OLE DB是微软⽤来替代ODBC的⼀种数据库访问技术,是⼀种对关系型数据库和⾮关系型数据库均有效的⼀种数据库访问技术。
ADO提供了7个独⽴的对象,利⽤这些对象,可实现对数据库的存取和访问:
mysql下载app ·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 = unt_investOrder(io_sn) = 1 End Function
Private Function Is_exist_commission(io_sn As Long) As Boolean Is_exist_commission = unt_commission(io_sn) = 1 End Function
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论