Seite 1 von 1

[Gelöst] Access-Datenbank mit OBCD und PureBasic x64

Verfasst: 25.12.2018 18:24
von ThoPie
Hallo zusammen,
bisher habe ich mein Projekt mit der 32-bit-Version von PureBasic und einer Access-Datenbank (mdb) verwendet. Die Datenbank wird per ODBC verwendet.
Nun möchte ich gern auf die 64-bit-Version von Purebasic wechseln. Die Datenbank habe ich in das accdb-Format (32/64-bit) konvertiert.
Beim Laden der Datenbank funktionieren die Befehle

Code: Alles auswählen

Debug UseODBCDatabase()
Debug OpenDatabase(#dbPersonal,"PersonalTest","","",#PB_Database_ODBC)
Debug IsDatabase(#dbPersonal)
Allerdings kommt beim ersten Verwenden der Datenbank ein Speicherzugriffsfehler

Code: Alles auswählen

DatabaseQuery(#dbPersonal,"SELECT Bezeichnung,Wert FROM tblEinstellungenSystem")
  While NextDatabaseRow(#dbPersonal)
    Select GetDatabaseString(#dbPersonal,0)
      Case "Anmeldeversuche"
        E\Anmeldeversuche=GetDatabaseLong(#dbPersonal,1)
      ...
    EndSelect
  Wend
  FinishDatabaseQuery(#dbPersonal)
Hab ich da was übersehen oder geht das gar nicht so einfach mit dem Umstieg wie ich dachte?
Vielen Dank für eure Hilfe.

Re: Access-Datenbank mit OBCD und PureBasic x64

Verfasst: 26.12.2018 03:03
von mk-soft
Vermute den Fehler wo anders.

Bei x86 hat man viele Variablen mit name.l (Long) angelegt.
Beim umsteigen auf x64 muss man aber die Variablen die mit Handles oder ID´s zusammenhängen auf name.i (integer) ändern,
da Handles oder ID´s bei x64 8Byte gross sind.

Am best alles mit suchen/ersetzen von ".l" nach ".i" durchführen...

Re: Access-Datenbank mit OBCD und PureBasic x64

Verfasst: 26.12.2018 11:20
von ThoPie
Vielen Dank für die Idee.
Dies Umstellung von .l auf .i hatte ich vorher schon gemacht. Beziehungsweise hatte ich .l gar nicht verwendet.

Der Speicherfehler kommt übrigens in der Zeile:

Code: Alles auswählen

Case "Anmeldeversuche"
Sowohl "Bezeichnung", als auch "Wert" sind in der Access-Tabelle Strings mit festen Längen.

Re: Access-Datenbank mit OBCD und PureBasic x64

Verfasst: 26.12.2018 17:49
von mk-soft
Vielleicht mag es nicht das Feld Wert als Long zu lesen

Code: Alles auswählen

DatabaseQuery(#dbPersonal,"SELECT Bezeichnung,Wert FROM tblEinstellungenSystem")
  While NextDatabaseRow(#dbPersonal)
    Select GetDatabaseString(#dbPersonal,0)
      Case "Anmeldeversuche"
        E\Anmeldeversuche=Val(GetDatabaseString(#dbPersonal,1))
      ...
    EndSelect
  Wend
  FinishDatabaseQuery(#dbPersonal)

Re: Access-Datenbank mit OBCD und PureBasic x64

Verfasst: 02.01.2019 18:26
von ThoPie
Hallo,

leider ist dies nicht das Problem.
Kann es sein das Strings irgendwie anders behandelt werden?
Kann es evtl. sein, dass ich die 64bit DataBase-Engine von Access installieren muss? Ich arbeite nämlich mit der 32bit-Version von Office?

[Gelöst] Access-Datenbank mit OBCD und PureBasic x64

Verfasst: 02.01.2019 18:44
von ThoPie
Ja, das ist es.
Habe parallel zur 32-bit-Version von Office, die 64-bit-Access-Runtime installiert.