2009-05-28 17 views
3

Iは、従来のVB6の製品に働いていると私は私がDAOを介してデータベーステーブルからのフルパスのファイル名の一部を取得する必要があることにより、問題に遭遇しました。私はVBA関数へのアクセス権がないので、特にMS Access SQLを探しています。私はクエリの後にいくつかの余分なコードを削除する方法がありません。私はできません変更/リファクタリングは、SQLを修正するのに手近な解決策です。厄介なDAO文字列操作の問題

現在、DAOにはinstrrevまたはreplaceという機能がないため、かなり制限されています。

そこには何か推測がありますか? ありがとうございます。

答えて

2

実際のデータベースを変更できないと仮定します。 。 。例えばIIF文にネスト

私は考えることができる唯一のこと(と、私はこの1つ上の頭脳によってwrackedが、申し訳ありませんメイト)は、INSTRに繰り返し呼び出しを使用することです、 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を持っています。

これは卑猥ですが、

+0

笑。うん、卑猥な言葉です。私はあなたに1+以上を与えることができれば、私はそれを書いて憲法を持っているだけのためです!私はそれを解決策として考えましたが、それはちょうどナンセンスです。それはサービスパックのリリースのコード変更として捨てられてしまったので、この種のことをする必要はありません。おいしい仕事。 – Stimul8d

+0

ありがとうございました!私は、上記のような忌み嫌いが唯一の解決策であるか、何かの修正が必要な場合に役職にいました。私はそれらのネストされたIIf'sが決して日の光を見ないことを嬉しく思います。運が良ければ –

+0

@Binary Worrier:私の最初の直感は、入れ子になったIIf()のセットを書いて、それらにInStrRev()を代入することでした。しかし、私は非常に醜いと限られているという考えを却下した。 +1あなたの部分の完全な努力のために。 :D – Tomalak

0

私はDAOプログラミングの多くを行うために使用されるが、それは10〜15年前だった...

あなたはアクセスクエリ定義を呼び出し、そこにそれを修正するDAOを変更することはできますか?など

あなたが instrreplacemidのような組み込みのVBA関数を使用することができるはず
+0

申し訳男、ないサイコロを動作するはずです。私はQueryDefsを使用して同じ問題があります。よい試み。 – Stimul8d

+0

これはどのように可能ですか?それはしばらくしていますが、私はQueryDefsがAccess Basicの機能を使用できることを確信しています。 – RBarryYoung

2

それらをブロックすることができる「サンドボックス」モードがあります - 彼らにhttp://support.microsoft.com/kb/294698

のブロックを解除する方法でこれを見ます
+0

NetworkServiceの下で動作していますが、レジストリへのアクセス権がありません。これはサポートの問題ですので、この時点でInstallShieldで何もできないことはありません。しかし、良いコール。 – Stimul8d