在回答this question之后,我使用以下代码执行存储在.txt文件中的不同查询:
Dim vSql As Variant
Dim vSqls As Variant
Dim strSql As String
Dim intF As Integer
intF = FreeFile()
Open "MyFile.txt" For Input As #intF
strSql = Input(LOF(intF), #intF)
Close intF
vSql = Split(strSql, ";")
On Error Resume Next
For Each vSqls In vSql
DoCmd.RunSQL vSqls
Next
查询以;
分隔,并且每个查询都以注释行开头,并以'
开始并以;
结尾(因此它被{{1}分隔) })。
生成的vSql = Split(strSql, ";")
变体由有效的SQL语句组成,并插入以vSql
开头的注释行。当前代码有效,但是我想删除'
,以便错误的SQL语句返回错误而不是被忽略。
如何在执行On Error Resume Next
循环之前删除变体中以'
开头的行?还是有另一种方式可以实现我的目标?注释字符可以根据需要更改。
答案 0 :(得分:3)
或者,应该这样做:
For Each vSqls In vSql
If Not CStr(vSqls) Like "'*" Then DoCmd.RunSQL vSqls
Next
答案 1 :(得分:0)
这完全取决于文件的存储方式,但是最简单的方法是找到第一个返回字符并获取其余文本。
vSqls=mid(vSqls = Mid(vSqls, InStr(vSqls, vbCrLf) + 2)
或
vSqls=mid(vSqls = Mid(vSqls, InStr(vSqls, vbCr) + 1)
请记住,这只会删除第一行,因此,如果有空格,则需要检查下一行是否以'
开头。
如果您的查询分散在多行中,您可能会发现查询不起作用,您可能需要用空格替换所有剩余的回车符来解决该问题。