Hallo,
ich habe hier eine alte, mit Sonderzeichen verseuchte Datenbank auf den Tisch bekommen, um sie auch mit Rechnern ohne Sonderzeichen verwenden zu können. Also Sonderzeichen aus den Controls raus.
Mit ä. ö und ü geht das auch flott, aber wenn man nach dem ß sucht, ,,findet" die Suche auch alle ,,ss".
Wie kann man der Zeichensuche beibringen, dass sie nur das markiert, was auch eingegeben wurde?
Gruß
Doming
Das scheint leider nicht möglich zu sein. :-(
Auch kommerzielle Tools, wie MZ-Tools (https://www.mztools.com/) und Find and Replace (https://accessdevtools.com/product/find-and-replace/) haben damit ein Problem. Allerdings kann man bei diesen Tools immerhin mit der RegExp-Option nach [ß] suchen und das gewünschte Ergebnis erreichen. - Das scheitert bei der eingebauten Suche leider auch, wenn man die "Use Pattern matching"-Option aktiviert.
c'est la vie... dann muss man sich eben durch die ganzen Access-Erwähnungen und sonstigen DoppelEssen durchklicken
Hatte gehofft, dass ich da nur eine Wissenslücke habe
Gruß
Doming
Hallo Doming,
dafür verwende ich schlichtweg einen ext. Programmier-Editor und kopiere den Code einfach per CP. In dem Fall lohnen sich die wenigen Tastendrücke mehr auf jeden Fall.
Knobbi38
*urgs* wenige Tastendrücke... :-\
die DB hat gefühlt mehr Formulare und Module als Eszette, da kopiere ich mir ja nen Wolf.
Aber danke für den Vorschlag, auf die Idee bin ich nicht gekommen.
Hallo Doming,
wenn es etwas mehr wird, könnte man es automatisieren ...
- Datenbank in neuer Access-Instanz öffnen
- Objekte als Text exportieren "SaveAsText()"
- Änderungen an der Textdatei vornehmen und speichern
- Textdatei als Objekt wieder "LoadFromText() importieren
- Datenbank schließen
Air-Code:
Dim app As Access.Application
Set app = New Access.Application
app.AutomationSecurity = msoAutomationSecurityForceDisable
app.UserControl = False
app.OpenCurrentDatabase "X:\MyDatabse.accdb", True
app.SaveAsText acForm, "MyFormName", "x:\MyFormName.txt"
' Todo: make the changes in the text file
app.LoadFromText acForm, "MyFormName", "x:\MyFormName.txt"
app.RunCommand acCmdCompileAndSaveAllModules
app.CloseCurrentDatabase
app.Quit
Set app = Nothing
Die Namen der Objekte und die Objekttypen können mit Hilfe der Containers-Auflistung ermittelt werden.
Knobbi38
Zitat von: Knobbi38 am September 22, 2025, 13:26:24Die Namen der Objekte und die Objekttypen können mit Hilfe der Containers-Auflistung ermittelt werden.
Einfacher ist: CurrentProject.AllForms
Und analog .AllReports, .AllModules
Hallo Phil,
wäre ja schön, aber auf die Eigenschaft CurrentProjekt besteht in dem Moment kein Zugriff (Error 7952)!
Knobbi38
Zitat von: Knobbi38 am September 22, 2025, 14:06:48wäre ja schön, aber auf die Eigenschaft CurrentProjekt besteht in dem Moment kein Zugriff (Error 7952)!
?Eigenartig. Ich benutze CurrentProject sehr häufig und an diesen Fehler kann ich mich nicht erinnern.
Dein Code modifiziert wie folgt, läuft ohne Probleme:
[...]
app.OpenCurrentDatabase Environ("Temp") & "\Database3.accdb", True
Dim cp As CurrentProject
Set cp = app.CurrentProject
app.SaveAsText acForm, cp.AllForms(0).Name, Environ("Temp") & "\" & cp.AllForms(0).Name & ".txt"
' Todo: make the changes in the text file
[...]
Hallo Phil,
ich habe es nicht verifiziert, aber ich könnte mir Vorstellen, daß Makros in deinem Beispiel generell erlaubt sind und damit der Zugriff auf CurrentProject möglich wird.
In meinem Beispiel jedoch werden explizit durch
app.AutomationSecurity = msoAutomationSecurityForceDisable
alle Makros in der automatisierten Instanz deaktiviert, um so die Ausführung von Code während des Öffnens zu verhindern. Es werden somit keine Initialisierungen und Datenbankzugriffe mehr automatisch durchgeführt, schließlich soll ja nur der Code bearbeitet werden.
Die Zeile
app.UserControl = False
ist eher kosmetischer Natur und kennzeichnet damit, daß der Zugriff per Automation erfolgt und die Anwendung selber ausgeblendet ist.
Deshalb habe ich in diesem Beispiel ausnahmsweise vorgeschlagen, die Informationen per Container-Auflistung auszulesen, da diese Möglichkeit seltener angewendet wird und wenig bekannt ist.
VG Knobbi38
Zitat von: Knobbi38 am September 22, 2025, 23:01:08[...]ich könnte mir Vorstellen, daß Makros in deinem Beispiel generell erlaubt sind und damit der Zugriff auf CurrentProject möglich wird.
In meinem Beispiel jedoch werden explizit durch
Mein Beispiel ist dein Beispiel. ;-)
Ich habe dein Beispiel unverändert (bis auf die Pfade) übernommen, und nur die obigen Zeilen zusätzlich eingefügt.
Zitat von: Knobbi38 am September 22, 2025, 23:01:08app.AutomationSecurity = msoAutomationSecurityForceDisable
alle Makros in der automatisierten Instanz deaktiviert, um so die Ausführung von Code während des Öffnens zu verhindern. Es werden sommit keine Initialisierungen und Datenbankzugriffe mehr automatisch durchgeführt, schließlich soll ja nur der Code bearbeitet werden.
Von der automatisierten Instanz wird kein Code ausgeführt. Der laufende Code ist nur in der primären Instanz, die die sekundäre, automatisierte Instanz steuert. Daher glaube ich nicht, dass die AutomationSecurity der Sekundärinstanz hierfür relevant ist.
Die Einstellung dürfte nur verhindern, dass Code durch AutoExec oder ein Startup-Form ausgeführt wird. app.Run und app.Eval dürften durch diese Einstellung ebenfalls nicht funktionieren.
Zitat von: Knobbi38 am September 22, 2025, 23:01:08Deshalb habe ich in diesem Beispiel ausnahmsweise vorgeschlagen, die Informationen per Container-Auflistung auszulesen, da diese Möglichkeit seltener angewendet wird und wenig bekannt ist.
Das finde ich als alternativen Ansatz auch durchaus sinnvoll.