Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi MS Access-Verbindung funktioniert nur in der IDE (https://www.delphipraxis.net/212080-ms-access-verbindung-funktioniert-nur-der-ide.html)

Delphi.Narium 16. Dez 2022 12:05

AW: MS Access-Verbindung funktioniert nur in der IDE
 
Delphi-Quellcode:
function GetConnectionString(handle : THandle; ADOConnection : TADOConnection; sConnection : String = '') : Boolean;
begin
  ADOConnection.Connected := False;
  // Hier wird der Dialog zum Aufbau des ConnectionString aufgerufen,
  // analog zu dem Aufbau per ObjektInspektor in der IDE.
  ADOConnection.ConnectionString := PromptDataSource(handle,sConnection);
  ADOConnection.Connected := True;
  Result := ADOConnection.Connected;
end;
ADOConnection wird der Funktion doch als Parameter übergeben. Da muss was anderes im Argen liegen, so dass da ein Fehler auftritt. Dabei sollte es vollkommen egal sein, wie die ADOConnection im übrigen Programmteil, im Formular oder sonstwo benannt wurde.

Die Funktion könnte man auch in 'ne beliebige Unit auslagern und dann aus dem Formular aufrufen.

Habe mein Programm, aus dem die Funktion "geklaut" wurde, gerade noch mal kompiliert. Bei meinem ollen Delphi 7 funktioniert das anstandslos.

OsCor 16. Dez 2022 12:22

AW: MS Access-Verbindung funktioniert nur in der IDE
 
Vermutlich ist da ein ganz banaler Fehler, den ich nicht erkennen kann.
Der komplette Code sieht so aus:
Code:
unit HFCon;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Data.Win.ADODB;

type
  TForm1 = class(TForm)
    ADOTable1: TADOTable;
    ADOConnection1: TADOConnection;
    procedure FormCreate(Sender: TObject);

  private
    function GetConnectionString(handle : THandle; ADOConnection1 : TADOConnection;*sConnection : String = '') : Boolean;
  public
  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.
In der IDE wird schon in der Deklaration der Funktion der Name GetConnectionString mit einer Wellenlinie unterlegt und als Fehler markiert.

Gruß
Oswald

johndoe049 16. Dez 2022 12:46

AW: MS Access-Verbindung funktioniert nur in der IDE
 
gelöscht - falscher Topic.

Delphi.Narium 16. Dez 2022 13:04

AW: MS Access-Verbindung funktioniert nur in der IDE
 
Zitat:

Zitat von OsCor (Beitrag 1516314)
Vermutlich ist da ein ganz banaler Fehler, den ich nicht erkennen kann.
Der komplette Code sieht so aus:
Code:
unit HFCon;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Data.Win.ADODB;

type
  TForm1 = class(TForm)
    ADOTable1: TADOTable;
    ADOConnection1: TADOConnection;
    procedure FormCreate(Sender: TObject);

  private
    function GetConnectionString(handle : THandle; ADOConnection1 : TADOConnection;*sConnection : String = '') : Boolean;
  public
  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.
In der IDE wird schon in der Deklaration der Funktion der Name GetConnectionString mit einer Wellenlinie unterlegt und als Fehler markiert.

Gruß
Oswald

Die Funktion ist eigentlich kein Teil des Formulars.

Die Zeilen
Delphi-Quellcode:
function GetConnectionString(handle : THandle; ADOConnection1 : TADOConnection;*sConnection : String = '') : Boolean;
hinter
Delphi-Quellcode:
private
ist überflüssig.

Ein Umbenennen von ADOConnection nach ADOConnection1 ist ebenfalls überflüssig.

Einfach mal meine Funktion unverändert übernehmen und den Aufruf ebenfalls?

Noch ein Versuch:
Delphi-Quellcode:
function GetConnectionString(Handle : THandle;
                             ADOConnection : TADOConnection;
                             sConnection : String = '') : Boolean;
begin
  ADOConnection.Connected := False;
  // Hier wird der Dialog zum Aufbau des ConnectionString aufgerufen,
  // analog zu dem Aufbau per ObjektInspektor in der IDE.
  ADOConnection.ConnectionString := PromptDataSource(handle,sConnection);
  ADOConnection.Connected := True;
  Result := ADOConnection.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;
Und das jetzt bitte einfach nur per Copy&Paste in Deinen Quelltext übernehmen.

OsCor 16. Dez 2022 14:42

AW: MS Access-Verbindung funktioniert nur in der IDE
 
Sei mir bitte nicht böse, aber das hatte ich als allererstes getan und jetzt nochmal. Es macht mich ja gerade fuchsig, dass es bei dir läuft und bei mir nicht.

Wieso wird ADOConnection in der Funktion als undeklarierter Bezeichner angeführt? Nochmal der Quelltext komplett:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Data.Win.ADODB;

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;
*****************************ADOConnection : TADOConnection;
*****************************sConnection : String = '') : Boolean;
begin
**ADOConnection.Connected := False;
**// Hier wird der Dialog zum Aufbau des ConnectionString aufgerufen,
**// analog zu dem Aufbau per ObjektInspektor in der IDE.
**ADOConnection.ConnectionString := PromptDataSource(handle,sConnection);
**ADOConnection.Connected := True;
**Result := ADOConnection.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.

Delphi.Narium 16. Dez 2022 15:08

AW: MS Access-Verbindung funktioniert nur in der IDE
 
Wo kommen die vielen Sterne her, die in der Funktion hier im Quellcode stehen?

Es sieht ein bisserl nach führenden Leerzeichen aus, ein bisserl aber auch nicht.

In Deiner Deklaration des Formulars sind jedoch keine "führenden Sterne" zu sehen.

Haben wir hier irgendein Problem mit nicht zwingend überall darstellbaren Sonderzeichen zu tuen?

Entferne in Deinem Quelltext bitte mal alle Zeichen, die hier im Forum als * dargestellt werden. Bleibt das Problem dann?

OsCor 16. Dez 2022 15:25

AW: MS Access-Verbindung funktioniert nur in der IDE
 
Die Sterne kamen also offensichtlich daher, dass ich den Code einfach per Copy&Paste in meinen Quelltext übernommen habe.
Sternchen sind zwar schön, aber hier waren sie fehl am Platz :-)
Jetzt funktioniert das nämlich. Schön.

Gleich zwei Sachen gelernt…

Vielen Dank sagt
Oswald


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:52 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz