【MySQL + VBA】从Access将数据update到MySQL
MS Access, MySQL, Ado
一. Access连接到MySQL:
在本机状态下,用mysql(8.0)做后台,用Access(2019)做前端`
并在VBA界面中,点『运行』-『引用』-microsoft activex data objects 6.1 library,做好ADO的引用
连接MySQL的准备
Option Compare Database
Option Explicit
Const MYDRIVER = "Driver={MySQL ODBC 8.0 Unicode Driver};" '驱动程序
Const MYSERVER = "Server=127.0.0.1;" '服务器
Const MYPORT = "Port=3306;" '端口
Const MYDATABASE = "Database=abc;" 'MySQL数据库名称
Const MYUSER = "User=root;" '用户名
Const MYPASS = "PWD=123456789abcd;" 'Mysql密码
Public constr As String
ADO的定义
在Option Compare Database下
Public cn As New ADODB.Connection
Public rs As New ADODB.Recordset
组装连接MySQL的准备
constr = MYDRIVER & MYSERVER & MYPORT & MYDATABASE & MYUSER & MYPASS
cn.ConnectionString = constr
cn.Open
二、update
1. 不同字段多条件或一个条件更新
Dim strSQL1 As String
strSQL1 = "UPDATE Mesa_面试者 SET " & _
"招聘渠道汇总 = If(招聘渠道 In ('前程无忧','拉勾','智联','Boss直聘','猎聘','人才热线','58同城'),'网络招聘','推荐'), " & _
"期望薪酬=replace(期望薪酬,'元/月',''), " & _
"电话=replace(电话,'+86 ','')
2. 同一字段多条件update
Dim strSQL2 As String
strSQL2 = "UPDATE Mesa_面试者 SET 工作经验 = CASE " & _
"when 工作经验 Like '*年*'then replace(工作经验,'年','') " & _
"when 工作经验 Like '*以上*'then replace(工作经验,'以上','') " & _
"when 工作经验 Like '*工作经验*'then replace(工作经验,'工作经验','') " & _
"when 工作经验 Like '*暂无工作经验*' then '0' " & _
"when 工作经验 Like '*在读学生*' then '0' " & _
"WHEN 工作经验='3' THEN '3~4' " & _
"WHEN 工作经验='4' THEN '3~4' " & _
"WHEN 工作经验='5' THEN '5~7' " & _
"WHEN 工作经验='6' THEN '5~7' " & _
"WHEN 工作经验='7' THEN '5~7' " & _
"WHEN 工作经验='8' THEN '8~9' " & _
"WHEN 工作经验='9' THEN '8~9' " & _
"WHEN 工作经验='10' THEN '10~15' " & _
"WHEN 工作经验='11' THEN '10~15' " & _
"WHEN 工作经验='12' THEN '10~15' " & _
"WHEN 工作经验='13' THEN '10~15' " & _
"WHEN 工作经验='14' THEN '10~15' " & _
"WHEN 工作经验='15' THEN '10~15' " & _
"Else 工作经验 " & _
"END;"
三、执行
Dim cm_1 As New ADODB.Command '创建一个Command对象的实例
cm_1.ActiveConnection = cn
cm_1.CommandText = strSQL1
cm_1.Execute
Dim cm_2 As New ADODB.Command '创建一个Command对象的实例
cm_2.ActiveConnection = cn
cm_2.CommandText = strSQL2
cm_2.Execute
四、释放内存
Set cm_1 = Nothing
Set cm_2 = Nothing
cn.Close: Set cn = Nothing
五、完整代码
Option Compare Database
Option Explicit
'连接MySQL的准备
Const MYDRIVER = "Driver={MySQL ODBC 8.0 Unicode Driver};" '驱动程序
Const MYSERVER = "Server=127.0.0.1;" '服务器
Const MYPORT = "Port=3306;" '端口
Const MYDATABASE = "Database=abc;" 'MySQL数据库名称
Const MYUSER = "User=root;" '用户名
Const MYPASS = "PWD=123456789abcd;" 'Mysql密码
Public constr As String
'ADO的定义
Public cn As New ADODB.Connection
Public rs As New ADODB.Recordset
Private Sub Command0_Click()
'组装连接MySQL的准备
constr = MYDRIVER & MYSERVER & MYPORT & MYDATABASE & MYUSER & MYPASS
cn.ConnectionString = constr
cn.Open
'update
'1. 不同字段多条件或一个条件更新
Dim strSQL1 As String
strSQL1 = "UPDATE Mesa_面试者 SET " & _
"招聘渠道汇总 = If(招聘渠道 In ('前程无忧','拉勾','智联','Boss直聘','猎聘','人才热线','58同城'),'网络招聘','推荐'), " & _
"期望薪酬=replace(期望薪酬,'元/月',''), " & _
"电话=replace(电话,'+86 ','') "
'2. 同一字段多条件update
Dim strSQL2 As String
strSQL2 = "UPDATE Mesa_面试者 SET 工作经验 = CASE " & _
"when 工作经验 Like '*年*'then replace(工作经验,'年','') " & _
"when 工作经验 Like '*以上*'then replace(工作经验,'以上','') " & _
"when 工作经验 Like '*工作经验*'then replace(工作经验,'工作经验','') " & _
"when 工作经验 Like '*暂无工作经验*' then '0' " & _
"when 工作经验 Like '*在读学生*' then '0' " & _
"WHEN 工作经验='3' THEN '3~4' " & _
"WHEN 工作经验='4' THEN '3~4' " & _
"WHEN 工作经验='5' THEN '5~7' " & _
"WHEN 工作经验='6' THEN '5~7' " & _
"WHEN 工作经验='7' THEN '5~7' " & _
"WHEN 工作经验='8' THEN '8~9' " & _
"WHEN 工作经验='9' THEN '8~9' " & _
"WHEN 工作经验='10' THEN '10~15' " & _
"WHEN 工作经验='11' THEN '10~15' " & _
"WHEN 工作经验='12' THEN '10~15' " & _
"WHEN 工作经验='13' THEN '10~15' " & _
"WHEN 工作经验='14' THEN '10~15' " & _
"WHEN 工作经验='15' THEN '10~15' " & _
"Else 工作经验 " & _
"END;"
'执行
Dim cm_1 As New ADODB.Command '创建一个Command对象的实例
cm_1.ActiveConnection = cn
cm_1.CommandText = strSQL1
cm_1.Execute
Dim cm_2 As New ADODB.Command '创建一个Command对象的实例
cm_2.ActiveConnection = cn
cm_2.CommandText = strSQL2
cm_2.Execute
'释放内存
Set cm_1 = Nothing
Set cm_2 = Nothing
cn.Close: Set cn = Nothing
end sub