![]() |
Re: In XML löschen und weitere Einträge aktualisieren
Hmm.. nach ewigen versuchen und umschreiben bzw. :pale: neu schreiben hats noch nich gefunzt. :wall: Hier is mal der komplette Aufruf meiner Prozedur - Ich hoffe ihr könnt mir nochmal helfen?!
Delphi-Quellcode:
[EDIT] Hier springt er immer in ne Zugriffsverletzung, weiß aber nicht warum??
procedure Tfrm_terminplaner.Image2Click(Sender: TObject);
var node, parentnode: IXMLDOMNode; id,id2,i,i2: integer; begin if lv_eintraege.SelCount=1 then begin Image1.Enabled:=true; Image2.Enabled:=true; end else begin Image1.Enabled:=false; Image2.Enabled:=false; end; i:=lv_eintraege.Selected.Index; id:=StrToInt(lv_eintraege.Items[i].Caption); node :=xmlDoc.selectSingleNode('/PlanView/termin[terminid="'+IntToStr(id)+'"]'); if node <> nil then begin parentnode := node.parentNode; parentnode.removeChild(node); if id=1 then begin for i2:=1 to lv_eintraege.Items.Count do begin node := xmlDoc.documentElement.selectSingleNode('/PlanView/termin[terminid="'+IntToStr(id)+'"]'); node.selectSingleNode('terminid').text:=IntToStr(id); end; end else for i2:=1 to lv_eintraege.Items.Count-1 do begin node := xmlDoc.documentElement.selectSingleNode('/PlanView/termin[terminid="'+IntToStr(id)+'"]'); node.selectSingleNode('terminid').text:=IntToStr(id); end; status_03.Caption:='Der Termin wurde erfolgreich gelöscht!'; Timer1.Enabled:=true; frm_terminplaner.UpdateList; end; xmlDoc.save(frm_terminplaner.instpath + xmlfilename); frm_terminplaner.UpdateList; Label2.Caption:='erfasste Termine ('+IntToStr(lv_eintraege.Items.Count)+')'; end;
Delphi-Quellcode:
Gruß,
node.selectSingleNode('terminid').text:=IntToStr(id);
|
Re: In XML löschen und weitere Einträge aktualisieren
Also hab jetzt n bissl rum probiert..immer noch nichts. Wollts wie von phlux vorgeschlagen machen. Nur wenn ich das Speichern und ListUpdaten erst zum Schluss mache - was ja auch Sin ergibt, Stresst er wegen dem SelectedNode rum. Poste mal meinen umgestellten Code - So funztz zwar aber immer nur wenn maximal 2 Einträge im XML bzw. ListView sind (Das eigentliche Problem).
Delphi-Quellcode:
procedure Tfrm_terminplaner.Image2Click(Sender: TObject);
var node, parentnode: IXMLDOMNode; id,id2,i,i2: integer; begin i:=lv_eintraege.Selected.Index; id:=StrToInt(lv_eintraege.Items[i].Caption); node :=xmlDoc.selectSingleNode('/PlanView/termin[terminid="'+IntToStr(id)+'"]'); parentnode := node.parentNode; parentnode.removeChild(node); xmlDoc.save(frm_terminplaner.instpath + xmlfilename); // Dies einfach mal wegdenken, wäre dann Phluxs Vorschlag frm_terminplaner.UpdateList; // -||- for i2:=1 to lv_eintraege.Items.Count-1 do begin id:=StrToInt(lv_eintraege.Items[i].Caption); node := xmlDoc.documentElement.selectSingleNode('/PlanView/termin[terminid="'+IntToStr(id)+'"]'); node.selectSingleNode('terminid').text:=IntToStr(id); end; xmlDoc.save(frm_terminplaner.instpath + xmlfilename); status_03.Caption:='Der Termin wurde erfolgreich gelöscht!'; Timer1.Enabled:=true; frm_terminplaner.UpdateList; Label2.Caption:='erfasste Termine ('+IntToStr(lv_eintraege.Items.Count)+')'; end; |
Re: In XML löschen und weitere Einträge aktualisieren
Hi,
ich habe gerade mal auf die schnelle was gecodet. Das ist komplett ungetestet, weil ich kein funktionsfähiges Delphi im Moment auf dem Laptop habe. Aber es sollte funktionieren.
Delphi-Quellcode:
Der Source ist komplett optimiert, so gut es geht.
var
i: integer; xmlNode, xmlParent: IXMLDOMNode; xmlXSL, sID: string; begin sID := lv_eintraege.items[i].Caption; xmlXSL := '/PlanView/termin[terminid="'+sID+'"]'; xmlNode := xmlDoc.selectSingleNode(xmlXSL); xmlParent.removeChild(xmlNode); xmlNode := nil; xmlParent := nil; for i:=0 to lv_eintraege.Items.Count-1 do begin sID := lv_eintraege.Items[i].Caption; xmlXSL := '/PlanView/termin[terminid="'+sID+'"]'; xmlNode := xmlDoc.documentElement.selectSingleNode(xmlXSL); xmlNode.selectSingleNode('terminid').text := IntToStr(i); end; xmlDoc.save(self.instpath + xmlfilename); {... der ganze Rest von wegen Hinweise etc. ...} frm_terminplaner.UpdateList; end; Wenn es nicht geht (präventiver Hinweis): Zeile, Fehlermeldung, etc. angeben! Meine Glaskugel wird gerade von Luckie repariert. ;) Chris PS: Dein Fehler liegt einfach darin, dass du immer von 1 nach Items - 1 zählst. Sieh dir meinen Source an und lerne. ;) [edit=Chakotay1308]Fehler korrigiert.[/edit] |
Re: In XML löschen und weitere Einträge aktualisieren
Hi Chris! :wink:
Dein Posting war mir wie immer ne rießen Hilfe! :thuimb: Musste dann zwar noch was abändern, so funzt es aber prima:
Delphi-Quellcode:
var
node, parentnode: IXMLDOMNode; i,i2: integer; id,xmlXSL: String; begin i:=lv_eintraege.Selected.Index; id:=lv_eintraege.Items[i].Caption; xmlXSL:='/PlanView/termin[terminid="'+ID+'"]'; node :=xmlDoc.documentElement.selectSingleNode(xmlXSL); parentnode := node.parentNode; parentnode.removeChild(node); node := nil; parentnode := nil; frm_terminplaner.UpdateList; for i2:=0 to lv_eintraege.Items.Count-1 do begin id:=lv_eintraege.Items[i2].Caption; xmlXSL:='/PlanView/termin[terminid="'+id+'"]'; node := xmlDoc.documentElement.selectSingleNode(xmlXSL); node.selectSingleNode('terminid').text:=inttostr(i2+1); end; xmlDoc.save(frm_terminplaner.instpath + xmlfilename); frm_terminplaner.UpdateList; :dp: [edit]Stelle euch dann den Link zum Terminplaner unter "Freeware" zur Verfügung, wenn meine Seite fertig ist - Dann könnt ihr euch das Teil mal angucken. Wäre dann Version 1.4[/edit] Greetz, |
Re: In XML löschen und weitere Einträge aktualisieren
Hi,
das mit dem +1 ist Ansichtssache. Ich z.B. würde bei 0 anfangen. Das neue i2 kannst du einsparen in dem du die Zeilen
Delphi-Quellcode:
zusammenfast nach
i:=lv_eintraege.Selected.Index;
id:=lv_eintraege.Items[i].Caption;
Delphi-Quellcode:
Chris
id:=lv_eintraege.Items[lv_eintraege.Selected.Index].Caption;
|
Re: In XML löschen und weitere Einträge aktualisieren
Joa, das mit i2 hab ich auch schon mitbekommen. Hatte es ja versucht, ohne i2+1... funzte nich. Und wie du siehst fange ich ja mit i2:=0 an!!
Greetz, |
Re: In XML löschen und weitere Einträge aktualisieren
Hi,
das ist mir klar, denn startest immer bei 1 und somit musst du es auch hier machen. Chris |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:22 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