![]() |
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:
Meine Idee:
edtLaden(TEdit), btnLaden(TButton)
btnConnect(TButton) ADOCOnnection ListBox1 Ich klick auf
Delphi-Quellcode:
.
btnLaden
Delphi-Quellcode:
erscheint. Ich wähle eine txt-Datei aus. Der Pfad wird in
TOpenDialog
Delphi-Quellcode:
geladen. In der txt-Datei ist in einer einzigen Zeile ein ConnectionString gespeichert, den ich brauche um eine Verbindung zu einer Datenbank herzustellen.
edtLaden
--- Bis hier hin klappt alles. Wenn ich jetzt auf
Delphi-Quellcode:
klicke, soll die erste Zeile/der Inhalt der txt-Datei in
btnConnect
Delphi-Quellcode:
geschrieben werden. Das klappt aber nicht. ich bekomme folgende Fehlermeldung:
ADOConnection.ConnectionString
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:
eintrage, klappts.
ADOConnection.ConnectionString
Wenn ich den ConnectionString bereits bei
Delphi-Quellcode:
aufrufe, klappts auch.
FormCreate
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:
Das klappt:
procedure TForm.btnConnectClick(Sender: TObject);
begin ADOConnection.Connected := False; ADOConnection.ConnectionString := ListBox1.Items.LoadFromFile(edtLaden.Text); ADOConnection.Connected := True; end;
Code:
procedure TForm.FormCreate(Sender: TObject);
begin ADOConnection.ConnectionString := 'bliblablub'; end; |
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];
|
AW: Aus Textdatei in ADOConnection.ConnectionString
Code:
Fällt Dir was auf?
ADOConnection.ConnectionString := ListBox1.Items.LoadFromFile(edtLaden.Text);
ADOConnection.ConnectionString := 'bliblablub'; Falls nicht
Delphi-Quellcode:
ist erfolgversprechender. (hab jetzt die genaue Syntax nicht parat, es muß auf jeden Fall ein String sein)
ADOConnection.ConnectionString := ListBox1.Items[a];
Gruß K-H |
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:
gelesen werden soll.
ADOConnection.ConnectionString
Ist das überhaupt möglich? |
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:
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.
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; |
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 |
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:
bei
[0]
Code:
?
ADOConnection.ConnectionString := fileContent[0];
Bedeutet das, dass die erste Zeile, der in der Variablen
Delphi-Quellcode:
gespeicherten Datei, dem
fileContent
Delphi-Quellcode:
zugewiesen wird, oder hat das eine andere Bedeutung?
ConnectionString
|
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: ![]() Ich hoffe, da waren noch ein paar hilfreiche Stichworte dabei, damit du dich weiter einlesen kannst. :-) |
AW: Aus Textdatei in ADOConnection.ConnectionString
@Bbommel
Alles klar, danke dir. Zitat:
Ich finde es gerade irgendwie super geil, wie hier der Austausch funktioniert! :) Nochmal danke @alle. VG Kratos |
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. ![]() :wink: |
AW: Aus Textdatei in ADOConnection.ConnectionString
Möp, da tippelt man eine Antwort, vergisst sie abzusenden und dann kommt einem haentschman zuvor ;)
Ich würde dir ebenfalls zu einer INI raten, zumal du dann nicht an eine Reihenfolge gebunden bist, sondern deine Strings sauber direkt ansprechen kannst. Goodie wäre auch, das du auch andere Einstellungen dort speichern/ändern könntest, die ggf. der Benutzer selber machen kann etc. |
AW: Aus Textdatei in ADOConnection.ConnectionString
Danke euch beiden (@haentschman, @Moombas)!
Ich werde euren Rat in Zukunft beherzigen. :) |
AW: Aus Textdatei in ADOConnection.ConnectionString
Hmm..
Oder Du verwendest Text-Dateien im UDL-Format (Ist auch nur eine Text-Datei). Hierüber kannst Du den Connection-String in eben dieser UDL-Datei ablegen und dann nur den Dateinamen (mit Pfad) als Connection-String angeben. Dann wird diese Datei von der ADOConnection selber geladen... |
AW: Aus Textdatei in ADOConnection.ConnectionString
@haentschman
Vielen Dank für den Tipp! :) Ja, inzwischen bin ich dazu übergegangen .ini zu verwenden. |
AW: Aus Textdatei in ADOConnection.ConnectionString
Wieso nutzt man nicht die Formate, die vorgesehen sind?
Der Vorschlag von HolgerX passt doch genau. Mit einer UDL Datei kann gleich per Doppelklick den Verbindungsdialogeditor nutzen und sogar den Verbindungstest durchführen. Dazu braucht man initial sogar keinen Deut Wissen über das Format. Es reicht eine leere Datei mit der Endung ".udl" |
AW: Aus Textdatei in ADOConnection.ConnectionString
Wenn man mehrere Datenbanken im Auge hat, ist die .Ini-Datei m.M. nach vorteilhaft, weil da hat man auf einen Griff/Blick alles zusammen. UDL-Dateien muß ich mir erst zusammen suchen. Aber das ist auch der einzige Nachteil. Für den initialen Aufbau oder Tests natürlich .UDL.
Gruß K-H |
AW: Aus Textdatei in ADOConnection.ConnectionString
Wobei eine Kombination aus beidem (ini und udl) ja auch möglich wäre. Man gibt in der Ini-Datei an welche *.UDL für welchen Zugriff verwendet werden soll.
|
AW: Aus Textdatei in ADOConnection.ConnectionString
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:07 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 by Thomas Breitkreuz