我正在使用旧版 vb6 产品,我遇到了一个问题,即我需要通过 DAO 从数据库表中获取完整路径的文件名部分。我在这里无法访问 VBA 函数,所以我专门寻找 MS Access SQL。我无法在查询后删除一些额外的代码。除了修改 SQL,我无法更改/重构解决方案。
现在,DAO 没有任何功能instrrev
或replace
功能,所以我非常有限。
有什么猜测吗?提前致谢。
您应该能够使用内置的 vba 函数,如instr
, replace
,mid
等。
有一个“沙盒”模式可能会阻止它们 - 请参阅如何取消阻止它们http://support.microsoft.com/kb/294698
假设您无法更改实际的数据库。. .
我能想到的唯一一件事(我在这个问题上被大脑破坏了,对不起,伙计)是使用重复调用 instr,嵌套在 iif 语句中,例如替换对 inStrRev 的调用
SELECT IIf(InStr([FileName],""\"")>0,Mid$([Filename],InStrRev([Filename],""\"")+1),[Filename]) FROM Table1
你会有一个完全疯狂的
SELECT IIf(InStr([FileName],""\"")>0,Mid$([Filename],iif(InStr(1, [FileName], ""\"") > 0, iif(InStr(2, [FileName], ""\"") > 0, iif(InStr(3, [FileName], ""\"") > 0, iif(InStr(4, [FileName], ""\"") > 0, iif(InStr(5, [FileName], ""\"") > 0, iif(InStr(6, [FileName], ""\"") > 0, iif(InStr(7, [FileName], ""\"") > 0, iif(InStr(8, [FileName], ""\"") > 0, iif(InStr(9, [FileName], ""\"") > 0, 1, InStr(9, [FileName], ""\"")), InStr(8, [FileName], ""\"")), InStr(7, [FileName], ""\"")), InStr(6, [FileName], ""\"")), InStr(5, [FileName], ""\"")), InStr(4, [FileName], ""\"")), InStr(3, [FileName], ""\"")), InStr(2, [FileName], ""\"")), InStr(1, [FileName], ""\""))),[Filename]) from table1
这适用于深度为 10 个左右子文件夹的路径。如果您认为 10 个子文件夹太少,我有一点 vba 来生成您需要的任何深度的语句。
Function BuildNestedIIfs(ByVal depth As Integer, byval maxDepth as integer) As String
Dim locator As String
If depth < maxDepth Then
locator = "InStr(" & depth & ", [FileName], """"\"""")"
Build = "iif(" & locator & " > 0, " & Build(depth + 1, maxDepth) & ", " & locator & ")"
Else
Build = "0"
End If
End Function
这是淫秽的,但应该工作
我曾经做过很多 DAO 编程,但那是 10 到 15 年前...
您可以更改 DAO 以调用 Access QueryDef 然后在那里修复它吗?