[Problem] TXMLDocument kann plötzlich Pfad(e) nicht finden
spacer
Autor Nachricht
Pepp3r
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 72



BeitragVerfasst: Fr 03.09.10 15:14 
Hallo liebe Delphi-Comunity!

Ich habe ein mekrwürdiges Problem und ich kann selbst nach reiflicher Überlegung und Recherche keine lösung dazu finden.
Das Problem:
Ich programmiere gerade eine Filmdatenbank. Die daten speichere ich in einer XML-Datei.
Das lesen/schreiben einer solchen hat bisher auch prima funktioniert, bis plötzlich folgender Runtimeerror erschien:


Das merkwürdige daran ist, dass der Pfad existiert, jedoch nicht von Txmldocument gefunden wird.
Des weiteren wird das stammvereichnis meines Programms ignoriert:
ausblenden Delphi-Quelltext markieren
1:
xml.LoadFromFile('DB\filme.xml');

-> das prog sucht plötzlich auf dem desktop, statt dort wo es sich befindet.
Also habe ich die Pfadangabe komplett angegeben, aber die Datei wird noch immer nicht gefunden.

Irgendwas muss passiert sein, dass TXmlDocument am rad dreht.
Ich hoffe jemand kann mir weiter helfen.
Danke im voraus an alle Helfer :)
Pepp3r

Hier der betroffene Programmcode:
ausblenden volle Höhe Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
procedure TF_ImportierenPrev.Button1Click(Sender: TObject);
var
i, differenz: integer;
begin
differenz := Filmdatenbank.ListView1.Items.Count;
for i := differenz to differenz+listbox1.Items.Count-1 do
begin
close;
Filmdatenbank.leererEintrag;
Filmdatenbank.eintragAnzeigen(Filmdatenbank.listview1.Items.Count);
Filmdatenbank.eintragAendern
(i, '',
listbox1.Items.Strings[i-differenz],
'', '', '', '', '', '', 'DB\filme.xml');
end;
end;

procedure TFilmdatenbank.leererEintrag;
var
node: ixmlnode;
xml: txmldocument;
begin
xml := txmldocument.Create(self);
xml.Active := true;
xml.LoadFromFile('DB\filme.xml');
node := xml.DocumentElement;
node.AddChild('eintrag');
node.ChildNodes[node.ChildNodes.count - 1].AddChild('titel');
node.ChildNodes[node.ChildNodes.count - 1].AddChild('jahr');
node.ChildNodes[node.ChildNodes.count - 1].AddChild('regie');
node.ChildNodes[node.ChildNodes.count - 1].AddChild('alternativ');
node.ChildNodes[node.ChildNodes.count - 1].AddChild('cover');
node.ChildNodes[node.ChildNodes.count - 1].AddChild('bewertung');
node.ChildNodes[node.ChildNodes.count - 1].AddChild('komentar');
xml.savetofile('DB\filme.xml');
xml.Free;
incListe;
dbliste[high(dbliste)].cover := '';
dbliste[high(dbliste)].titel := '';
dbliste[high(dbliste)].jahr := '';
dbliste[high(dbliste)].regie := '';
dbliste[high(dbliste)].genre := '';
dbliste[high(dbliste)].alternativ := '';
dbliste[high(dbliste)].bewertung := '';
dbliste[high(dbliste)].komentar := '';

end;


Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt
Moderiert von user profile iconNarses: Bild als Anhang hochgeladen.
Einloggen, um Attachments anzusehen!
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 783
Erhaltene Danke: 8

Win 2000, Win XP
D6 Prof, D7 Prof
BeitragVerfasst: Fr 03.09.10 16:57 
Hi, auf den ersten Blick kann ich nichts verdächtiges erkennen. Aber die Struktur von XML garantiert dir nicht das ein neu eingefügter Knoten auch wirklich der letzte Eintrag in ChildNodes ist.
Daher kann ich nur raten es ein bisschen anders zu machen und mit einer Variablen zu arbeiten. Veleicht behebt das auch schon dein Problem.
ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
var
NewEntry: IXMLNode;
....
NewEntry := node.AddChild('eintrag');
NewEntry.AddChild('titel');

_________________
Solange keine Zeile Code geschrieben ist, läuft ein Programm immer fehlerfrei.
Hunde sind wie Streetart-Künstler: "Sie gehen durch die Stadt und hinterlassen überall ihre Schei***" [(Akut)Herakut]
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 15429
Erhaltene Danke: 674

XP, W7 x64 (Chrome, IE9, FF), Debian, (OSX 10.7)
RAD XE 2, Java (NB), C++, C# (VS 2010), JS/HTML, PHP, Lazarus
BeitragVerfasst: Fr 03.09.10 20:38 
user profile iconPepp3r hat folgendes geschrieben Zum zitierten Posting springen:
Des weiteren wird das stammvereichnis meines Programms ignoriert:
xml.LoadFromFile('DB\filme.xml');
Wenn du Delphi sagst, dass es im aktuellen Arbeitsverzeichnis suchen soll, also zum Beispiel nach dem Anzeigen eines Dialoges in diesem Verzeichnis, dann schaut Delphi natürlich auch dort.

Was hat dein Quelltext denn mit dem Verzeichnis zu tun, in dem dein Programm liegt? :gruebel:

Mehr zu dem Thema steht hier: ;-)
www.delphi-library.d...ewtopic.php?p=499701

Und wenn du die Datenbank auch verändern willst, dann hat es ohnehin wenig Sinn diese in das Verzeichnis der Exe zu speichern, siehe hier:
www.delphi-library.d...ewtopic.php?p=548600
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Pepp3r Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 72



BeitragVerfasst: Sa 04.09.10 01:35 
jaenikes beitrag hat mir weiter geholfen. mit der funktion ExtractFilePath(ParamStr(0)) funktioniert es. ich werde mir deine artikel mal genauer durchlesen, vielen dank dafür!
gruß
Pepp3r

edit://

der fehler lag tatsächlich darin, dass vorher ein Opendialog geöffnet wurde und delphi in einem anderen ort gesucht hat. mir war nicht klar, dass ein dialog einfluss darauf hat, ist ja auch alles andere als trivial ;). aber ich habe mal wieder was dazu gelernt.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home