![]() |
AW: MS Access-Verbindung funktioniert nur in der IDE
Klar. Aber da der 32-bit-Treiber von der IDE bei Erstellen des Connectionstrings über den Objektinspektor angezeigt wird, ist das Übernehmen einfach - auch wenn man gedanklich erstmal stolpert, weil der Treiber beim Download 2010 heißt, in der IDE aber mit der Zahl 12 angezeigt wird.
Wenn ich jetzt zur Laufzeit den 64-bit Treiber nutzen möchte, weiß ich doch gar nicht, wie der Connectionstring korrekt aussehen muss. Weißt du, wie der aussehen sollte? Das wäre natürlich toll. Gruß Oswald |
AW: MS Access-Verbindung funktioniert nur in der IDE
Es kommt hier lediglich auf die Bittigkeit des Programms an. Also 64 Bit Programm -> 64 Bit Engine
Gruß Kompi |
AW: MS Access-Verbindung funktioniert nur in der IDE
Da habe ich mich wohl nicht richtig ausgedrückt: 'Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\XXXXXXX.accdb;Persist Security Info=False'
Das fett Gedruckte ist das, von dem ich nicht weiß, wie es bei der 64-bittigen Version aussehen müsste. Gruß Oswald |
AW: MS Access-Verbindung funktioniert nur in der IDE
Das bleibt alles so.
Gruß Kompi |
AW: MS Access-Verbindung funktioniert nur in der IDE
Zitat:
Damit muss Du nicht mehr auf Biegen und Brechen versuchen den ConnectionsString für die 32bittige IDE an ein 64bittiges Programm anzupassen. Außerdem kannst Du so einfach herausgekommen, ob Du mit 'nem 64bittigen Programm überhaupt einen ConnectionString zusammenstellen kann. Wenn z. B. Treiber ... für die 64Bit-Version fehlen, wirst Du das hier sofort bemerken. Sprich: Die Sucherei nach 'nem passenden ConnectionString hat dann innerhalb von ca. 5 Minuten ein Ende. Hast Du den ConnectionString einmal zusammen, kannst Du die Funktion auf wieder rauswerfen. Und Zitat:
Und wenn Du mit PromptDataSource keinen funktionierenden ConnectionString hinbekommst, dann ist das Problem nicht der ConnectionString sondern "irgendwo" in der Installation der Treiber, Engines, ... zu suchen. |
AW: MS Access-Verbindung funktioniert nur in der IDE
@Kompi
Ok, alles klar. Damit man den 64-bit Treiber installieren kann, muss der 32-bittige erstmal deinstalliert werden. Dann den 64-bittigen installieren und anschließend den 32-bittigen wieder einrichten. Jetzt funktionierts tatsächlich. Mann…:roll: @Delphi.Narium Das habe ich jetzt auch kapiert. Es dankt herzlich Oswald |
AW: MS Access-Verbindung funktioniert nur in der IDE
@Delphi.Narium
Jetzt will ich es aber wissen. Leider habe ich da noch ein Problem mit deinem Code: ADOConnection.Connected := False; Da wird ADOConnection als undeklarierter Bezeichner angemerkt. Was verstehe ich da falsch? Gruß Oswald |
AW: MS Access-Verbindung funktioniert nur in der IDE
Die Funktion wird mit
Delphi-Quellcode:
aufgerufen, da musst Du statt ADOConnection1 die von Dir im Programm genutzte TADOConnection übergeben.
if GetConnectionString(handle,ADOConnection1) then begin
Wenn diese tatsächlich undefiniert ist, müsste der Fehler bereits beim Funktionsaufruf passieren. Es könnte durchaus hilfreich sein, wenn Du mal den Quelltext zeigen könntest, mit dem Du den Aufruf machst, so ist das einfach nur ein Suchen mit Hilfe der :glaskugel: |
AW: MS Access-Verbindung funktioniert nur in der IDE
Zum Ausprobieren habe ich einfach eine Form erstellt und eine ADOTable und eine ADOConnection drauf gestellt. Wenn ich jetzt deinen Code übernehme, sieht das aus, wie folgt:
Delphi-Quellcode:
Die markierte Zeile in der Funktion wird mit „E2003 Undeklarierter Bezeichner” markiert. Was muss ich da noch rein machen?
type
TForm1 = class(TForm) ADOTable1: TADOTable; ADOConnection1: TADOConnection; procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} function GetConnectionString(handle : THandle; ADOConnection1 : TADOConnection;*sConnection : String = '') : Boolean; begin ------> ADOConnection1.Connected := False; **// Hier wird der Dialog zum Aufbau des ConnectionString aufgerufen, **// analog zu dem Aufbau per ObjektInspektor in der IDE. **ADOConnection1.ConnectionString := PromptDataSource(handle,sConnection); **ADOConnection1.Connected := True; **Result := ADOConnection1.Connected; end; procedure TForm1.FormCreate(Sender: TObject); begin if GetConnectionString(handle,ADOConnection1) then begin ****// Hier sollte die Datenbankverbindung bestehen. ****// Den ConnctionString kannst Du Dir, bei Bedarf per STRG+C aus dem Dialog ****// kopieren und dann an sinnvoller Stelle speichern bzw. der ADOConnection zuweisen. ****ShowMessage(ADOConnection1.ConnectionString); **end else begin ****MessageDLG('Es konnte keine Datenbankverbindung hergestellt werden.',mtError,[mbOk],0); **end; end; end; end. Gruß Oswald |
AW: MS Access-Verbindung funktioniert nur in der IDE
Delphi-Quellcode:
Da die Procedure nicht Teil der Klasse TForm ist, kennt sie ADOConnection1 nicht.
type
TForm1 = class(TForm) ADOTable1: TADOTable; ADOConnection1: TADOConnection; procedure FormCreate(Sender: TObject); private { Private-Deklarationen } function GetConnectionString(handle : THandle; ADOConnection1 : TADOConnection;*sConnection : String = '') : Boolean; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} function TForm1.GetConnectionString(handle : THandle; ADOConnection1 : TADOConnection;*sConnection : String = '') : Boolean; begin ------> ADOConnection1.Connected := False; **// Hier wird der Dialog zum Aufbau des ConnectionString aufgerufen, **// analog zu dem Aufbau per ObjektInspektor in der IDE. **ADOConnection1.ConnectionString := PromptDataSource(handle,sConnection); **ADOConnection1.Connected := True; **Result := ADOConnection1.Connected; end; procedure TForm1.FormCreate(Sender: TObject); begin if GetConnectionString(handle,ADOConnection1) then begin ****// Hier sollte die Datenbankverbindung bestehen. ****// Den ConnctionString kannst Du Dir, bei Bedarf per STRG+C aus dem Dialog ****// kopieren und dann an sinnvoller Stelle speichern bzw. der ADOConnection zuweisen. ****ShowMessage(ADOConnection1.ConnectionString); **end else begin ****MessageDLG('Es konnte keine Datenbankverbindung hergestellt werden.',mtError,[mbOk],0); **end; end; end; end. Grüße Klaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz