Entwickler-Ecke

Andere .NET-Sprachen - [WinForms] Fehler bei Speichern als XML


Christian S. - So 04.07.04 13:16
Titel: [WinForms] Fehler bei Speichern als XML
Hallo!

Ich habe seit einiger Zeit ein Problem mit einem Programm, welches seine Daten in einem DataSet verwaltet und als XML speichert. Erst einmal die Routinen zum Speichern und Laden:

Daten laden:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure mainform.TWinForm_Load(sender: System.Object; e: System.EventArgs);
var rk : RegistryKey;
    execPath : String;
    myRow : Datarow;
begin
  rk := Registry.CurrentUser;
  rk := rk.OpenSubKey('Software\Microsoft\Windows\CurrentVersion\Run\', true);
  cb_autostart.checked := not (rk.GetValue(GUID) = nil);

  execPath := Path.GetDirectoryName(Application.ExecutablePath);
  if System.IO.File.Exists(execPath+'\data.xml'then
    DataSet1.ReadXml(execPath+'\data.xml');

  buildMenu;
end;


Daten schreiben:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure mainform.TWinForm_Closing(sender: System.Object; e: System.ComponentModel.CancelEventArgs);
Var execPath : String;
begin
  execPath := Path.GetDirectoryName(Application.ExecutablePath);
  DataSet1.WriteXml(execPath+'\data.xml');
end;


Nun zum Problem:
Das Programm startet beim Systemstart mit und wird auch erst wieder beendet, wenn das System heruntergefahren wird.

Von Zeit zu Zeit (völlig unverhersagbar) startet das Programm mit der Meldung, es könnte den Root-Node nicht finden. Schaue ich mir die zuvor gespeicherte Datendatei an, wundert mich das nicht: sie ist leer! :shock:
Ich sehe kein System darin, wann das passiert. Es kann Tage gut gehen und dann taucht das Problem wieder auf.

Wer hat eine Idee? (Mathias?)

MfG
Peter


Delete - So 04.07.04 14:12
Titel: Re: [WinForms] Fehler bei Speichern als XML
TUFKAPL hat folgendes geschrieben:
(Mathias?)

*schulterzuck und "tss" mach* Muss ich gucken, solange ich D8 noch habe ... (Falls du mich überhaupt gemeint hast)


Christian S. - So 04.07.04 15:26

Wenn irgendwo das Kürzel "XML" vorkommt, bist mit "Mathias" immer Du gemeint ;-)


Delete - So 04.07.04 17:07

Okay, das werde ich mir merken. ;) Aber du könntest mir mal erklären, wie man so ein DataSet richtig benutzt? Ich bin nicht so firm in der Geschichte. Also, was speicherst du damit? Und wie genau?


Christian S. - So 04.07.04 17:24

Hallo!

Ansich ist so ein DataSet eine feine Sache, weil es fast alles von selbst macht. Im Grunde ist es eine kleine Datenbank mit verschiedenen Tabellen. Du kannst verschiedene Komponenten auf Deiner Form an verschiedene Tabellen binden (DataBindings) und somit Inhalte in den Tabellen verändern. Sobald der Inhalt der Komponente (also z.B. ein Edit-Feld) geändert wird, dann wird diese Änderung in die Datenbank übernommen, ohne dass der Programmierer etwas machen muss. Das Hinzufügen neuer Zeilen in eine Tabelle geht ähnlich einfach, wenn auch nicht ganz so. ;-)

Das DataSet hält also während der Laufzeit alle Daten. Das einzige, was gemacht werden muss, ist, beim Programmstart die Daten aus einer XML-Datei zu laden und sie am Ende wieder zu speichern. Eine XML-Datei sähe dann z.B. so aus:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
<?xml version="1.0" standalone="yes" ?> 
<NewDataSet>
  <Tabelle1>
    <NameVonSpalte1>InhaltSpalte1</NameVonSpalte1> 
    <NameVonSpalte2>InhaltSpalte2</NameVonSpalte2> 
  </Tabelle1>
  <Tabelle1>
    <NameVonSpalte1>NochEinInhaltSpalte1</NameVonSpalte1> 
    <NameVonSpalte2>NachEinInhaltSpalte2</NameVonSpalte2>
  </Tabelle1>
  <Tabelle2>
    <NameVonSpalte1>InhaltSpalte1</NameVonSpalte1> 
    <NameVonSpalte2>InhaltSpalte2</NameVonSpalte2> 
  </Tabelle2>
  <Tabelle2>
    <NameVonSpalte1>NochEinInhaltSpalte1</NameVonSpalte1> 
    <NameVonSpalte2>NachEinInhaltSpalte2</NameVonSpalte2>
  </Tabelle2>
</NewDataSet>


Hilft das ein wenig?

MfG
Peter


Christian S. - Fr 06.08.04 12:40

Seit ich mein neues Notebook mit XP Home habe, ist der Fehler nicht mehr aufgetreten. Scheint also kein Problem im Programm gewesen zu sein.