ODBC-Datenbankanbindung und 64-Bit

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Bamsagla
Beiträge: 33
Registriert: 03.12.2004 14:49
Wohnort: Laufen

ODBC-Datenbankanbindung und 64-Bit

Beitrag von Bamsagla »

Hallo zusammen,

da ich in Bezug auf meine Problematik mit ODBC-Datenbankanbindung noch nix rechtes gefunden habe, erlaub ich mir, das hier mal schnell los zu werden.

Nachfolgender Code (aus größerem Programmcode extrahiert) auf 32-Bit und 64-Bit Executable kompiliert:

Code: Alles auswählen

#ODBC_ADD_DSN = 1

Procedure Verbindung(Driver.s,strAttributes.s,ODBCArt.l)
  ODBCLibrary = 1
  Resultat = OpenLibrary(ODBCLibrary,"ODBCCP32.DLL")
  If Resultat
    While Not Right(strAttributes, 2) = ";;"
      strAttributes + ";"
    Wend
    MyMemory = AllocateMemory(Len(strAttributes) * SizeOf(character) + SizeOf(character))
    PokeS(MyMemory, strAttributes, Len(strAttributes))
    For L=1 To Len(strAttributes)
      CompilerIf #PB_Compiler_Unicode
        If PeekW(MyMemory + (L - 1) * SizeOf(character)) = Asc(";")
          PokeW(MyMemory + (L - 1) * SizeOf(character), 0)
        EndIf
      CompilerElse
        If PeekB(MyMemory + L - 1) = Asc(";")
          PokeB(MyMemory + L - 1, 0)
        EndIf
      CompilerEndIf
    Next L
    Resultat = CallFunction(ODBCLibrary,"SQLConfigDataSource",0,ODBCArt,Driver,MyMemory)
    FreeMemory(MyMemory)
    CloseLibrary(ODBCLibrary)
    If Resultat: ProcedureReturn 1: EndIf
  Else
    MessageRequester("Fehler!", "Folgende Datenbanktreiber konnten nicht geladen werden: " + Driver, #MB_ICONERROR)
  EndIf
EndProcedure 

Resultat = Verbindung("Microsoft Access Driver (*.mdb)","Server=Meister;Description=Handicap-Meister;DSN=Handicap;DBQ=" + Handicapdata$ + ";UID=Administrator;PWD=abcdef;",#ODBC_ADD_DSN)
Debug Resultat
Bei 32-Bit funktioniert soweit alles einwandfrei, sobald aber das Executable mit der 64-Bit Version von PureBasic kompiliert wird, kann die Datenbankverbindung nicht hergestellt werden (Debug = 0).

Meiner Meinung nach kann es eigentlich lediglich wegen der ODBCCP32.DLL nicht funktionieren, die eingebunden wird. Ich glaub es gibt ja keine direkte Möglichkeit, eine 32-Bit-System-DLL direkt über eine 64-Bit Anwendung zu nutzen. Andererseits dachte ich mir, Windows (in diesem Fall Windows Vista 64-Bit Ultimate) würde dann automatisch im Verzeichnis SysWOW64 eine entsprechende 64-Bit-Variante ansprechen???

Vielleicht weiss ja jemand noch einen anderen Lösungsansatz bzw. eine bessere Möglichkeit, um das Ganze unter 64-Bit zum Laufen zu bringen?

Brennt zwar nicht auf den Nägeln, interessiert mich aber schon, da mehrere meiner Programme diese Funktion für dynamische ODBC-Anbindung mit Access-Datenbanken nutzen.

Danke für jegliche Hilfe, Bamsagla.
Service Packs sind dazu da, die Fehler zu verbessern, die vorher nicht richtig funktioniert haben!
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Es gibt keinen 64-bit Access-Treiber. Es gibt nur einen Treiber für den
SQL-Server.

Hab da mal nach gegoogled ohne grossen Erfolg, hab lediglich den
ODBC-Manager für 32-Bit gefunden (um zu sehen das die alten Treiber
wenigstens dort noch vorhanden sind)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Bamsagla
Beiträge: 33
Registriert: 03.12.2004 14:49
Wohnort: Laufen

64-Bit Treiber für Acces nicht verfügbar?

Beitrag von Bamsagla »

Hallo ts-soft,

vielen Dank für die prompte Antwort.
Das könnte also bedeuten, dass ich meine Programme in dieser Form nicht als 64-Bit Software anbieten kann...
Möglicherweise führt ja auch noch ein Weg über die Registry - manuelle Registrierung einer ODBC-Verbindung...?

Mal schaun, danke jedenfalls.
Service Packs sind dazu da, die Fehler zu verbessern, die vorher nicht richtig funktioniert haben!
Bild
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: ODBC-Datenbankanbindung und 64-Bit

Beitrag von Kiffi »

Bamsagla hat geschrieben:Vielleicht weiss ja jemand noch einen anderen Lösungsansatz bzw. eine
bessere Möglichkeit, um das Ganze unter 64-Bit zum Laufen zu bringen?
vielleicht wäre ADOmate von srod was für Dich.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Bamsagla
Beiträge: 33
Registriert: 03.12.2004 14:49
Wohnort: Laufen

ADO-Mate

Beitrag von Bamsagla »

Hallo Kiffi,
danke für den Vorschlag mit dem ADO-Mate. Bin leider noch nicht dazu gekommen, das Teil zu testen, aber soviel ich hier auf die Schnelle erkennen kann, ist der Aufbau von ADO-Mate objektorientiert.
Also: die Datenbank wird als neues Objekt angesprochen und auf dieses Objekt werden dann wiederum Anweisungen ausgeführt...?
Ist schon mal was zum Testen, aber ob ich mein Konstrukt auf die neuen Befehle umschreib und diese (Freeware-) Lib verwende, muss ich mir noch überlegen (Weiterentwicklung, Kompatibilität...).
Trotzdem danke und ich werd das Ganze mal mit Testcode noch eingehender analysieren.
Ciao, Bamsagla.
Service Packs sind dazu da, die Fehler zu verbessern, die vorher nicht richtig funktioniert haben!
Bild
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: ADO-Mate

Beitrag von Kiffi »

@Bamsagla:

so viel muss Du nun auch nicht umschreiben.

PB: OpenDatabase()
ADOmate: ADOmate_OpenDatabase()

PB: DatabaseQuery()
ADOmate: ADOmate_DatabaseQuery()

PB: DatabaseUpdate()
ADOmate: ADOmate_DatabaseUpdate()

etc.

Es handelt sich bei ADOmate übrigens nicht um eine Lib, sondern um ein
Include. Somit brauchst Du Dir bzgl. der berühmt-berüchtigten
Inkompatibilitäten, die bei Libs auftreten können, keine Sorgen zu
machen.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Hinweis: ADOmate läuft nicht unter 64-Bit
Nicht das da falsche Hoffnungen aufkommen :wink:

Warum, wieso, keine Ahnung
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

ts-soft hat geschrieben:Hinweis: ADOmate läuft nicht unter 64-Bit
oha! Wenn ich das gewusst hätte, dann hätte ich es nicht empfohlen. :|

Grüße ... Kiffi
a²+b²=mc²
Antworten