Dynamische Access-Datenbank für heteroegene Workstation
Access Datenbank programmiert in Access 2003 32bit auf Windows XP
eingesetzt aber auf Windows XP mit/ohne Access Runtime (2007 - 2010) - mal 32bit/64bit
Hallo,
ich habe eine kniffliche Aufgabe für eine von mir programmierte Access-Datenbank und zwar wird diese nach der Kraut & Rüben-Taktik benutzt, also auf Windows XP mit Access Runtime oder das große Access, auf Windows 7 32/64 bit mit Office 2007 32bit und zum Schluss auf Windows 7 64bit mit Office 2010 64bit.
Irgend wie muss man ständig bei neuen Releases 8 verschiedene Versionen machen und das nervt so allmählig. Vorallendingen die Kollegen, wenn gleich beim Starten der Datenbank ein Fehler entsteht, weil dann doch irgend etwas vergessen wurde zu hinterlegen.
Gibt es eine Möglichkeit beim Starten der Datenbank alle relevanten Daten also Prozessorstruktur und Office-Version zu ermitteln und danach die VBA-Verweise auf DAO 2.5 / 3.5 oder 3.6 zu konfigurieren und natürlich bei Funktionsdeklaration PTRSAFE hinzu zu fügen.
Ich weiß nicht so recht, wo ich da genau ansetzen soll.
Schöne Grüße
Axel
eingesetzt aber auf Windows XP mit/ohne Access Runtime (2007 - 2010) - mal 32bit/64bit
Hallo,
ich habe eine kniffliche Aufgabe für eine von mir programmierte Access-Datenbank und zwar wird diese nach der Kraut & Rüben-Taktik benutzt, also auf Windows XP mit Access Runtime oder das große Access, auf Windows 7 32/64 bit mit Office 2007 32bit und zum Schluss auf Windows 7 64bit mit Office 2010 64bit.
Irgend wie muss man ständig bei neuen Releases 8 verschiedene Versionen machen und das nervt so allmählig. Vorallendingen die Kollegen, wenn gleich beim Starten der Datenbank ein Fehler entsteht, weil dann doch irgend etwas vergessen wurde zu hinterlegen.
Gibt es eine Möglichkeit beim Starten der Datenbank alle relevanten Daten also Prozessorstruktur und Office-Version zu ermitteln und danach die VBA-Verweise auf DAO 2.5 / 3.5 oder 3.6 zu konfigurieren und natürlich bei Funktionsdeklaration PTRSAFE hinzu zu fügen.
Ich weiß nicht so recht, wo ich da genau ansetzen soll.
Schöne Grüße
Axel
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 155709
Url: https://administrator.de/contentid/155709
Ausgedruckt am: 23.11.2024 um 02:11 Uhr
13 Kommentare
Neuester Kommentar
Ich weiß nicht so recht, wo ich da genau ansetzen soll.
Ein Tipp: Nicht da, wo du grade ansetzen willst.
Die Lösung heißt hier wegwerfen und richtig machen.
Entweder webbasiert oder mit einem Programm was eine API für den DB-Zugriff benutzt.
Einem User einen direkten Zugriff auf eine Datenbank zu gewähren ist eine Unart von Microsoft und sollte nie benutzt werden.
Ich weiß nicht so recht, wo ich da genau ansetzen soll.
Wäre es nicht viel, viel einfacher, das Ganze auf den kleinsten gemeinsamen Nenner zu bringen???
Moin Moin,
du hast eine Frontend / Backend Lösung laufen?
Wenn Ja:
- Backend ist eine Access 2003 Version mit allen Tabellen
- Frontend ist min. Access 2003 da es von allen Programmen genutzt werden kann
- die Access 2007 Runtime (kostenlos) ist auf ALLEN PCs installiert
- auch auf dem PC mit vollem Access wird die Runtime mit deinem Frontend geladen.
Wenn Nein:
- dringend auf Frontend / Backend umstellen und nur die eine Runtime 2007 für alle nutzen!
Alles andere ist tödlich, wie du gerade merkst.
Grüße aus Rostock
Wolfgang
(Netwolf)
du hast eine Frontend / Backend Lösung laufen?
Wenn Ja:
- Backend ist eine Access 2003 Version mit allen Tabellen
- Frontend ist min. Access 2003 da es von allen Programmen genutzt werden kann
- die Access 2007 Runtime (kostenlos) ist auf ALLEN PCs installiert
- auch auf dem PC mit vollem Access wird die Runtime mit deinem Frontend geladen.
Wenn Nein:
- dringend auf Frontend / Backend umstellen und nur die eine Runtime 2007 für alle nutzen!
Alles andere ist tödlich, wie du gerade merkst.
Grüße aus Rostock
Wolfgang
(Netwolf)
War durchaus nicht zynisch gemeint. Siehe Antwort von NetWolf.....
Hurra, ist Freitag ;)
ich bin auf den letzten Metern bis zum Ziel und habe es vorläufig geschafft, dass das Betriebssystem, die
Prozessorarchitektur und Office-Version nicht mehr interessant sind für meine Datenbank. Kleine Schummeltricks waren
natürlich erlaubt.
Stoße trotzdem dabei auf ein Problem und zwar das was eigentlich in aller erster Linie die beiden 32bit und 64bit
Datenbanken von einander unterscheidet ist die Deklaration von Funktionen im Zugriff auf externe Bibliotheken und APIs.
Bei 64bit muss ja zwischen Declare und Function PtrSafe und das habe ich schlaufüchsig so gemacht, dass ich genau diese
Statements (mit und ohne PtrSafe) und die darauf aufbauenden Funktionen beim Starten der Datenbank lade, je nachdem was
environ("PROCESSOR_ARCHITECTURE") mir so erzählt.
Wie hast Du das gelöst? Lädst Du ein komplettes Modul dynamisch?
Wenn es sich nur um die 2 Api-Deklarationen handelt die angepasst werden müssen, bietet sich vllt auch die Methode 'insertLines' an
Also jetzt kurz und bündig - Module werden völlig korrekt geladen, nur kann ich beim Beenden der Datenbank das Modul
nicht löschen, zumindest nicht aus dem Visual Basic Bereich. Im Navigationsfenster ist das Modul gelöscht.
Wie lösche ich jetzt nicht nur im Navigationsfenster das Modul, sondern auch im Visual Basic Fenster???
zur Laufzeit kannst Du Module so löschen:
Ebenfalls Grüße
ich bin auf den letzten Metern bis zum Ziel und habe es vorläufig geschafft, dass das Betriebssystem, die
Prozessorarchitektur und Office-Version nicht mehr interessant sind für meine Datenbank. Kleine Schummeltricks waren
natürlich erlaubt.
Stoße trotzdem dabei auf ein Problem und zwar das was eigentlich in aller erster Linie die beiden 32bit und 64bit
Datenbanken von einander unterscheidet ist die Deklaration von Funktionen im Zugriff auf externe Bibliotheken und APIs.
> Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long)
> As Long
> Declare Function apiGetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize
> As Long) As Long
>
Bei 64bit muss ja zwischen Declare und Function PtrSafe und das habe ich schlaufüchsig so gemacht, dass ich genau diese
Statements (mit und ohne PtrSafe) und die darauf aufbauenden Funktionen beim Starten der Datenbank lade, je nachdem was
environ("PROCESSOR_ARCHITECTURE") mir so erzählt.
Wie hast Du das gelöst? Lädst Du ein komplettes Modul dynamisch?
Wenn es sich nur um die 2 Api-Deklarationen handelt die angepasst werden müssen, bietet sich vllt auch die Methode 'insertLines' an
Application.Modules("modul1").InsertLines 1, "option Explicit"
Also jetzt kurz und bündig - Module werden völlig korrekt geladen, nur kann ich beim Beenden der Datenbank das Modul
nicht löschen, zumindest nicht aus dem Visual Basic Bereich. Im Navigationsfenster ist das Modul gelöscht.
Wie lösche ich jetzt nicht nur im Navigationsfenster das Modul, sondern auch im Visual Basic Fenster???
zur Laufzeit kannst Du Module so löschen:
Application.VBE.ActiveVBProject.VBComponents.Remove _
Application.VBE.ActiveVBProject.VBComponents("Modul2"))
Grüße
Axel
Axel
Ebenfalls Grüße
Wie sieht Dein func_modulLöschen aus? Die von mir gepostete Methode löscht das Modul auch im VB-Editor (habs mit A2007 getestet).
Ansonsten lösche mal testweise ein anderes Modul. Ich könnte mir vorstellen, dass in dem Modul noch Objekte geladen sind und das das Modul deswegen nicht gelöscht wird (vermutung).
BTW: Eine Sache solltest Du im Hinterkopf behalten. Manche Virenscanner mögen es gar nicht wenn ein Code zur Laufzeit geändert wird. Hatte da vor ein paar Jahren mal Probleme mit
Ansonsten lösche mal testweise ein anderes Modul. Ich könnte mir vorstellen, dass in dem Modul noch Objekte geladen sind und das das Modul deswegen nicht gelöscht wird (vermutung).
BTW: Eine Sache solltest Du im Hinterkopf behalten. Manche Virenscanner mögen es gar nicht wenn ein Code zur Laufzeit geändert wird. Hatte da vor ein paar Jahren mal Probleme mit
> On Error Resume Next
>
Hallo,
"Ich weiß nicht so recht, wo ich da genau ansetzen soll."
ich denke, die Lösung zumindest eines Teils der Probleme könnte hier in "Bedingter Kompilierung" liegen.
Der folgende Artikel liefert nähere Informationen und Beispiele hierzu:
http://msdn.microsoft.com/de-de/library/ee691831.aspx
"Ich weiß nicht so recht, wo ich da genau ansetzen soll."
ich denke, die Lösung zumindest eines Teils der Probleme könnte hier in "Bedingter Kompilierung" liegen.
Der folgende Artikel liefert nähere Informationen und Beispiele hierzu:
http://msdn.microsoft.com/de-de/library/ee691831.aspx