문제
레거시 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를 변경 한 다음 여기에서 수정할 수 있습니까?