Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Aus Textdatei in ADOConnection.ConnectionString (https://www.delphipraxis.net/202266-aus-textdatei-adoconnection-connectionstring.html)

Kratos 15. Okt 2019 09:27

Delphi-Version: 10.2 Tokyo

Aus Textdatei in ADOConnection.ConnectionString
 
Hi Leute,

ich bin Delphi-Neuling und nutze Delphi 10.3. Das konnte ich aber leider hier im Forum nicht auswählen.
Ich hab das Forum schon durchsucht, aber nicht ganz das Richtige für mich gefunden. Ich hoffe es ist kein Problem, dass ich ein neues Thema erstellt habe. Vielleicht hat ja einer einen passenden Link parat, sodass dieser Thread schnell wieder geschlossen werden kann.

Mein Programmaufbau:
Code:
edtLaden(TEdit), btnLaden(TButton)
btnConnect(TButton)
ADOCOnnection
ListBox1
Meine Idee:
Ich klick auf
Delphi-Quellcode:
btnLaden
.
Delphi-Quellcode:
TOpenDialog
erscheint. Ich wähle eine txt-Datei aus. Der Pfad wird in
Delphi-Quellcode:
edtLaden
geladen. In der txt-Datei ist in einer einzigen Zeile ein ConnectionString gespeichert, den ich brauche um eine Verbindung zu einer Datenbank herzustellen.
--- Bis hier hin klappt alles.
Wenn ich jetzt auf
Delphi-Quellcode:
btnConnect
klicke, soll die erste Zeile/der Inhalt der txt-Datei in
Delphi-Quellcode:
ADOConnection.ConnectionString
geschrieben werden. Das klappt aber nicht. ich bekomme folgende Fehlermeldung:

Delphi-Quellcode:
 E2010 Inkompatible Typen: 'WideString' und 'procedure, untyped pointer or untyped parameter'


Der Inhalt der Datebank soll dann in ListBox1 angezeigt werden. Wenn ich den ConnectionString manuell in
Delphi-Quellcode:
ADOConnection.ConnectionString
eintrage, klappts.
Wenn ich den ConnectionString bereits bei
Delphi-Quellcode:
FormCreate
aufrufe, klappts auch.
Jedoch will ich später mit meinen Programm, mehrere Datenbanken einlesen, ohne das Programm schließen zu müssen und ohne den ConnectionString jedes Mal neu eintragen zu müssen.
Vielleicht kann mir ja jemand weiterhelfen :)

Mein Versuch:
Code:
procedure TForm.btnConnectClick(Sender: TObject);
begin
  ADOConnection.Connected := False;
  ADOConnection.ConnectionString := ListBox1.Items.LoadFromFile(edtLaden.Text);
  ADOConnection.Connected := True;
end;
Das klappt:
Code:
procedure TForm.FormCreate(Sender: TObject);
begin
  ADOConnection.ConnectionString := 'bliblablub';
end;

Moombas 15. Okt 2019 10:20

AW: Aus Textdatei in ADOConnection.ConnectionString
 
ListBox1.Items.LoadFromFile(edtLaden.Text) ist ja auch kein String.
Du willst ja das erste Item der Listbox haben.

Code:
 ADOConnection.ConnectionString := ListBox1.Items[Zeile des ConnectionString];

p80286 15. Okt 2019 10:24

AW: Aus Textdatei in ADOConnection.ConnectionString
 
Code:
  ADOConnection.ConnectionString := ListBox1.Items.LoadFromFile(edtLaden.Text);

  ADOConnection.ConnectionString := 'bliblablub';
Fällt Dir was auf?

Falls nicht
Delphi-Quellcode:
ADOConnection.ConnectionString := ListBox1.Items[a];
ist erfolgversprechender. (hab jetzt die genaue Syntax nicht parat, es muß auf jeden Fall ein String sein)

Gruß
K-H

Kratos 15. Okt 2019 13:12

AW: Aus Textdatei in ADOConnection.ConnectionString
 
Dankeschön euch beiden für eure schnellen Antworten!
Das hat mich wieder ein Stück weitergebracht.


Wie würden die ersten Denkanstöße aussehen, wenn man den Zwischenschritt (Zwischenspeichern des Inhalts in der ListBox) weglassen möchte?
Meine neue Idee ist, dass der ConnectionString, der in der txt-Datei gespeichert ist, direkt aus der txt-Datei in
Delphi-Quellcode:
ADOConnection.ConnectionString
gelesen werden soll.
Ist das überhaupt möglich?

Bbommel 15. Okt 2019 13:35

AW: Aus Textdatei in ADOConnection.ConnectionString
 
Also, eine von Delphi mitgelieferte Funktion, mit der du als "Einzeiler" den Inhalt der Datei an den ConnectionString zuweisen kannst, fällt mir zumindest auf Anhieb nicht ein. Die ganzen LoadFromFile und ähnliche sind alles Methoden, die eine Datei irgendwo in den Speicher laden und das kann man dann sauber weiterverarbeiten.

Aber es ist auf jeden Fall der absolut richtige Ansatz von dir, dass du das Laden der Datei nicht über den Umweg einer Visuellen Komponente wie der Listbox umsetzen willst! Ein möglicher und einfacher Ansatz, der dem bisherigen sehr nahe kommt, aber eben ohne diese visuelle Komponente, ist die Nutzung von TStringList:

Delphi-Quellcode:
procedure TForm.btnConnectClick(Sender: TObject);
var
  fileContent: TStringList;
begin
  fileContent:=TStringList.Create;
  fileContent.LoadFromFile(edtLaden.Text);
  ADOConnection.Connected := False;
  ADOConnection.ConnectionString := fileContent[0];
  ADOConnection.Connected := True;
  fileContent.Free;
end;
Um es sauber zu machen, sollte man das ganze noch mit try/except und/oder try/finally absichern, damit man reagieren kann, wenn beim Laden der Datei ein Problem auftritt. Aber das nur schon mal als Hinweis für den nächsten Schritt.

Kratos 15. Okt 2019 14:44

AW: Aus Textdatei in ADOConnection.ConnectionString
 
Vielen Dank für den Tipp!

Mit StringList hab ich noch nicht gearbeitet.
Das werde ich jetzt auf jeden Fall nachholen.

VG
Kratos

Kratos 15. Okt 2019 15:02

AW: Aus Textdatei in ADOConnection.ConnectionString
 
@Bbommel

Hat super geklappt dein Code. Danke dir!

Eine Frage hab ich dazu allerdings noch:
Was bedeutet die
Delphi-Quellcode:
[0]
bei
Code:
ADOConnection.ConnectionString := fileContent[0];
?
Bedeutet das, dass die erste Zeile, der in der Variablen
Delphi-Quellcode:
fileContent
gespeicherten Datei, dem
Delphi-Quellcode:
ConnectionString
zugewiesen wird, oder hat das eine andere Bedeutung?

Bbommel 15. Okt 2019 15:14

AW: Aus Textdatei in ADOConnection.ConnectionString
 
Genau, so bekommst du den ersten Eintrag der Liste der Strings, die in der StringList "fileContent" gespeichert sind. Und das wiederum ist die erste Zeile deiner Datei.

Ausführlicher könnte man auch schreiben:
Delphi-Quellcode:
ADOConnection.ConnectionString := fileContent.Strings[0];

Aber weil "Strings" die Standardeigenschaft einer TStringList ist, kann man das auch weglassen.

Siehe hier: http://docwiki.embarcadero.com/Libra...trings.Strings

Ich hoffe, da waren noch ein paar hilfreiche Stichworte dabei, damit du dich weiter einlesen kannst. :-)

Kratos 15. Okt 2019 15:29

AW: Aus Textdatei in ADOConnection.ConnectionString
 
@Bbommel
Alles klar, danke dir.
Zitat:

Ich hoffe, da waren noch ein paar hilfreiche Stichworte dabei, damit du dich weiter einlesen kannst.
Ja, auf jeden Fall.

Ich finde es gerade irgendwie super geil, wie hier der Austausch funktioniert! :)

Nochmal danke @alle.

VG
Kratos

haentschman 16. Okt 2019 07:31

AW: Aus Textdatei in ADOConnection.ConnectionString
 
Moin...8-)
Unasbhängig von der Aufgabe...ich würde dir statt einer "normalen" Textdatei eine INI Datei empfehlen. Ist zwar auch nur eine Textdatei aber mit Struktur.
https://www.delphi-treff.de/tipps-tr...n/ini-dateien/
:wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:36 Uhr.
Seite 1 von 2  1 2      

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