Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi XML Eintrag löschen (https://www.delphipraxis.net/8362-xml-eintrag-loeschen.html)

Akut-Programming 3. Sep 2003 14:44

Re: XML Eintrag löschen
 
Ach man :evil: es geht immer noch nich. Mit diesem Code...
Delphi-Quellcode:
procedure Tfrm_planview_main.Image2Click(Sender: TObject);
var
  node, parentnode: IXMLDOMNode;
  id: integer;
begin
  id:=lv_eintraege.Selected.Index;
  node :=xmlDoc.selectSingleNode('/PlanView/termin[terminid="'+IntToStr(id)+'"]');
  parentnode := node.parentNode;
  parentnode.removeChild(node);
  xmlDoc.save(frm_planview_main.instpath + xmlfilename);
  frm_planview_main.UpdateList;
  frm_planview_main.lv_eintraege.AlphaSort;
end;
...bekomme ich ne Zugriffsverletzung. :?: :?: :?: Muss ich das verstehen?

Sanchez 3. Sep 2003 14:55

Re: XML Eintrag löschen
 
Delphi-Quellcode:
procedure Tfrm_planview_main.Image2Click(Sender: TObject);
var
  node, parentnode: IXMLDOMNode;
  id: integer;
begin
  id:=lv_eintraege.Selected.Index;
  node :=xmlDoc.selectSingleNode('/PlanView/termin[terminid="'+IntToStr(id)+'"]');
 
  if node <> nil then begin
    parentnode := node.parentNode;
    parentnode.removeChild(node);
    xmlDoc.save(frm_planview_main.instpath + xmlfilename);
    frm_planview_main.UpdateList;
    frm_planview_main.lv_eintraege.AlphaSort;
  end;
end;
Ich denke mal, du hast keinen Node mit dieser id drinne. Besser schaust vorher ob node <> nil ist. Die Zufgriffsverletzung sollte zumindest weg sein.

Akut-Programming 3. Sep 2003 15:12

Re: XML Eintrag löschen
 
Ja, jetzt hab ich zwar keine Zugriffsverletzung mehr, aber den letzten Eintrag der XML Datei kann er nicht löschen. Ich vermute er bekommt irgendwie die falsche ID oder so!?

MathiasSimmack 3. Sep 2003 15:20

Re: XML Eintrag löschen
 
Ich würde auch vorher prüfen, ob der Knoten ungleich nil.
Aber hast du auch daran gedacht, dass Indexwerte wie
Zitat:

Zitat von Akut-Programming
Delphi-Quellcode:
id:=lv_eintraege.Selected.Index;

meist null-basierend sind, dein Index in der XML-Datei aber wahrscheinlich bei Eins beginnt?

Akut-Programming 3. Sep 2003 15:25

Re: XML Eintrag löschen
 
@Mathias: ich habe weiter oben einen Auszug meiner XML Datei, könntest du dir das mal angucken. Und mir dann ma vielleicht beim Source helfen!?

MathiasSimmack 3. Sep 2003 15:50

Re: XML Eintrag löschen
 
Brauche ich nicht. Der Beispielcode, den Sanchez zuletzt gepostet hat, ist funktionsfähig. Zumindest klappte das bei mir in den Grundzügen: ich habe deinen XML-Code aus dem Browser kopiert und über einen Button-Klick den ersten Knoten entfernen lassen.
(Das spezielle, was sich auf die List-View bezieht, habe ich weggelassen.)

´s ging.

Was mir noch einfällt, wäre, dass eben nicht der erwartete Index zurückgeliefert wird. Möglicherweise durch deine Sortierung der List-View. Vielleicht solltest du besser den Termineintrag überprüfen? Oder auf die Sortierung verzichten.

Akut-Programming 3. Sep 2003 18:53

Re: XML Eintrag löschen
 
:bounce1: Alles klar, jetzt funzt´s auch bei mir. Es lag an der Sortierung! THX für die Hilfe!!! :dancer:

:dp:


Gruß,

Akut-Programming 4. Sep 2003 07:38

Re: XML Eintrag löschen [gelöst]
 
:roll: Hmm so ganz scheints doch nich gelöst zu sein. Ich wollt jetzt grad ma meinen Eintrag bearbeiten und bekomme ne Zugriffsverletzung.

Delphi-Quellcode:
procedure Tfrm_edit.bn_speichernClick(Sender: TObject);
var
  id: string;
  node: IXMLDOMNode;
begin
  id := IntToStr(frm_terminplaner_main.lv_eintraege.SelCount);
  xmlDoc := frm_terminplaner_main.xmlDoc;
  node := xmlDoc.documentElement.selectSingleNode('/PlanView/termin[terminid="'+id+'"]');
  node.selectSingleNode('terminbez').text:=ed_terminbez.Text;// Hier bekomme ich die Zugriffsverletzung angezeigt
  node.selectSingleNode('datum').text:=DateToStr(cb_von_datum.Date);
  node.selectSingleNode('uhrzeit').text:=ed_von_uhrzeit.Text;
  node.selectSingleNode('bemerkung').text:=ed_bemerkung.Text;

  xmlDoc.save(frm_terminplaner_main.instpath + xmlfilename);
  frm_terminplaner_main.xmlDoc:=xmlDoc;
  frm_terminplaner_main.UpdateList;
end;
Kann mir da jemand helfen? :oops:

Sanchez 4. Sep 2003 07:48

Re: XML Eintrag löschen
 
hallo,

Ich würde auf alle Fälle (wie schon vorher mal beschrieben) auf node <> nil überprüfen bevor du drauf zugreifts.

Ich schätze mal das wieder deine ID nicht in der File vorkommt.
Diese Zeile
Delphi-Quellcode:
  id := IntToStr(frm_terminplaner_main.lv_eintraege.SelCount);
Schätze ich ohne das Programm zu sehen als Fehler ein.
Am besten du setzt deine ID irgendwo ein dein Listview dazu rein (oder sonst wohin) und holst sie dir dann von dort raus.

grüße, daniel

MathiasSimmack 4. Sep 2003 09:03

Re: XML Eintrag löschen [gelöst]
 
Hm,
Zitat:

Zitat von Akut-Programming
Delphi-Quellcode:
id := IntToStr(frm_terminplaner_main.lv_eintraege.SelCount);

"SelCount" ist doch die Anzahl der markierten Einträge, oder? Wenn du den dritten Eintrag von unten markierst, lautet das Ergebnis: Eins. Markierst du den ersten Eintrag, lautet das Ergebnis: Eins. Markierst du den ersten und den letzten Eintrag, lautet das Ergebnis: Zwei.

@Akut-Programming: Etwas mehr Sorgfalt bitte, und berücksichtige bitte den Tipp von Sanchez: Den Knoten auf <> NIL prüfen, bevor du darauf zugreifst! :roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:31 Uhr.
Seite 2 von 3     12 3      

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