32bit Projekt in 64bit umwandeln?



  • 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.


Log in to reply