Seite 1 von 1

ODBC-Datenbankanbindung und 64-Bit

Verfasst: 15.01.2009 21:46
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.

Verfasst: 15.01.2009 21:53
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)

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

Verfasst: 15.01.2009 22:06
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.

Re: ODBC-Datenbankanbindung und 64-Bit

Verfasst: 15.01.2009 22:18
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

ADO-Mate

Verfasst: 19.01.2009 16:14
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.

Re: ADO-Mate

Verfasst: 19.01.2009 19:02
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

Verfasst: 19.01.2009 19:05
von ts-soft
Hinweis: ADOmate läuft nicht unter 64-Bit
Nicht das da falsche Hoffnungen aufkommen :wink:

Warum, wieso, keine Ahnung

Verfasst: 19.01.2009 19:38
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