32bit Projekt in 64bit umwandeln?



  • Welche Datenbank benutzt du denn?

    Ruf mal den "ODBC-Datenquellen-Administrator (64-Bit)" auf - am besten einfach in der Windows-Suche "ODBC" eingeben.
    Und schau dann im Reiter "Benutzer-DSN" (oder "System-DSN"), für welche Plattform dieser installiert ist.
    Bei mir ist z.B. kein DSN für den "SQL Server" voreingestellt, obwohl der Treiber installiert ist (es muß ja speziell konfiguriert werden), jedoch sind Einträge für "Excel Files" und "MS Access Database" mit "32/64-Bit" vorhanden.



  • @Th69 Ich verwende die 64 Bit Version des MySQL Servers 8.2 Community und habe mit dem 64 Bit ODBC Administrator eine 64 Bit Datenquelle angelegt. Wenn ich beim Aufbauen des Verbindungsstrings den MS OLE DB ODBC Treiber auswähle, werden nur 32 Bit-DSNs und keine 64 Bit DSN angezeigt.



  • @gschlenke Im Download Center habe ich dann die 64 Bit Version https://go.microsoft.com/fwlink/?linkid=2248728 des Providers (allerdings nur für SQL Server gefunden) installiert und damit den Verbindungsstring aufgebaut und meine 64 Bit Datenquelle eingetragen. Der Verbindungstest war erfolgreich und die Eigenschaft Connected konnte ich auf True setzen.
    Beim Compilieren gab es aber dann folgenden Fehler:
    [Microsoft][ODBC Driver Manager]
    Der angegebene DSN weist eine nicht übereinstimmende Architektur von Treiber und Anwendung auf.
    Zielplattform ist Win64. Ich weiß nicht was ich falsch mache.



  • Der MySQL Connector/ODBC 8.2.0 ist schon der richtige Treiber für dich, der andere ist ja nur für den MS SQL Server.

    Wird denn bei dessen DSN "32/64-Bit" angezeigt oder nur "64-Bit"?
    Ansonsten gibt es ja auch den "ODBC-Datenquellen-Administrator (32-Bit)". Wenn du dort dann einen Eintrag für MySQL anlegst, kannst du den dann benutzen?

    PS: Was ich noch zum Thema MySQL+ODBC gefunden habe, sind folgende Infos: 4.1 Installing Connector/ODBC on Windows



  • @Th69 Im ODBC DB Adminstrator ist die Plattform mit 64-Bit angegeben, Verbindungstest erfolgreich. Ich glaube, das Problem liegt noch vor der eigentlichen DSN, nämlich beim OLE DB-Provider. Da hab ich "OLE DB Provider for Microsoft Directory Services" ausgewählt.



  • Der ist erst recht falsch.



  • Ok, das hab ich ja auch vermutet, nur ließ sich damit die Verbindung herstellen.
    Wie finde ich denn den richtigen "Provider"?
    Den ODBC-Treiber von MySQL habe ich ja in der 64-Bit Version eingestellt.



  • Der MySQL-Connector müßte doch unter "Treiber" auftauchen, oder?
    Dann füge in "Benutzer-DSN" eine neue DSN hinzu und wähle dafür diesen Treiber aus (und konfiguriere ihn dann entsprechend).



  • Mal einfach in den Raum geschmissen.
    Wieso wird ODBC überhaupt genutzt.
    Falls eh nur mit mysql servern kommuniziert werden soll, wäre es eventuell besser direkt den mysql client einzubinden statt über odbc zu gehen.
    Aber es würde ein größerer umbau bedeuten, da die API komplett anders ist.

    Aber dadurch würde man die ganze Problematik mit "Einrichtung" einer ODBC Datenquelle sparen.
    Besonders wenn dann die Software auf ein anderes System verschoben werden soll/muss.
    Denn soweit ich den Verlauf der Diskussion bisher verstehe, muss die ODBC Datenquelle im System hinterlegt werden damit die Software diese Nutzen kann.
    Und diese EInrichtung muss man dann jedesmal wiederholen wenn die Software auf anderen Systemen umgezogen werden muss aber weiterhin auf die selbe mysql db instanz zugreifen soll.



  • @firefly: Dann könnte man aber nicht mehr die Delphi/C++ Builder ADO-Komponenten Data.Win.ADODB damit benutzen - und müßte die ganze UI-Anbindung an die VCL-Komponenten umschreiben.

    Als Alternative ginge noch ZeosLib (ältere Projektseite: ZeosLib) oder das proprietäre MyDAC.



  • @Th69 sagte in 32bit Projekt in 64bit umwandeln?:

    @firefly: Dann könnte man aber nicht mehr die Delphi/C++ Builder ADO-Komponenten Data.Win.ADODB damit benutzen - und müßte die ganze UI-Anbindung an die VCL-Komponenten umschreiben.

    Als Alternative ginge noch ZeosLib (ältere Projektseite: ZeosLib) oder das proprietäre MyDAC.

    Öhm ADO ist nicht ODBC. Das sind zwei grundlegend andere APIs
    Wobei ADO nur ein Wrapper um die OLE-DB API ist. Und OLE-DB ist der successor zu ODBC.
    https://www.differencebetween.com/difference-between-odbc-and-vs-ado/

    Wobei es einen ADO/OLE-DB Provider für ODBC gibt
    https://learn.microsoft.com/en-us/sql/ado/guide/appendixes/microsoft-ole-db-provider-for-odbc?view=sql-server-ver16

    Wobei man mit diesem Provider auch ohne ein DSN eine verbindung aufbauen kann (siehe beispiel "Syntax without a DSN (DSN-less connection)" vom link oben.

    Und laut dieser alten frage auf stackoverflow wäre der "Driver" Name für 64bit: "{MySQL ODBC 5.1w Driver}"
    https://stackoverflow.com/questions/35341653/why-mysql-odbc-connector-64-bits-does-not-work-well-with-vba-despite-my-system-i

    Wobei die 5.1 die versionsnummer der treibers ist. Und der w suffix nach der Versionsnummer gibt an dass es sich um die Unicode variante handelt und nicht um die ANSI/ASCII variante.
    Die Aktuellste Versionen für den "mysql connector/odbc" sind die Versionen 8.0.x und 8.2.x
    Daher meine Vermutung dass dann der Name wie folgt lautet:
    {MySQL ODBC 8.0w Driver} bzw. {MySQL ODBC 8.2w Driver}

    Was laut diesem link stimmt.
    https://dev.mysql.com/doc/connector-odbc/en/connector-odbc-configuration-connection-without-dsn.html

    Nur dort ohne den w postfix. Aber mit dem hinweis, dass man "MySQL ODBC 8.2 Driver" durch den string ersetzen soll den man wohl bei der Installation des ODBC Treibers angegeben hat als "Driver Name"



  • @gschlenke sagte in 32bit Projekt in 64bit umwandeln?:

    Nur wenn ich versuche, in der ADOConnection eine Verbindung zur 64Bit DSN aufzubauen, wird diese gar nicht angezeigt.

    @firefly: s. Mit ADO-Komponenten arbeiten

    Die ADO-Schicht einer ADO-Anwendung basiert auf Microsoft ADO 2.1, einem OLE DB-Provider bzw. ODBC-Treiber für den Zugriff auf einen Datenspeicher, spezifische Client-Software für das verwendete Datenbanksystem (bei SQL-Datenbanken), ein Back-End-System für Datenbanken, auf das die Anwendung zugreifen kann (bei SQL-Datenbanken) sowie eine Datenbank. Diese Elemente müssen für die ADO-Anwendung ohne Einschränkung verfügbar sein, damit diese voll funktionsfähig ist.

    Und die direkte Angabe des ODBC-Treibers im Connectionstring war schon immer möglich, dazu muß @gschlenke jedoch ersteinmal den richtigen Treiber kennen und benutzen.



  • Ich danke euch herzlich für die ausführlichen Informationen.
    Zur Klarstellung: Der ODBC-Treiber ist nicht das Problem, den habe ich für 64-Bit erstellt und damit die Verbindung zur Datenbank hergestellt.
    In der ADOConnection zeigt der Provider aber nicht diese 64-Bit DSN an.
    Ursprünglich hatte ich die Anwendung mit 32-Bit Komponenten entwickelt und möchte diese nun (nur) auf 64-Bit umschreiben.



  • Werden denn gar keine DSN bei der ADOConnection angezeigt - oder eben nur die 32-bit DSN? Vllt. ist das eher ein Problem mit der IDE?!

    Du kannst aber mal direkt den Connectionstring im Code angeben oder, wie von @firefly schon vorgeschlagen, direkt (ohne DSN) auf die MySQL-DB zugreifen, s. z.B. Delphi – Need simple example to use TAdoConnection to connect to MySql default database (ist zwar Delphi, aber entsprechend nach C++ portierbar).



  • @Th69 Nur 32-Bit DSN werden angezeigt.



  • Und wenn du, wie ich schon vorgeschlagen habe, mal einen 32-Bit DSN für MySQL anlegst, wird der dann im C++ Builder angenommen?

    PS: Ist der C++Builder bei dir noch 32-bit? Dann würde es erklären, warum der keine 64-bit ODBC-Verbindungen anzeigt.



  • @Th69 Ja sicher, mit 32-Bit DSN arbeite ich seit Jahren ohne Probleme.
    Der Hinweis auf 32-Bit-C++Builder ist wohl der Schlüssel. Ich habe angenommen, dass wenn man eine Win64-Zielplattform verwenden kann, es sich auch um 64-Bit Anwendung handeln muss.
    Die gesamte Umgebung ist im Ordner
    C:\Program Files (x86)\Embarcadero\Studio\17.0
    abgelegt. Allerdings befinden sich im ..\bin-Verzeichnis die Anwendungsdateien
    bcc32.exe, bcc32c.exe und bcc64.exe
    Kann man die Umgebung dazu bringen, die 64-Bit Version des Compilers, Linkers ... zu verwenden?
    Oder ist es grundsätzlich nicht möglich mit 64-Bit Datenbanken zu arbeiten?



  • Bei Zielplattform "64-bit Windows" werden schon der 64-Bit Compiler bcc64 und Linker aufgerufen.
    Nur innerhalb der 32-Bit IDE werden eben nur die 32-Bit ODBC DNS angezeigt.
    Zur Laufzeit sollte dann aber im 64-Bit Programm auf die 64-Bit DNS zugegriffen werden, d.h. wenn du in beiden ODBC-Tools denselben Eintrag anlegst, dann sollte es funktionieren.

    Ansonsten zeige mal die Screenshots (innerhalb der IDE als auch die beiden 32/64-Bit ODBC Benutzer-DSN Listen), z.B. als Verlinkung zu imgur.com.

    Edit: Wenn du ein Mikrophon hast, dann können wir auch über discord.com kommunizieren (und Screen-Sharing nutzen) - ich habe einen eigenen Discord-Kanal.


Anmelden zum Antworten