最近使用VBA连接MySQL数据库比较多,总结出一些书写方面的注意事项,分享出来,希望能给大家一些提示,同时也给自己做个备忘。
1、单引号/双引号
在标准SQL语句中,字符串使用的是单引号,但是MySQL中,单引号和双引号都适用,平时使用时也未明确区分,有时候单,有时候双,但是在VBA中写SQL语句时,一定要使用单引号,否则报错(VBA中字符串使用双引号,如果都用双引号,别说人了,系统都分不清了)。
2、反引号
在MySQL中,反引号``代表其中的内容是数据库名、表名、字段名等,可省略,但是在VBA中写SQL语句时,一定要加上反引号,否则程序无法解析。
3、行数问题
SQL语句中没有行数限制的要求,实际上,在SQL中,鼓励通过换行和缩进来使语句结构更加清晰易读,特别是涉及子查询或连接的时候,一条SQL语句可能会换很多行。
但是在VBA中,一条语句如果超过25行(使用超过 24 个换行符),将无法继续书写,这时候可以考虑拆分为多个语句单独执行。
4、执行多条语句
有时候我们希望执行多条SQL语句,然后仅将最后一条的执行结果返回,此时涉及SQL语句的两种写法。
(1)执行单条语句,并将结果返回,如下:
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset
conn.ConnectionString = "Driver={MySQL ODBC 8.0 Unicode Driver};Server=127.0.0.1;DB=test;UID=root;PWD=******;OPTION=3;" '配置连接串
conn.Open
rs.Open "SELECT * FROM `demo`", conn
mysheet.Range("A1")..CopyFromRecordset rs
rs.Close
Set rs = Nothing
conn.Close
Set conn = Nothing
(2)执行单条/多条语句,并将结果返回,如下:
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim strSQL1, strSQL2, strSQL3 As String
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset
conn.ConnectionString = "Driver={MySQL ODBC 8.0 Unicode Driver};Server=127.0.0.1;DB=test;UID=root;PWD=******;OPTION=3;" '配置连接串
conn.Open
strSQL1 = "DROP TABLE IF EXISTS `demo2`"
strSQL2 = "CREATE TABLE `demo2` AS (SELECT * FROM `demo`)"
strSQL3 = "SELECT * FROM `demo2`"
conn.Execute (strSQL1)
conn.Execute (strSQL2)
Set rs = conn.Execute(strSQL3)
Set rs = Nothing
conn.Close
Set conn = Nothing
此为在已执行strSQL1、strSQL2的前提下,执行strSQL3,然后将strSQL3的执行结果返回。