Witam.
Staram się napisać program, który miałby generować plik xml.Przy próbie zapisu pliku na dysk dostaję taki komunikat: "Access violation at address 005E7C78 in module 'Project7.exe'.Read of address 00000000". Z miejsca chciałbym zaznaczyć, że jeśli chodzi o programowanie to dopiero zaczynam swoją przygodę.
Kod programu:
unit Unit3;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Xml.xmldom, Xml.XMLIntf, Vcl.Menus,
Xml.XMLDoc;
type
TForm3 = class(TForm)
MainMenu1: TMainMenu;
SaveDialog1: TSaveDialog;
XMLDocument1: TXMLDocument;
File1: TMenuItem;
New1: TMenuItem;
Open1: TMenuItem;
Save1: TMenuItem;
SaveAs1: TMenuItem;
Print1: TMenuItem;
PrintSetup1: TMenuItem;
Exit1: TMenuItem;
N1: TMenuItem;
N2: TMenuItem;
procedure SaveAs1Click(Sender: TObject);
private
{ Private declarations }
public
Nazwa_pliku : String;
end;
var
Form3: TForm3;
LDocument: IXMLDocument;
implementation
{$R *.dfm}
procedure CreateDocument;
var
LNodeElement, NodeCData, NodeText: IXMLNode;
begin
LDocument := TXMLDocument.Create(nil);
LDocument.Active := True;
{ Define document content. }
LDocument.DocumentElement := LDocument.CreateNode('ThisIsTheDocumentElement', ntElement, '');
LDocument.DocumentElement.Attributes['attrName'] := 'attrValue';
LNodeElement := LDocument.DocumentElement.AddChild('ThisElementHasText', -1);
LNodeElement.Text := 'Inner text.';
NodeCData := LDocument.CreateNode('any characters here', ntCData, '');
LDocument.DocumentElement.ChildNodes.Add(NodeCData);
NodeText := LDocument.CreateNode('This is a text node.', ntText, '');
LDocument.DocumentElement.ChildNodes.Add(NodeText);
end;
procedure TForm3.SaveAs1Click(Sender: TObject);
begin
if SaveDialog1.Execute then
begin
Nazwa_pliku:=SaveDialog1.FileName;
LDocument.SaveToFile(Nazwa_pliku);
end;
end;
end.
Część kodu zawinąłem z tej dokumentacji: http://docwiki.embarcadero.com/CodeExamples/Tokyo/en/TXMLDocument_use_case_(Delphi)
Piszę w najnowszym RAD Studio.
Będę wdzięczny za porady.
lDocument.Free;
chybaFreeAndNill
aby w dokumencie nalazły się aktualne dane (jak metoda jest dostępna nie mam teraz dostępu i nie mogę sprawdzić a jak nie to trzeba przypisaćnil
).