質問
私は、従来のVB6の製品に働いていると私は私がDAOを介してデータベーステーブルからのフルパスのファイル名の一部を取得する必要があることにより、問題に遭遇しました。私はMS AccessのSQLのために特別に探していますので、ここではVBAの機能へのアクセスを得なかっました。私は、クエリの後にいくつかの余分なコードを削除する方法はありません。私は の変更/ SQLを変更する短いソリューションをリファクタリングすることはできません。
私はかなり限られてるので、今、DAOは、任意のinstrrev
またはreplace
機能を持っていません。
そこに任意の推測? 事前に感謝します。
解決
あなたは、実際のデータベースを変更することはできませんと仮定。 。ます。
私は考えることができる唯一のこと(と、私はこの1つ上の頭脳によってwrackedが、申し訳ありませんメイト)は、INSTRに繰り返し呼び出しを使用することで、例えばIIFステートメント内でネストinStrRevにこの呼び出しを置き換えるために、
SELECT IIf(InStr([FileName],""\"")>0,Mid$([Filename],InStrRev([Filename],""\"")+1),[Filename]) FROM Table1
あなたはcompeltely非常識を持っていると思います。
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かそこらのサブフォルダ深いthatsのパスのために動作します。 あなたが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
これは卑猥ですが、動作するはずです。
他のヒント
あなたがなどinstr
、replace
、mid
、のような組み込みのVBA関数を使用することができる必要があります。
それらをブロックすることができる「サンドボックス」モードがあります - それらのブロックを解除する方法については、これを見るにはます。http: //support.microsoft.com/kb/294698する
私は、DAOプログラミングの多くを行うために使用されるが、それは10〜15年前だった...
あなたがアクセスクエリ定義を呼び出し、そこにそれを修正するためにDAOを変更することはできますか?