Einzelnen Beitrag anzeigen

Benutzerbild von GimbaR
GimbaR

Registriert seit: 17. Apr 2004
Ort: Weltmetropole Rostock ;)
134 Beiträge
 
Delphi 2006 Professional
 
#1

[mybase] FieldDef.Add zur Laufzeit, ohne "Datenverlust&

  Alt 3. Aug 2005, 19:36
Datenbank: MyBase • Zugriff über: kA (ClientDataSet?)
Guten Abend,

ich weiß nicht, ob sich jeder direkt was unter dem Titel vorstellen kann (mir schien es aber als der aussagekräftigste Titel.....), deswegen erläutere ich mein Problem mal genauer:
In meinem Programm benötige ich eine einfache Tabelle, in der ich Zeilen, wie Spalten dynamisch hinzufügen/entfernen/bearbeiten kann, außerdem war es für mich wichtig, dass ich diese Tabelle speichern und laden kann. Ein Freund (hier im Forum auch bekannt als maddin4u ) riet mir dazu MyBase zu verwenden. Also hab ich mich mal im netzt nen bissl schlau gemacht und einige Tutorials gelesen (). Soweit ist auch alles klar, das Erstellen und Arbeiten mit einenm ClientDataSet, nur leider bekomme ich es nicht gebacken eine Spalte (FieldDef) zur Laufzeit hinzuzufügen, ohne das die Daten in den Zellen verloren gehen

In einem kleinen Test-programm, erstelle ich drei Spalten und vervollständige dies mit CreateDataSet:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  ClientDataSet1.FieldDefs.Add('test1', ftString, 20);
  ClientDataSet1.FieldDefs.Add('test2', ftString, 20);
  ClientDataSet1.FieldDefs.Add('test3', ftString, 20);
  ClientDataSet1.CreateDataSet;
end;
Dann versuche ich durch folgende Prozedur eine Spalte (FieldDef) zur Laufzeit hinzufügen.
Delphi-Quellcode:
rocedure TForm1.Button2Click(Sender: TObject);
begin
  ClientDataSet1.Insert;
  ClientDataSet1.FieldByName('test2').Value:= 'teststring';
  ClientDataSet1.Post;
  ClientDataSet1.MergeChangeLog;
  //ClientDataSet1.Close; //hab ich auch mal ausprobiert, es ist der gleiche Effekt wie mit Active:= false;
  ClientDataSet1.Active:= false;
  ClientDataSet1.FieldDefs.Add('test4', ftString, 20);
  ClientDataSet1.CreateDataSet;
  ClientDataSet1.SaveToFile('C:\test2.xml', dfXML);
end;
Wenn ich mir dann die xml-datei anschaue, she ich zwar, dass die Spalte (FieldDef) "test4" vorhanden ist, jedoch is keine Spur von dem Eintrag "teststring" in der Spalte(FieldDef) "test2".

Meine Frage lautet nun: ist das Hinzufügen von FieldDefs überhaupt zur Laufzeit möglich, was hab ich falsch gemacht/was muss ich ändern?
Hab mich auch schon nach vernünftigen Alternativen umgeschaut, aber keine wirklich gute gefunden
PS: Die FieldDefs können nicht statisch vergeben werden.
PS2: Habe bisher keine, bzw sehr wenig Erfahrungen mit Datebanken...

so far, in hope you can help me

GimbaR
Jonas
Bei dem Tempo ist es nur noch eine Frage der Zeit bis SSchäuble verlangt allen deutschen Bürgern ein Halsband zur ständigen Überwachung zu verpassen...
  Mit Zitat antworten Zitat