Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Pfad zu einer Datei (*.exe oder *.bat) via OpenDialog in DBEdit einfügen? (https://www.delphipraxis.net/159305-pfad-zu-einer-datei-%2A-exe-oder-%2A-bat-via-opendialog-dbedit-einfuegen.html)

linuh 22. Mär 2011 17:30

Datenbank: XML-Datenbank • Version: / • Zugriff über: ClientDataSet/DBEdit

Pfad zu einer Datei (*.exe oder *.bat) via OpenDialog in DBEdit einfügen?
 
Hi,
Ich hab folgendes Problem:

ich hab mehrere DataSets, die ich in XML-Dateien abspeichere. Diese zeige ich in einem DBGrid an.
Wenn ich Einen neuen Datensatz hinzufügen möchte, wähle ich über eine Combobox das jeweilige DataSet,
direkt danach führe ich

Code:
DBNavigator1.BtnClick(nbLast); //und
DBNavigator1.BtnClick(nbInsert);
aus, sodass meine DBEdits bereit zur Einganbe neuer Daten sind, die ich dann per post befehl ans Ende (deswegen "nbLast") der Tabelle eintragen kann.
So weit so gut.

Jetzt möchte ich in eine Tabellenspalte, jeweils den Pfad zu einer Datei z.B. *.exe oder *.bat eintragen.
Der User soll mit dem OpenDialog die Datei suchen, und der Pfad soll anschließend und das DBEdit eingetragen werden,
sodass der Pfad zur gerade ausgewählten Datei letztlich in der Tabelle unter der Spalte "Pfad" landet und dann auch so abgespeichert werden kann.

Das Problem ist, das wenn ich

Code:
DBEdit.Text:=OpenDialog1.Files.Text;
ausführe, dann schreibt er mir zwar optisch den Pfad ins DBEdit, aber sobald man hineinklickt, verschwindet er wieder.
Und wenn man ohne hineinzuklicken, abspeichert (mit

Code:
CDS_Anwendungen.SaveToFile('.\db\db_anwendungen.xml', dfXML);
)

dann versucht er die XML Datei in dem per Dialog ausgewählten Pfad zu speichern und scheitert logischerweise,
weil ja dort kein ordner sondern eine Datei am Ende steht.

Hab ihr irgendwelche Lösungsvorschläge, wie man das Lösen könnte?

Also, das man mit einem Dialog die Datei auswählt und dann nur der Pfad dieser Datei im DBEdit eingetragen wird,
sodass man aber hinterher noch hineinklicken kann und evtl. etwas ändern kann und ohne dass das DBEdit den Pfad als Speicherziel ansieht.

Danke schon mal im Voraus.

Ich weis, der Text ist nicht proportional zum Problem, aber besser als umgekehrt ;)

shmia 22. Mär 2011 17:52

AW: Pfad zu einer Datei (*.exe oder *.bat) via OpenDialog in DBEdit einfügen?
 
Das ist aber umständlich:
Code:
DBNavigator1.BtnClick(nbLast); //und
DBNavigator1.BtnClick(nbInsert);
Ein Dataset hat 4 Methoden, um den Status zu ändern:
Insert - Datensatz einfügen (über aktuellen Datensatz)
Append - Datensatz anhängen (am Ende)
Edit - aktuellen Datensatz editieren
Post - aktuellen Datensatz speichern
Der Code von oben entspricht einfach nur einem Append.
Insert und Append sind sehr ähnlich, Append ist etwas schneller.
Delphi-Quellcode:
// neuen Datensatz speichern
Table1.Append;
DBEdit.Text:=OpenDialog1.Files.Text;
Table1.Post;
Aber das Ändern der Tabellenfelder über die DBEdits ist ebenfalls umständlich und unfein.
Hier ein Beispiel:
Delphi-Quellcode:
// neuen Datensatz speichern
Table1.Append;
Table1['Dateiliste'] :=OpenDialog1.Files.Text;
Table1['SpeicherDatum'] := Now;
Table1['DateiAnzahl'] := OpenDialog1.Files.Count;
Table1.Post;

linuh 22. Mär 2011 18:10

AW: Pfad zu einer Datei (*.exe oder *.bat) via OpenDialog in DBEdit einfügen?
 
Danke für die Schnelle Antwort.

Sollte ich also beim Eintragen von neuen Datensätzen lieber normale Editfelder nehmen und
die Werte dann folgnedermaßen in meine Tabelle eintragen?

Code:
Table1.Append;
Table1['Name'] := Edit1.Text;
Table1['Typ'] := Edit2.Text;
...
Table1['Pfad'] := Opendialog1.Files.Text;
Table1.Post;
Sind dann die DBEdits nur zum Ändern bzw. Anzeigen von Datensätzen gedacht oder wie hab ich das zu verstehen?

hoika 25. Mär 2011 11:39

AW: Pfad zu einer Datei (*.exe oder *.bat) via OpenDialog in DBEdit einfügen?
 
Hallo,

ein DBEdit zeigt dir den Inhalt eines Feldes eines Datensatzes an.

Statt per DBEdit.Text musst du in die Tabelle schreiben.

Durch dein XXLast (bzw. Append) ist im ClientDataSet (CS) ein temporärer Datensatz vorhanden.

Du muss also schreiben:

Delphi-Quellcode:
CS.Fields['bla_Feld'].AsString:= 'bla';
oder
Delphi-Quellcode:
CS.FieldByName('bla_Feld').AsString:= 'bla';

Dann sollte das auch im DBEdit stehen.


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:04 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