Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Access Versionen

Begonnen von Johannes72, Mai 26, 2013, 11:02:28

⏪ vorheriges - nächstes ⏩

Johannes72

Hallo Leute

ich hab wieder ein Problem bei dem ich (wieder einmal) nicht weiter komme.

Nachdem in der Firma einige neue PC´s angeschafft wruden, wurde auch die SW erneuert und auf Office 64 bit "umgestellt". So, und nun hab ich das Problem, dass meine Anwendung die ich gemacht habe und bei der Ihr mir so tatgräftig geholfen habt, (danke noch einmal dafür), genau auf diesen Rechnern nicht läuft. Ich hab nun schon ausgibig im Netz gesucht, aber leider nur Seiten gefunden auf denen was beschrieben wird bei dem ich mich nicht auskennt.

Gibt es eine Möglichkeit eine Anwendung die auf einer 32 bit Version geschrieben wurde für eine 64 bit Version zu konvertieren. Ich hab´s schon mit "Speichern unter" oder mit dem Import aller Abfragen, Formulare.... in eine neue Datenbank versucht, das hat leider nicht funktioniert. Auch einen Menüpunkt konnte ich weder im Access noch VBA-Fenster finden.

Bitte wieder um eure Hilfe

Danke

database

#1
Hallo,

das ist mitunter auch ein Grund warum von der Verwendung von Office x64 auf PCs - selbst von MS! - abgeraten wird.
Die 64Bit Version bringt auf einem PC, also einem Clientrechner, mehr Nachteile als Vorteile.  :o

Dein Problem dürfte aber vorrangig im Bereich VBA zu suchen sein.
Stimmen denn alle Verweise oder gibt es da ev. gebrochene Einträge?
Gibt' s API-Deklarationen in der DB?
Was sagt der Debugger?

ZitatGibt es eine Möglichkeit eine Anwendung die auf einer 32 bit Version geschrieben wurde für eine 64 bit Version zu konvertieren
Ja, manuell ... Problem suchen und beheben - automatisiert geht da nix.  :'(

Johannes72

Tja, ich hab mir schon so was in der Art gedacht. Ich hab aber was im Internet gefunden mit dem es angeblich funktionieren soll.  Und zwar ist es dieser Code:

#If VBA7 Then

'Wait implementieren
Private Declare PtrSafe Sub apiSleep Lib "kernel32" Alias _
    "Sleep" (ByVal dwMilliseconds As Long)
Private Declare PtrSafe Function apiSleepEx Lib "kernel32" Alias _
    "SleepEx" (ByVal dwMilliseconds As Long, ByVal bAlertable As Long) As Long

#Else

'Wait implementieren
Private Declare Sub apiSleep Lib "kernel32" Alias _
    "Sleep" (ByVal dwMilliseconds As Long)
Private Declare Function apiSleepEx Lib "kernel32" Alias _
    "SleepEx" (ByVal dwMilliseconds As Long, ByVal bAlertable As Long) As Long

#End If

Damit sollte es irgendwie funktionieren das Formulare für beide Versionen ok sind.

Ich hab das mal versucht und den Code in Formulare kopiert. Es fällt dann zwar die Fehlermeldung weg, die Schaltflächen funktionieren aber nicht.

gibt´s da einen Lösungsansatz dazu.??


Stapi

Hallo Johannes

Habe auch mal im Netz gesucht und das gefunden:
http://technet.microsoft.com/de-de/library/ee681792.aspx

Ein weitere Hinweis war auch das in der 32 Bit Datenbank Version keine "Declare" Anweisung vorhanden bzw. eingebaut sein darf, wenn sie unter einer 64 Bit Version zum einsatz kommen soll.
http://www.ms-office-forum.net/forum/showthread.php?t=274784

Hoffe es hilft dir weiter.
Grüße aus dem schönen NRW
Stefan

Johannes72

Hallo

Ja, das hab ich schon gesehen bzw. gelesen, nur.... inwiefern hilft mir das weiter????

Kann 2013 eine konvertierung durchführen????

Stapi

Hallo Johannes

@ Database schrieb dir:
ZitatGibt' s API-Deklarationen in der DB?
Was sagt der Debugger?
Diese Frage bezieht sich auch auf meinen Beitrag, die kannst nur du aktuell beantworten.
ZitatKann 2013 eine konvertierung durchführen
Ich denke nein, da ich aber keine 64 Bit Umgebung im Einsatz habe fehlt mir hier die Erfahrung.
Grüße aus dem schönen NRW
Stefan

Johannes72

Hi

Debugger sagt in der 32 bit Version nicht´s. Ist alles bereinigt. Die konnte ich auch in eine ausführbare Datei umwandeln. In der 64 bit Version hab ich nicht geschaut.

Stapi

Hallo

Um das Thema gezielt angehen zu können sollte bekannt sein, welche Fehlermeldung (en) in der 64 Bit Version zum tragen kommt
Grüße aus dem schönen NRW
Stefan

database

#8
Hi,

ZitatKann 2013 eine konvertierung durchführen
Nein.

ZitatDie konnte ich auch in eine ausführbare Datei umwandeln
Wie bitte?  ??? ???

Zitatdie Schaltflächen funktionieren aber nicht
Welche Schaltflächen? Mit welchem Code?

Zitat...keine "Declare" Anweisung vorhanden bzw. eingebaut sein darf...
Stimmt so nicht ganz, man muss diese eben für den 64Bit-Betrieb anpassen bzw. gibt es div. Einschränkungen zu COM und ActiveX ...

Siehe als allgemeine Information zu 64Bit Editionen von Office auch:

http://technet.microsoft.com/de-de/library/ee681792.aspx

Johannes72

Hallo

- Unter der 64 bit Version kommt immer die gleiche Fehlermeldung bei verschiedenen Codes.... siehe Anhang.

- mit einer ausführbaren Datei habe habe ich eine. accde gemeint

- und mit den Schaltflächen meinte ich z.B, die Schaltflächen die auf dem Startformular sind und verschiedene Formulare öffnen oder die Anwendung schließen soll.  2 oder 3 funktionieren komischerweise aber der Rest nicht. Gibts da nicht irgendwie eine Lösung so oder so ähnlich wie ich es ziemlich weit oben gepostet habe???

Könnte doch auch funktionieren... oder

Danke

[Anhang gelöscht durch Administrator]

Stapi

Hallo Johannes

Es liegt wie du auch schon richtig erkannt hast an 32 BIT API-Deklarationen, sie muss wenn sie auf  beide Systemen laufen soll entsprechend angepast werden. Das wird hier in dem Beitrag beschrieben.
http://msdn.microsoft.com/de-de/library/gg264421.aspx

Heißt du must alle Formular und Module in dem du per VBA Code die API ansprichst entsprechend der Vorgabe, alle Zeilen und Variablen ändern bzw anpassen
Grüße aus dem schönen NRW
Stefan

DF6GL

Hallo,

die Fehlermeldung sagt es doch schon:

Die Deklation der API-Funktionen muss um PtrSafe erweitert werden.


Dafür gibt es keine automatische Konvertierung (soweit ich weiß) und es ist Handarbeit angesagt...

Wenn es sich bei manchen Deklarationen  um OCX-Dateien handelt, dann MÜSSEN diese Dateien gegen die 64 bit Variante ausgetauscht werden, sofern es die überhaupt gibt. Sonst sieht es düster aus.

Johannes72

Hallo Leute

Jetzt wo ich gesehen habe was ich suchen soll, hab ich auch was gefunden das passt:

Mit diesem Code in jedem Formular:

#If Win64 Then
    Private Declare PtrSafe Function ShowWindow Lib "user32" _
                 (ByVal hwnd As LongPtr, ByVal nCmdShow As LongPtr) As Long
#Else
    Private Declare Function ShowWindow Lib "user32" _
                 (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
#End If

Const SW_HIDE = 0       ' Fenster ausblenden
Const SW_NORMAL = 1     ' Fenster wiederherstellen bzw. einblenden

Private Sub Form_Open(Cancel As Integer)
    #If Win64 Then
        Dim hWindow As LongPtr
        Dim nResult As LongPtr
        Dim nCmdShow As LongPtr
    #Else
        Dim hWindow As Long
        Dim nResult As Long
        Dim nCmdShow As Long
    #End If

    hWindow = Application.hWndAccessApp
    nCmdShow = SW_HIDE
    nResult = ShowWindow(ByVal hWindow, ByVal nCmdShow)
    ShowWindow Me.hwnd, SW_NORMAL
End Sub


Funktioniert das meiste.

Aber eben nicht alles. Ich bin ein echt mieser Programmierer und hab keine Ahnung von dem Code den ich da gefunden habe, aber im kopieren in ich ganz gut..... :-)

Damit habe ich das nächste Problem: Siehe Anhang. Was muss ich hier ändern damit das Ding funktioniert. Bitte kann mir da wieder jemand einen Tipp geben.

Vielen Dank

[Anhang gelöscht durch Administrator]

Stapi

Hallo


Ich schaute mal in die Glaskugel und befrage sie.
ZitatFunktioniert das meiste.
Aber eben nicht alles

Aber ich kann leider nicht sehen, was bei dir alles nicht geht. ;)

Aber die Fehlermeldung die du uns zeigt, sagt nun mal aus das die Variable nicht deklariert wurde von dir. Um sich ein Bild machen zu können solltest du den ganzen Code posten um auch Zusammen hänge sehen zu können.
Grüße aus dem schönen NRW
Stefan

Johannes72

Hallo

Sorry, ich dachte mit dem Ausschnitt wäre genug sichtbar....

Ich hab jetzt mal den gesamten Code des Formulars rauskopiert und die beiden Codezeilen  (mittlerweile habe ich noch einen zweiten Codeteil der reklamiert wird) rot markiert (ziemlich weit unten Seite 12 und 14)

Dabei geht es um eine Funktion die mir aus einem Formular heraus das einscannen von Dokumenten ermöglicht.

Hab da nun schon länger wieder im Internet gesucht aber keine für mich brauchbaren Hinweise gefunden.


[Anhang gelöscht durch Administrator]