VBA使用逗号

时间:2016-08-10 14:06:16

标签: sql vba ms-access formatting comma

作为一个大型项目的一部分,我正在开发一个表单,用户可以将SQL粘贴到文本框中,然后单击各种按钮来更改其中的内容。

例如,一个将它全部转换为小写,一个删除 - 和/ * * / comments,一个删除换行符(在某些不处理这些换行符的情况下很有用)。

最后一个采用未格式化的字符串(就像我将线路分开的字符串一样)并使其可读。

到目前为止,我已经在一个功能中得到了以下功能,这个功能对于一些关键词非常有效(我不是在这里只是一个可以帮助用户的详尽功能):

Function FormatSQL(str As String) As String

SSelect:
Do Until InStr(LCase(str), " select ") = 0
    str = Replace(LCase(str), " select ", vbCrLf & "select ")
Loop

BSelect:
Do Until InStr(LCase(str), "(select ") = 0
    str = Replace(LCase(str), "(select ", "(" & vbCrLf & "select ")
Loop

From:
Do Until InStr(LCase(str), " from ") = 0
    str = Replace(LCase(str), " from ", vbCrLf & "from ")
Loop

Where:
Do Until InStr(LCase(str), " where ") = 0
    str = Replace(LCase(str), " where ", vbCrLf & "where ")
Loop

Having:
Do Until InStr(LCase(str), " having ") = 0
    str = Replace(LCase(str), " having ", vbCrLf & "having ")
Loop

GroupBy:
Do Until InStr(LCase(str), " group by ") = 0
    str = Replace(LCase(str), " group by ", vbCrLf & "group by ")
Loop

OrderBy:
Do Until InStr(LCase(str), " order by ") = 0
    str = Replace(LCase(str), " order by ", vbCrLf & "order by ")
Loop

FormatSQL = str
End Function

我要做的最后一件事就是应对:

  

从表中选择column1,column2,column3,column4;

我希望它是:

  

选择column1,

     

列2,

     

栏3,

     

column4

     

来自表格;

我正在努力使用逗号,因为这些可能会留下空格,或者它们可能直接进入下一个字母数字值。我也意识到会有一些像','","这样的实例,我不想插入换行符。

这几乎就像我的instr必须是", {anyalphanumeric}"",{anyalphanumeric}",但我正在努力实现这一目标。

将非常感谢任何想法/建议。

1 个答案:

答案 0 :(得分:0)

我的解决方案是创建此功能:

Function bIsAlphaNumeric(str As String) As Boolean
If (Asc(LCase(str)) >= 97 And Asc(LCase(str)) <= 122) Or IsNumeric(str) Then
    bIsAlphaNumeric = True
Else
    bIsAlphaNumeric = False
End If
End Function

我的主要功能现在是:

Function FormatSQL(str As String) As String
Dim x As Double, y As Double

Commas:
y = Len(str)
For x = 1 To y
    If Mid(str, x, 1) = "," Then
        y = x
        If Mid(str, x + 1, 1) = " " Then
            'Look at x+2
            If bIsAlphaNumeric(Mid(str, x + 2, 1)) Then
                'Convert x+1 to linebreak
                str = Left(str, x) & vbCrLf & Mid(str, x + 2)
            End If
        Else
            'Look at x+1
            If bIsAlphaNumeric(Mid(str, x + 1, 1)) Then
                'Convert x+1 to linebreak
                str = Left(str, x) & vbCrLf & Mid(str, x + 1)
                y = y + 1
            End If
        End If
    End If
Next x

SSelect:
Do Until InStr(LCase(str), " select ") = 0
    str = Replace(LCase(str), " select ", vbCrLf & "select ")
Loop

BSelect:
Do Until InStr(LCase(str), "(select ") = 0
    str = Replace(LCase(str), "(select ", "(" & vbCrLf & "select ")
Loop

From:
Do Until InStr(LCase(str), " from ") = 0
    str = Replace(LCase(str), " from ", vbCrLf & "from ")
Loop

Where:
Do Until InStr(LCase(str), " where ") = 0
    str = Replace(LCase(str), " where ", vbCrLf & "where ")
Loop

Having:
Do Until InStr(LCase(str), " having ") = 0
    str = Replace(LCase(str), " having ", vbCrLf & "having ")
Loop

GroupBy:
Do Until InStr(LCase(str), " group by ") = 0
    str = Replace(LCase(str), " group by ", vbCrLf & "group by ")
Loop

OrderBy:
Do Until InStr(LCase(str), " order by ") = 0
    str = Replace(LCase(str), " order by ", vbCrLf & "order by ")
Loop

aand:
Do Until InStr(LCase(str), " and ") = 0
    str = Replace(LCase(str), " and ", vbCrLf & "and ")
Loop

oor:
Do Until InStr(LCase(str), " or ") = 0
    str = Replace(LCase(str), " or ", vbCrLf & "or ")
Loop

FormatSQL = str
End Function