Office中国论坛/Access中国论坛

标题: 读如何在VBA中编写含有变量的SQL语句而不易出错有感 [打印本页]

作者: fan0217    时间: 2017-3-11 15:47
标题: 读如何在VBA中编写含有变量的SQL语句而不易出错有感
本帖最后由 fan0217 于 2017-3-11 15:52 编辑

红尘如烟帖子有感:
http://www.office-cn.net/thread-122658-1-1.html

提供另外一种方法,此方法在论坛以前发表过,老生常谈了。

先在模块中建一个函数,如下:
  1. Public Function ArrayFormat(expression As String, ParamArray formatException()) As String
  2.    Dim strFind As String, strReplace As String, strTemp As String
  3.    Dim i As Integer
  4.    strTemp = expression
  5.    For i = 0 To UBound(formatException)
  6.         strFind = "{" & i & "}": strReplace = formatException(i)
  7.         strTemp = Replace(strTemp, strFind, strReplace)
  8.    Next
  9.    ArrayFormat = strTemp
  10. End Function
复制代码

然后开始编写含有变量的SQL语句:

  1. Sub Test()
  2.     Dim strSQL As String
  3.     strSQL = "INSERT INTO 凭证记录表 (状态,日期,制单人,制单时间,关联单号) VALUE ('{0}', '{1}',#{2}#,'{3}')"
  4.     strSQL = ArrayFormat(strSQL, "未审核", "Nickname", Now(), "No001")
  5.     Debug.Print strSQL
  6. End Sub
复制代码
运行,立即窗体显示:


INSERT INTO 凭证记录表 (状态,日期,制单人,制单时间,关联单号) VALUE ('未审核', 'Nickname',#2017/3/11 15:43:44#,'No001')



这样可很方便的实现SQL拼接字符串的功能。





作者: zpy2    时间: 2017-3-11 16:16
👍看着像.net的写法
作者: netguestcn    时间: 2017-3-11 17:49
功力不够,有点看不明白,先收藏,再研究、使用
作者: tmtony    时间: 2017-3-11 18:57
fans也来助阵了!
赞一个
作者: roych    时间: 2017-3-11 19:07
fans也来助阵了!
赞一个
不过语句应该是VALUES
INSERT INTO 凭证记录表 (状态,日期,制单人,制单时间,关联单号) VALUE ('未审核', 'Nickname',#2017/3/11 15:43:44#,'No001')

INSERT INTO 凭证记录表 (状态,日期,制单人,制单时间,关联单号) VALUES ('未审核', 'Nickname',#2017/3/11 15:43:44#,'No001')
作者: 红尘如烟    时间: 2017-3-11 20:47
哈哈,fan的是进阶版
作者: fan0217    时间: 2017-3-11 20:50
roych 发表于 2017-3-11 19:07
fans也来助阵了!
赞一个
不过语句应该是VALUES:

我搬的红尘如烟的代码,
作者: a63521557    时间: 2017-3-12 00:00
本帖最后由 a63521557 于 2017-3-12 00:06 编辑
roych 发表于 2017-3-11 19:07
fans也来助阵了!
赞一个
不过语句应该是VALUES:


大赞!学习领会了。

再完善两语句:
Public Function ArrayFormat(expression As String, ParamArray formatException()) As String
应为:
Public Function ArrayFormat(ByVal expression As String, ParamArray formatException()) As String

strSQL = "INSERT INTO 凭证记录表 (状态,日期,制单人,制单时间,关联单号) VALUE ('{0}', '{1}',#{2}#,'{3}')"
应为
strSQL = "INSERT INTO 凭证记录表 (状态, 制单人, 制单时间, 关联单号) VALUES ('{0}', '{1}',#{2}#,'{3}')"

作者: tmtony    时间: 2017-3-12 11:52
各路大神都出来了!
作者: youdm    时间: 2021-3-17 13:33
感谢老师们的分享,辛苦了!




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3