문제

레거시 VB6 제품으로 작업하고 있으며 데이터베이스 테이블에서 DAO를 통해 전체 경로의 파일 이름 부분을 가져와야하는 문제를 발견했습니다. 여기서 VBA 기능에 액세스 할 수 없으므로 MS Access SQL을 구체적으로 찾고 있습니다. 쿼리 후 여분의 코드를 삭제할 방법이 없습니다. 나 캔트 SQL 수정이 부족한 솔루션을 변경/리팩토링합니다.

이제 Dao에는 아무것도 없습니다 instrrev 또는 replace 기능적이므로 제한적입니다.

거기에 추측이 있습니까? 미리 감사드립니다.

도움이 되었습니까?

해결책

실제 데이터베이스를 변경할 수 없다고 가정합니다. . .

내가 생각할 수있는 유일한 것은 (그리고 이것에 두뇌에 휩싸인 것, 죄송합니다. 죄송합니다) IIF 진술에 중첩 된 악기에 반복적 인 호출을 사용하는 것입니다.

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

음란하지만 작동해야합니다

다른 팁

내장 된 VBA 기능을 사용할 수 있어야합니다. instr, replace, mid, 등.

그들을 차단할 수있는 "샌드 박스"모드가 있습니다. http://support.microsoft.com/kb/294698

나는 많은 DAO 프로그래밍을했지만 10-15 년 전 ...

Access QueryDef를 호출하여 DAO를 변경 한 다음 여기에서 수정할 수 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top