Autor Beitrag
sunspeed
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 99

Win 95, Win 98,WinME,W2k Win XP
Delphi 4 Pers,Delphi 7 Prof, Delphi 2005 Arch, VS 2003, VS 2005, C#
BeitragVerfasst: Fr 20.05.05 16:53 
Guten Abend,

ich habe ein kleineres Problem, allerdings find ich die Lösung nicht.
Ich habe ein Programm, das mir aus Outlook die Adressen ausliest,
über die Funktion einer Klasse (saveThisKontakt) wird der Name, Nachname usw.
welche an die Klasse übergeben wurden, gespeichert.
Dies will ich über eine TClientDataSet Komponente machen.

Es funktioniert alles, bis auf das Posten in die XML Datei.
Mein Code für das Zuweisen und Speichern:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
cdsKontakt:=TClientDataSet.Create(owner);
 try
  cdsKontakt.FileName:=extractfilepath(paramstr(0)) + julyaniDBDirKontakte;
  //Prüfen ob Kontakt Tabelle überhaupt existiert
  if not fileexists(cdsKontakt.FileName)  then
   createKontakte(owner);

  //Kontakt speichern
  cdsKontakt.LoadFromFile;
  cdsKontakt.Open;
  cdsKontakt.Append;
  if length(fTitel)=0 then
   fTitel:='Frau/Herr';
  if length(fName)=0 then
   fName:='nicht gefunden';
  if length(fNachname)=0 then
   fNachname:='nicht gefunden';
  if length(fEmail)=0 then
   fEmail:='nicht gefunden';

  cdsKontakt.FieldByName('TITEL').AsString:=fTitel;
  cdsKontakt.FieldByName('NAME').AsString:=fName;
  cdsKontakt.FieldByName('NACHNAME').AsString:=fNachname;
  cdsKontakt.FieldByName('EMAIL').AsString:=fEmail;
  cdsKontakt.Post; //EXCEPTION: Field Value requiered
 finally
  cdsKontakt.Free;
 end;


Bitte helft mir, ich bin um jeden Beitrag froh.

Vielen herzlichen Dank im Voraus.

Gruß sunspeed

_________________
Tiefe Brunnen muss man graben, wenn man klares Wasser will.
Tiefe Wasser sind nicht still!
feivel3333
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 190

W7
Delphi XE prof
BeitragVerfasst: Fr 20.05.05 17:22 
Hi,
ich kenne zwar deine Datenbank nicht, die du dort benutzt, aber wenn ich in eine Datenbank schreibe, dann muss ich immer erst folgendes tun:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
try
   Edit;
   FieldByName( 'FELD1' ).Text := 'ÄÄAhm';
   Post;
except
   // Fehlgeschlagen
   ...
end;


Wobei hier das EDIT entscheident ist, denn wenn ich die Datenbank nicht in den Edit-Modus versetze, dann kann ich nicht reinschreiben. Vielleicht ist es auch der Fehler bei dir?

Gruß, Feivel
KidPaddle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 351

WinXP,Linux
D7 Prof, XE7
BeitragVerfasst: Sa 21.05.05 09:08 
Er hat ja zuvor cdsKontakt.Append; aufgerufen, also daran liegt es nicht. Aber die Fehlermeldung besagt, das ein Feld, welches ein Required - Flag hat. Wie sieht den die XML - Datei aus, die geladen wird?

Gruß
KidPaddle
sunspeed Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 99

Win 95, Win 98,WinME,W2k Win XP
Delphi 4 Pers,Delphi 7 Prof, Delphi 2005 Arch, VS 2003, VS 2005, C#
BeitragVerfasst: Sa 21.05.05 09:11 
Danke für deinen Beitrag, allerdings will ich keinen bereits vorhandenen Datensatz "editieren" sondern einen Neuen anhängen.

Leider funktioniert das mit Edit trotzdem nicht.

Auf die Frage welche Datenbank ich benutze:
- Es ist keine wirkliche Datenbank sondern ein XML File das wie eine Datenbank behandelt wird. Sprich es gibt Felder mit Eigenschaft, einen Index (AutoInc) usw.
Aber das ganze wird nicht in eine Datenbank geklopft sondern in ein XML File.

Gruß Sunspeed
sunspeed Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 99

Win 95, Win 98,WinME,W2k Win XP
Delphi 4 Pers,Delphi 7 Prof, Delphi 2005 Arch, VS 2003, VS 2005, C#
BeitragVerfasst: Sa 21.05.05 09:15 
Die XML Datei sieht folgendermaßen aus:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
  <?xml version="1.0" standalone="yes" ?> 
- <DATAPACKET Version="2.0">
- <METADATA>
- <FIELDS>
  <FIELD attrname="ID" fieldtype="i4" required="true" SUBTYPE="Autoinc" /> 
  <FIELD attrname="TITEL" fieldtype="string" WIDTH="10" /> 
  <FIELD attrname="NAME" fieldtype="string" WIDTH="100" /> 
  <FIELD attrname="NACHNAME" fieldtype="string" WIDTH="150" /> 
  <FIELD attrname="EMAIL" fieldtype="string" WIDTH="300" /> 
  </FIELDS>
  <PARAMS AUTOINCVALUE="1" /> 
  </METADATA>
  <ROWDATA /> 
  </DATAPACKET>


Ich weiß dass das Feld ID required ist. Meine Idee wäre noch, dass ich die Eigenschaft
AutoIncFields:Boolean vom cdsKontakt auf true setzen muss, ich komm aber leider momentan nicht dazu.

Gruß und vielen herzlichen Dank für eure Hilfe.

Sunspeed
sunspeed Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 99

Win 95, Win 98,WinME,W2k Win XP
Delphi 4 Pers,Delphi 7 Prof, Delphi 2005 Arch, VS 2003, VS 2005, C#
BeitragVerfasst: Sa 21.05.05 09:54 
So, ich hab das jetzt ausprobiert, das heißt nicht AutoIncFields sondern AutoCalcFields und hat leider nix mit dem AutoInc Typ zu tun.

Wenns gar nicht anders geht, dann bau ich mir nen Index Hash zusammen und speicher den mit rein.
Man wird sehen.

Also nochmals Danke

wenn ihr noch irgendwelche Ideen habt, dann schreibt sie mir bitte.
Gruß

Sunspeed