Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: H3llo am Oktober 22, 2024, 11:11:27

Titel: Dateien mit vmtl. französischen Zeichen im Namen in Access weiterverarbeiten
Beitrag von: H3llo am Oktober 22, 2024, 11:11:27
Hallo,

ich habe ein Access-Formular über das verschiedene Dateien verwaltet werden. Für jede Datei gibt es einen Datensatz und in jedem Datensatz wird u. a. der Dateiname gespeichert. Der Nutzer kann einen neuen Datensatz anlegen, einfach indem er über den Dateidialog eine Datei auswählt. Der Dateiname wird dann in einem Feld gespeichert. Nun habe ich bei einem Datensatz folgendes Problem: Versuche ich bei dem Datensatz über die "Dir"-Funktion zu ermitteln, ob die Datei existiert, erhalte ich als Ergebnis "Nein". Ich habe den Dateinamen geprüft und herausgefunden, dass dies an den Zeichen liegt, die ich im Bild mit einem "Plus" markiert habe (die "Bindestriche"):

DeutschFranzZeichen.png

Der obere Dateiname ist aus Access, der Untere aus Windows heraus kopiert. In dem txt-Dokument werden Beide völlig gleich dargestellt. Trotzdem sind die Zeichen mit dem Plus-Zeichen vmtl. unterschiedlich. Auch in Windows kann ich die Datei nicht mit dem Pfad aus Access öffnen (Fehler). Der Dateiname ist ursprünglich französisch. Ich vermute, dass es damit zu tun hat. Wie kann ich das Problem lösen? Ein Ansatz von mir ist: Kann ich vielleicht die Datei direkt nach Auswahl umbenennen nach einem bestimmten Standard, der keine Probleme mehr verursacht?
Titel: Re: Dateien mit vmtl. französischen Zeichen im Namen in Access weiterverarbeiten
Beitrag von: Knobbi38 am Oktober 22, 2024, 12:56:41
Hallo,

im Dateinamen sind möglicherweise Unicode-Zeichen enthalten. VBA Dir() unterstützt jedoch nur ANSI-Zeichen. Du solltest deine Anwendung so ändern, dass sie das Filesystem-Objekt verwendet.
Titel: Re: Dateien mit vmtl. französischen Zeichen im Namen in Access weiterverarbeiten
Beitrag von: H3llo am Oktober 22, 2024, 16:55:47
Hallo knobbi,

danke für deine Antwort. Besteht das Problem denn nur mit der Dir-Funktion oder kann ich dadurch evtl. auch mit anderen Funktionen Probleme bekommen?

Viele Grüße
Titel: Re: Dateien mit vmtl. französischen Zeichen im Namen in Access weiterverarbeiten
Beitrag von: PhilS am Oktober 22, 2024, 19:20:55
Zitat von: H3llo am Oktober 22, 2024, 11:11:27Versuche ich bei dem Datensatz über die "Dir"-Funktion zu ermitteln, ob die Datei existiert, erhalte ich als Ergebnis "Nein".
Da würde ich mal genauer schauen, was du für ein Ergebnis bekommst. "Nein" ist kein üblicher Rückgabewert der Dir-Funktion.

Zitat von: H3llo am Oktober 22, 2024, 11:11:27Ich habe den Dateinamen geprüft und herausgefunden, dass dies an den Zeichen liegt, die ich im Bild mit einem "Plus" markiert habe (die "Bindestriche"):
Wie genau hast du das überprüft?
Ich halte das für eher unwahrscheinlich. Wahrscheinlicher ist meiner Meinung, dass da irgendein zusätzlicher Unterschied zwischen deinem Input für Dir() und dem tatsächlichen Dateinamen bestanden hat.


Zitat von: knobbi38 am Oktober 22, 2024, 12:56:41VBA Dir() unterstützt jedoch nur ANSI-Zeichen.
Dir kann (scheinbar) nur ANSI-Zeichen zurückgeben. Unicode Zeichen werden im Rückgabewert durch ? ersetzt. Die eigentliche Ermittlung des Dateinamens funktioniert jedoch erstmal grundsätzlich. D.h. die Prüfung der Existenz einer Datei kann, abhängig von der konkreten Implementierung, auch mit Dir und Unicode-Zeichen funktionieren.

Französisch ist komplett von ANSI CP1252 abgedeckt. Daher würde ich nicht so schnell davon ausgehen, dass hier Unicode-Zeichen im Spiel sind und das Problem verursacht haben.
Titel: Re: Dateien mit vmtl. französischen Zeichen im Namen in Access weiterverarbeiten
Beitrag von: Knobbi38 am Oktober 22, 2024, 23:39:54
Hallo,

Zitat von: PhilS am Oktober 22, 2024, 19:20:55Dir kann (scheinbar) nur ANSI-Zeichen zurückgeben. Unicode Zeichen werden im Rückgabewert durch ? ersetzt. Die eigentliche Ermittlung des Dateinamens funktioniert jedoch erstmal grundsätzlich. D.h. die Prüfung der Existenz einer Datei kann, abhängig von der konkreten Implementierung, auch mit Dir und Unicode-Zeichen funktionieren.

Leider kann Dir() grundsätzlich nur mit Ansi-Zeichen umgehen und gibt bei Dateinamen mit Unicodezeichen Zeichen zurück, die keinen Rückschluss mehr auf den ursprünglichen Dateinamen zulassen. Nur mit Platzhaltern kann man überhaupt feststellen, daß eine Datei existiert und zum Muster paßt, z.B. wenn mit dem Muster *.ttt getestet wird. Was dann zurückkommt, hat mit dem original Unicodedateinamen aber nichts mehr zu tun, sondern ist total verfälscht. Immerhin ist es so möglich, die Anzahl der Dateien mit dem Muster *.ttt zu ermitteln, mehr auch nicht.

Dieses trifft auch auf alle anderen Datei-Funktionen von VBA zu, z.B. GetAttr, SetAttr und auch MkDir. Dateinamen mit beispielsweise türkischen, griechischen oder polnischen Sonderzeichen lassen sich damit nicht mehr verarbeiten.

Wenn man mit Unicode-Dateinamen arbeiten möchte/muß, kann man auf das FileScripting-Objekt ausweichen. Dieses kann mit Unicode-Dateinamen umgehen und gibt auch das Unicodezeichen im File-Objekt richtig zurück.

Achtung:
Unicode bitte nicht mit UTF-8 verwechseln - das wird oft missverstanden, hat aber miteinander nichts zu tun.

Als weitere Alternative funktioniert auch die Shell-Automation. Diese Objekte unterstützen ebenfalls Unicode.

Tip:
Zufällig bin ich heute auf folgende Seite gestoßen, wo die VBA-Funktionen durch API Funktionen überschrieben werden und so die VBA Funktionen wieder "unicodefähige" werden:  8)
https://www.vb-zentrum.de/unidateihandling.html (https://www.vb-zentrum.de/unidateihandling.html)

Gruß
Knobbi38

PS:
Getest mit dem Unicode Zeichen U+0142, &#322 (ł), welches in der VBE als l dargestellt und mit Chrw(322) erzeugt werden kann. Für den Test kann man eine Textdatei "Textdokument_ł.ttt" im Explorer anlegen und dann die VBA und FSO Funktionen austesten.