Einzelnen Beitrag anzeigen

Strike

Registriert seit: 25. Apr 2006
5 Beiträge
 
#4

Re: XML Datei auslesen: Zugriffsverletzung

  Alt 29. Apr 2006, 12:31
Vielen Dank Marabu. Es hat geklappt.
Ich hab jedoch noch weitere Fehler in der Anwendung.. Vielleicht kann mir da auch noch jemand helfen:
Es ist wieder eine zugriffsverletzung, diesmal in der Procedure in der ich eine neue Zeile in das TListView schreibe.

Delphi-Quellcode:
//Button Add to XML_List
procedure TForm1.Bt_addClick(Sender: TObject);
var i,j,k,z:integer;
beschreibung:string;
begin
  XML_List.Items.BeginUpdate;

  XML_List.Items.Add;
  i:=XML_List.Items.Count;
  XML_List.Items[i].Caption:=inttostr(i);
  XML_List.Items[i].SubItems.Add(Edit_title.Text);
  XML_List.Items[i].SubItems.Add(Edit_bild.Text);
  z:=Memo_beschreibung.Lines.Count;
  if z>1 then begin
    for j:=1 to z-1 do beschreibung:=beschreibung+Memo_beschreibung.Lines[j];
  end;
  XML_List.Items[i].SubItems.Add(beschreibung);
  XML_List.Items[i].SubItems.Add(Edit_passwort.Text);
  k:=Memo_links.Lines.Count;
  for j:=0 to k-1 do
    XML_List.Items[i].SubItems.Add(Memo_links.Lines[j]);

  XML_List.Items.EndUpdate;
end;
Eine weitere Zugriffsverletzung kommt in dieser Procedure auf, an der markierten Stelle:
[EDIT]Sorry mein Fehler, hab nicht aufgepasst:da hat sich ein kleiner Fehler eingeschlichen, das muss natürlich n-1 sein in der for schleife..Aber die anderen Fehler sind immer noch da..
Delphi-Quellcode:
//Button Extract Links
procedure TForm1.Bt_extractClick(Sender: TObject);
var htmlDoc: IHTMLDocument2;
    allLinks: IHTMLElementCollection;
    Link: IHTMLElement;
    url: String;
    rapidurl:string;
    n,i,j,k:integer;
begin
  htmlDoc:=Browser.Document as IHTMLDocument2;
  allLinks:= htmlDoc.links;
  n:=allLinks.length;
  for i:=0 to n -1 do //DA MUSS NATÜRLICH n-1 HIN
   begin
     Link:=allLinks.item(i,'') as IHTMLElement;
 { TODO : Hier produziert das programm eine zugriffsverletzung }
     url:=Link.toString; //HIER
     j:= Length(url);
     k:=pos('http://www.',url);
     if k<>0 then rapidurl:= Copy (url,k,j) else rapidurl:='0';

     if rapidurl<>'0then begin
       if Memo_links.Lines[i-1]<>rapidurl then Memo_links.Lines.Add(rapidurl);
     end;
   end;
end;


Und das zurückschreiben in das XML File klappt auch noch nicht so ganz..Es kommt zwar kein Fehler, aber es wird nichts geschrieben..

Hier nochmal den dazugehörigen Code:
Delphi-Quellcode:
//Button "Write to Database
procedure TForm1.Bt_savetodbClick(Sender: TObject);
var
zeilen,i,k:integer;
oldNode,newDLS,newDL,newSUB,newLink,newA:IXMLDOMNode;
begin
  CreateOrOpenXML(fAppPath+Box_categ.Text+'.xml');
  zeilen:=XML_List.Items.Count;
  oldNode:=xmlDoc.documentElement.parentNode;
  xmlDoc.removeChild(oldNode);
  xmlDoc.documentElement.removeChild(oldNode);

  for i:=0 to zeilen do
  begin
    newDLS:=xmlDoc.createElement('dls');
    newDL:=xmlDoc.createElement('dl');

    newSub := xmlDoc.createElement('id');
    newSub.text := IntToStr(i);
    newDL.appendChild(newSub);

    newSub := xmlDoc.createElement('title');
    newSub.text := XML_List.Items[i].SubItems[1];
    newDL.appendChild(newSub);

    newSub := xmlDoc.createElement('bild');
    newSub.text := XML_List.Items[i].SubItems[2];
    newDL.appendChild(newSub);

    newSub := xmlDoc.createElement('beschreibung');
    newSub.text := XML_List.Items[i].SubItems[3];
    newDL.appendChild(newSub);

    newSub := xmlDoc.createElement('passwort');
    newSub.text := XML_List.Items[i].SubItems[4];
    newDL.appendChild(newSub);

    newSub := xmlDoc.createElement('download');
    for k:=5 to XML_List.Items[i].SubItems.Count do
    begin
      newLink:=xmlDoc.createElement('links');
      newA:=xmlDoc.createElement('a');
      newA.text:=XML_List.Items[i].SubItems[k];
      newLink.appendChild(newA);
      newSub.appendChild(newLink);
    end;
    newDL.appendChild(newSub);
    newDLS.appendChild(newDL);
  end;
  xmlDoc.documentElement.appendChild(newDLS);
  xmlDoc.save(fAppPath+Box_categ.Text+'.xml');

end;
  Mit Zitat antworten Zitat