比如表 P_History数据库(Access)的数据如下:
C_ID     M_ID P_ID
20120102 01001 0
20120103 01001 0
20120104 01001 1
20120105 01003 1
20120106 02001 0
20120107 02001 2
20120108 02001 0
20120109 02001 1
20120110 01003 2
...P_ID中:0表示Ok,1表示Fail,2表示,UnKnow
如何显示出这样的结果呢
C_ID M_ID P_ID
20120102 01001 ok
20120103 01001 ok
20120104 01001 Fail
20120105 01003 Fail
20120106 02001 ok
20120107 02001 Unknow
20120108 02001 ok
20120109 02001 Fail
20120110 01003 Unknow
...如果我顶一个一个函数:
function Str_Days(byval str_D as string) as string 
if astr_D ="0"then
    Str_Days="ok"
elseif astr_D ="1"then
    Str_Days="Fail"
elseif astr_D ="2"then
    Str_Days="Unknow"
endif
end functionselect C_ID,M_ID,Str_Days(P_ID) from P_History提示说是Str_Days函数未定义?
自定义函数

解决方案 »

  1.   

    SELECT IIF(P_Id=0,'OK',IIF(P_ID=1,'fail','unknow')) AS P_Id FROM ...
      

  2.   

    不能引用自定义函数。因为 SQL 命令是以字符串形式发送到数据库引擎,由它来解析执行的。SQL 命令中只能包含数据库引擎所支持的函数。
      

  3.   

    最常见的数据库表数据编码转换方法,是附加一个表。P_ID strPID
    0    ok
    1    fail
    2    unknowSELECT A.C_ID, A.M_ID, B.strPID AS P_ID FROM P_History AS A, sP_ID AS B WHERE A.P_ID = B.strPID例如个人身份证信息的数据库中,主记录表中的许多信息都是编码。例如、省市县信息、职业信息,都是有编码国家标准的。这样存储是为了降低大型数据库存储空间占用。查询到人机界面时才通过附表转换出人机友好信息。
      

  4.   

    Access 的自定义函数其实是 Access 的宏,只能在 Access 对象库中调用。
    即 Access 的查询、报表中,Access VBA 代码中。
      

  5.   

    应该是
    SELECT A.C_ID, A.M_ID, B.strPID AS P_ID FROM P_History AS A, sP_ID AS B WHERE A.P_ID = B.P_ID
      

  6.   


    一般来说, 这种问题的解决方法是在数据库中再建一个 PID <=> Content 的对应表. 然后只要SQL语句中进行对应即可.而且这种方法远比你用硬编码的方式来的灵活.因为如果你将来万一要升级你的PID, 按照你现在的方法, 你得改程序, 重新编译重新发布.而用我的方法, 你只要在对应表里加一条记录即可!
      

  7.   

    到底是vb的函数还是数据库的函数。
    如果是vb的函数,这么写:
    ...
    sql = "select C_ID,M_ID," & Str_Days(P_ID) & " from P_History"
    ...
      

  8.   

    SELECT IIF(P_Id=0,'OK',IIF(P_ID=1,'fail','unknow')) AS P_Id FROM ...or sql = "select C_ID,M_ID," & Str_Days(P_ID) & " from P_History"为什么数据位空呢?搞不懂了?
      

  9.   

    一个新的发现:DB_Search_TxT = "Select " & Str_PM_Result(PM_Comment) & " from Case_PM_Schedule_History"
    出现错误:  -2147217900    语法错误(操作符丢失)正查询表达式 'For Schedule PM' 中'定义PM Result String
    Function Str_PM_Result(ByVal str_P As String) As StringIf str_P = "0" Then
        Str_PM_Result = "For Schedule PM"
    ElseIf str_P = "1" Then
        Str_PM_Result = "For Down PM"
    Else
        Str_PM_Result = "For Schedule PM"
    End IfEnd Function