32bit Projekt in 64bit umwandeln?
-
Hallo Community,
vorweg: Ich bin neu hier und habe vor dem Formulieren meiner Anfrage die Suchfunktion ausgiebig bemüht, jedoch nichts gefunden, was mir weiterhilft.Ich habe mit C++Builder 10 ein 32bit Datenbank-Projekt erstellt, das mit einer 32bit ODBC Datenquelle arbeitet, die auf eine MySQL Datenbank auf einem 32bit-Server zugreift.
Nachdem ich die Datenbank mit einem Dump-Skript auf den 64bit-Server übertragen habe, möchte ich meine 32bit-Anwendung mit 64bit neu erstellen.
In den Projekt-Optionen erscheint jedoch nicht "64-Bit-Windows Plattform" als Ziel Auswahlmöglichkeit.
In meinem bin-Verzeichnis ist die Compiler-Datei "bcc64.exe" vorhanden.
Kann jemand helfen?
Danke im Voraus.
Grüße
Guido Schlenke
-
Hallo,
schau mal in der Projektverwaltung, ob dort die Zielplattform "64-bit Windows" eingetragen (und aktiviert) ist, s.a. 64-Bit-Windows-Anwendungsentwicklung.
-
Hey Guido,
Dich gibts also auch noch
Ich kann Dir bei C++ Builder nicht helfen, aber hier findest Du ganz sicher kompetente Hilfe ...
Wie lebt sichs so im Ruhestand?Gruß,
Guido
-
@Th69 Vielen Dank für den Hinweis, war zunächst etwas kryptisch, letztlich hab ich es aber gefunden unter Zielplattformen hinzufügen, perfekt.
Guido
-
Anscheinend gibt es nun das nächste Problem:
Ich benutze eine Library von Chilkat zur Verwendung von csv-Dateien, die im 32-Bit Format existiert. Kann jemand kurz erklären, wie ich eine 64-Bit Library erstellen kann ?
-
@Belli Ist deine donblech-Adresse noch aktiv?
Hab dir dort geantwortet.
-
Meinst du Chilkat C/C++ Libraries for Embarcadero C++ Builder? Dort gibt es auch eine 64bit-Version, die du linken kannst.
-
@Th69 Ja genau, inzwischen hab ich die .a-Bibliothek auch gefunden und eingebunden.
Nur wenn ich versuche, in der ADOConnection eine Verbindung zur 64Bit DSN aufzubauen, wird diese gar nicht angezeigt.
Kann das am OLE DB Provider liegen und gibt es irgendwo eine 64 Bit Version, die ich herunterladen kann?
Im MS Download Center hab ich nichts gefunden.
-
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-ver16Wobei 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-iWobei 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.htmlNur 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.