select * from。。。中不能引用自定义函数么?

QQ342151559 2013-07-31 11:31:07
比如表 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 function


select C_ID,M_ID,Str_Days(P_ID) from P_History


提示说是Str_Days函数未定义?
...全文
602 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
QQ342151559 2013-08-06
  • 打赏
  • 举报
回复
一个新的发现:
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 String

If 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 If

End Function
QQ342151559 2013-08-05
  • 打赏
  • 举报
回复
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" 为什么数据位空呢?搞不懂了?
熊孩子开学喽 2013-08-01
  • 打赏
  • 举报
回复
引用 楼主 QQ342151559 的回复:
比如表 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 function
select C_ID,M_ID,Str_Days(P_ID) from P_History
提示说是Str_Days函数未定义?
一般来说, 这种问题的解决方法是在数据库中再建一个 PID <=> Content 的对应表. 然后只要SQL语句中进行对应即可. 而且这种方法远比你用硬编码的方式来的灵活. 因为如果你将来万一要升级你的PID, 按照你现在的方法, 你得改程序, 重新编译重新发布. 而用我的方法, 你只要在对应表里加一条记录即可!
whk77 2013-08-01
  • 打赏
  • 举报
回复
引用
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.strPID
应该是 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
Tiger_Zhao 2013-08-01
  • 打赏
  • 举报
回复
Access 的自定义函数其实是 Access 的宏,只能在 Access 对象库中调用。
即 Access 的查询、报表中,Access VBA 代码中。
of123 2013-08-01
  • 打赏
  • 举报
回复
最常见的数据库表数据编码转换方法,是附加一个表。 P_ID strPID 0 ok 1 fail 2 unknow 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.strPID 例如个人身份证信息的数据库中,主记录表中的许多信息都是编码。例如、省市县信息、职业信息,都是有编码国家标准的。这样存储是为了降低大型数据库存储空间占用。查询到人机界面时才通过附表转换出人机友好信息。
of123 2013-08-01
  • 打赏
  • 举报
回复
不能引用自定义函数。 因为 SQL 命令是以字符串形式发送到数据库引擎,由它来解析执行的。SQL 命令中只能包含数据库引擎所支持的函数。
饮水需思源 2013-08-01
  • 打赏
  • 举报
回复
SELECT IIF(P_Id=0,'OK',IIF(P_ID=1,'fail','unknow')) AS P_Id FROM ...
threenewbee 2013-08-01
  • 打赏
  • 举报
回复
到底是vb的函数还是数据库的函数。 如果是vb的函数,这么写: ... sql = "select C_ID,M_ID," & Str_Days(P_ID) & " from P_History" ...

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧