2009-05-28 6 views
3

Ich arbeite mit einem älteren vb6 Produkt und ich bin auf ein Problem gestoßen, wobei ich den Dateinamen Teil eines vollständigen Pfades von einer Datenbanktabelle über DAO erhalten muss. Ich habe keinen Zugriff auf VBA-Funktionen hier, also suche ich speziell nach MS Access SQL. Ich habe keine Möglichkeit, zusätzlichen Code nach der Abfrage zu löschen. I CAN NOT ändern/refactor die Lösung kurz vor der Änderung der SQL.Umständliche DAO-String-Manipulation Problem

Nun, DAO hat keine instrrev oder replace Funktionalität, so dass ich ziemlich begrenzt bin.

Irgendwelche Vermutungen da draußen? Vielen Dank im Voraus.

Antwort

2

Angenommen, Sie können die tatsächliche Datenbank nicht ändern. . .

Das einzige, was ich denken kann (und ich durch Gehirne an diesem, tut mir leid Kumpel) ist wiederholte Anrufe zu Instr zu verwenden, verschachtelt in if Anweisungen, z. diesen Anruf InStrRev

SELECT IIf(InStr([FileName],""\"")>0,Mid$([Filename],InStrRev([Filename],""\"")+1),[Filename]) FROM Table1 

ersetzen Sie verrückt ein compeltely haben würde

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 

Dies wird für einen Pfad arbeiten das ist 10 oder so Vorhefte tief. Wenn Sie denken, 10 Unterordner ist zu wenig, ich habe ein bisschen VBA, um die Aussage zu erzeugen, was immer Tiefe Sie benötigen.

Es ist obszön, sollte aber

+0

lol. Ja, obszön ist das Wort. Wenn ich dir mehr als 1+ geben könnte, hätte ich nur eine Verfassung, um das zu schreiben! Ich habe das als Lösung betrachtet, aber es ist nur Unsinn. Es wurde alles als eine Codeänderung für ein Service Pack-Release zurückgeworfen, so dass wir nicht so etwas tun müssen. Gute Arbeit, Alter. – Stimul8d

+0

Danke feck dafür! Ich war in Positionen, in denen eine Abscheulichkeit wie die obige die einzige Lösung ist oder wenn eine Reparatur für etwas JETZT NOTWENDIG ist. Ich bin froh, dass die verschachtelten IIF's nie das Licht der Welt erblicken werden. Viel Glück –

+0

@Binary Worrier: Meine erste Intuition war auch, eine Reihe von verschachtelten IIf() s zu schreiben und InStrRev() mit ihnen zu ersetzen. Aber ich verwarf die Idee, so hässlich und begrenzt zu sein. +1 für die schiere Anstrengung von Ihrer Seite. : D – Tomalak

0

Früher habe ich viel von DAO-Programmierung zu tun, aber das war vor 10-15 Jahren ...

Können Sie die DAO ändern, um einen Access-QueryDef zu rufen und es dann dort reparieren?

+0

Leider Mann, keine Würfel arbeiten. Ich habe das gleiche Problem mit QueryDefs. Netter Versuch. – Stimul8d

+0

Wie ist das möglich? Es ist eine Weile her, aber ich bin mir sicher, dass QueryDefs Access Basic Funktionen verwenden kann. – RBarryYoung

2

Sie sollten in der Lage sein, das verwenden integrierte in VBA-Funktionen wie instr, replace, mid usw.

Es gibt eine „Sandbox“ -Modus, die sie blockieren können - siehe diese, wie sie http://support.microsoft.com/kb/294698

zu entsperren
+0

Netter Versuch, aber ich bin unter NetworkService ausgeführt, so dass ich keine Berechtigungen für die Registrierung habe und dies ist ein Support-Problem, so dass ich nichts in InstallShield an dieser Stelle tun kann. Guter Anruf obwohl. – Stimul8d