【问题标题】:How can I remove rows starting with ' in a variant?如何删除变体中以 ' 开头的行?
【发布时间】:2019-10-16 21:31:47
【问题描述】:

根据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

查询由;分隔,每个查询前面都有一个注释行,以'开头并以;结尾(因此它被vSql = Split(strSql, ";")分隔)。

生成的vSql 变体由有效的SQL 语句组成,散布着以' 开头的注释行。当前代码有效,但我想删除 On Error Resume Next 以便错误的 SQL 语句返回错误而不是被忽略。

如何在执行For Each 循环之前删除变量中以' 开头的行?还是有其他方法可以实现我的目标?如有必要,可以更改注释字符。

【问题讨论】:

  • 在你的文本文件中,你可以用SQL注释字符“--”替换注释字符吗?
  • 好主意,但我不确定 Access 是否处理 SQL cmets。我会看看它是否有效。
  • @JK2017 你的提议有效,Accss 似乎可以处理-- cmets。

标签: vba ms-access


【解决方案1】:

或者,这应该这样做:

For Each vSqls In vSql
    If Not CStr(vSqls) Like "'*" Then DoCmd.RunSQL vSqls
Next

【讨论】:

    【解决方案2】:

    这取决于文件的具体存储方式,但最简单的方法是找到第一个返回字符并获取其余文本。

    vSqls=mid(vSqls = Mid(vSqls, InStr(vSqls, vbCrLf) + 2)
    

    vSqls=mid(vSqls = Mid(vSqls, InStr(vSqls, vbCr) + 1)
    

    请记住,这只会删除第一行,因此如果有空格,您需要检查下一行是否以 ' 开头。

    如果查询分布在多行上,您可能会发现查询不起作用,您可能需要用空格替换任何剩余的回车符来处理。

    【讨论】:

      猜你喜欢
      • 2020-10-31
      • 1970-01-01
      • 2014-05-27
      • 1970-01-01
      • 1970-01-01
      • 2014-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多