3

我正在使用旧版 vb6 产品,我遇到了一个问题,即我需要通过 DAO 从数据库表中获取完整路径的文件名部分。我在这里无法访问 VBA 函数,所以我专门寻找 MS Access SQL。我无法在查询后删除一些额外的代码。除了修改 SQL,我无法更改/重构解决方案。

现在,DAO 没有任何功能instrrevreplace功能,所以我非常有限。

有什么猜测吗?提前致谢。

4

3 回答 3

2

您应该能够使用内置的 vba 函数,如instr, replace,mid等。

有一个“沙盒”模式可能会阻止它们 - 请参阅如何取消阻止它们http://support.microsoft.com/kb/294698

于 2009-05-28T15:59:11.757 回答
2

假设您无法更改实际的数据库。. .

我能想到的唯一一件事(我在这个问题上被大脑破坏了,对不起,伙计)是使用重复调用 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

这是淫秽的,但应该工作

于 2009-05-28T16:08:43.343 回答
0

我曾经做过很多 DAO 编程,但那是 10 到 15 年前...

您可以更改 DAO 以调用 Access QueryDef 然后在那里修复它吗?

于 2009-05-28T15:47:30.670 回答