繁体   English   中英

使用IIF动态更改SQL语句

[英]Dynamically change SQL statement with IIF

很简单的问题,但是让我呆了几个小时。

我想将“性别”字段更改为这样:如果性别为0,则为1;如果性别为1,则为2

这是我的代码:

Private Sub Run_Click()
    Dim db As DAO.Database
    Dim queryDef As DAO.queryDef
    Dim sql As String
    Dim fields As Variant

    Set db = CurrentDb
    sql = ""

    fields = Array("Name", "Gender", "Age")

    For Each queryDef In db.QueryDefs
        If queryDef.Name = "Q_List" Then
            db.QueryDefs.Delete "Q_List"
            Exit For
        End If
    Next

    sql = sql & "SELECT "
    For Each field In fields
        If field = "Gender" Then
            sql = sql & IIf([Gender] = 0, 1, 2) & " AS Gender, "
        Else
            sql = sql & "[" & field & "]" & ", "
        End If
    Next
    sql = Left(sql, Len(sql) - 2)
    sql = sql & " FROM T_Customer"
    Set queryDef = db.CreateQueryDef("Q_List", sql)

    DoCmd.TransferText acExportDelim, , "Q_List", "C:\customerdata\data.txt", True, , 65001

    MsgBox "Done!"

End Sub

问题是,IIF并不适用于所有数据行,但它会字面比较是否是字符串的Gender等于0整数,并且我所有的Gender行都变为2 ...生成的Sql如下:

SELECT T_Customer.[Name], 2 AS Gender, T_Customer.[Age] FROM T_Customer

需要帮助请

解决了!!!

通过在sql语句IN STRING中编写IIF,并使用相同的字段名称,应这样编写:IIf([tablemame]。[Gender] = 0,1,2)&“ AS Gender,”

我认为您已经省略了两个引号。 对象循环中if之后的行应为:

sql = sql & " IIf([Gender] = 0, 1, 2) " & " AS Gender, "

现在sql变量是

SELECT [Name],  IIf([Gender] = 0, 1, 2)  AS Gender, [Age] FROM T_Customer 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM