Tilo Roeder: InStrRev in ASP und Access

Hallo zusammen,
ich benötige in einer SQL-Abfrage eine Gruppierung nach Pfad bei einem Feld welches Dateinamen enthält. In einer Abfrage in der Acess-Datei selbst ist die einfach mit GROUP BY Left(Filename,InStrRev(Filename,"")) zu machen. Dies funktioniert jedoch nicht aus ASP heraus, dort kommt folgender Fehler:
Microsoft][ODBC Microsoft Access Driver] Undefinierte Funktion 'InStrRev' in Ausdruck

Hat jemand eine Idee, wie ich dies umgehen kann. Per ODBC ist nur die Funktion InStr, jedoch nicht InstrRev bekannt - ich benötige aber das letzte Auftreten aines Zeichens in einem String, dies kann ich mit InStr nicht ermitteln.

Schon mal Danke für irgendwelche Ideen,
Tilo

  1. Hi,

    hoho, habe gerade eine sehr verrückte Idee, leider gerade nur eine MySQL-Referenz zur Hand, aber eine verrückte Idee wäre es,
    GROUP BY Left(Filename, InStr(Reverse(filename), "")
    zu versuchen (falls Access Reverse als Umkehr des Inhalts kennt, ab dann geht ja der erste Backslash wieder in Ordnung.

    Viel Glück!

    1. hoho, habe gerade eine sehr verrückte Idee, leider gerade nur eine MySQL-Referenz zur Hand, aber eine verrückte Idee wäre es,
      GROUP BY Left(Filename, InStr(Reverse(filename), "")...

      Wirklich 'ne verrückte Idee, jedoch ist der ODBC-Treiber nicht verrückt genug. Access slbst kennt StrREverse als Funktion, per ODBC jedoch wieder nicht, d.h. gleicher Fehler.
      Trotzdem Danke für den Versuch,
      Tilo

  2. Halihallo Tilo

    ich benötige in einer SQL-Abfrage eine Gruppierung nach Pfad bei einem Feld welches Dateinamen enthält. In einer Abfrage in der Acess-Datei selbst ist die einfach mit GROUP BY Left(Filename,InStrRev(Filename,"")) zu machen. Dies funktioniert jedoch nicht aus ASP heraus, dort kommt folgender Fehler:
    Microsoft][ODBC Microsoft Access Driver] Undefinierte Funktion 'InStrRev' in Ausdruck

    Hat jemand eine Idee, wie ich dies umgehen kann. Per ODBC ist nur die Funktion InStr, jedoch nicht InstrRev bekannt - ich benötige aber das letzte Auftreten aines Zeichens in einem String, dies kann ich mit InStr nicht ermitteln.

    Wonach willst du hier gruppieren? - Nach der letzten Position von '' in einem
    Dateinamen mit Pfad??? - Was soll das bringen? - Damit sortierst du lediglich die
    Pfadtiefe (nach Zeichenlänge, nicht nach Unterverzeichnisanzahl). Ist es wirklich das,
    was du willst? - Ich verstehe den Sinn dahinter nicht. Diese Gruppierung hat IMHO keinen
    praktischen Nutzen.
    Da es diese Funktion in ODBC nicht gibt, musst du auf eine programmiertechnische
    Umsetzung ausweichen, oder ein Feld in der DB haben, welches bereits vorberechnete Werte
    zur Gruppierung enthält (die Vorberechnung kannst du dann bei jedem INSERT/UPDATE durch
    ASP erledigen).

    Viele Grüsse

    Philipp

    1. ...

      Wonach willst du hier gruppieren? - Nach der letzten Position von '' in einem
      Dateinamen mit Pfad??? - Was soll das bringen? - Damit sortierst du lediglich die
      Pfadtiefe (nach Zeichenlänge, nicht nach Unterverzeichnisanzahl).

      Ich will nach dem Pfad ohne Dateinamen gruppieren, daher auch der Ausdruck LEFT(Filename, InStrRev(Filename, "")) dies macht für mich schon einen Sinn. (z.B: c:\a\b\c.txt ergibt c:\a\b)
      Ein weiters Feld kann ich nicht einbringen, da die DB von einem anderen Programm (MP3db) aufgebaut wird, welches ich nicht anpassen kann.

      Grüße,
      Tilo

      1. Halihallo Tilo

        Ich will nach dem Pfad ohne Dateinamen gruppieren, daher auch der Ausdruck LEFT(Filename, InStrRev(Filename, "")) dies macht für mich schon einen Sinn. (z.B: c:\a\b\c.txt ergibt c:\a\b)

        Oh, ich muss mich entschuldigen. Das LEFT habe ich ganz und gar vergessen. Natürlich
        macht das Sinn.

        Ein weiters Feld kann ich nicht einbringen, da die DB von einem anderen Programm (MP3db) aufgebaut wird, welches ich nicht anpassen kann.

        Tjö, also wenn du über ODBC keine Lösung findest (ich kenne mit mit dieser Schnittstelle
        zuwenig aus), würde ich empfehlen, dass du a) eine programmiertechnische Lösung über ASP
        erarbeitest (Problem: Alle Daten einlesen und selber Gruppieren braucht viel Speicher
        und Performance) oder b) ein Abbild der Datenbank/Tabelle produzierst, wo du das neue
        Feld für die Gruppierung von ASP vorberechnet hast (Problem: Redundanz, Aktualität der
        Daten, hoher Performanceverlust durch Abbilden der Tabelle(n)).
        Ich gehe mal davon aus, dass dieses Projekt nicht sehr frequentiert (nur von dir?)
        benutzt wird, dann wären oben genannte Umsetzungen zwar nicht optimal, aber ertragbar.

        Viele Grüsse

        Philipp