AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi [mybase] FieldDef.Add zur Laufzeit, ohne "Datenverlust"
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von GimbaR · begonnen am 3. Aug 2005 · letzter Beitrag vom 15. Feb 2006
Antwort Antwort
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
Benutzerbild von GimbaR
GimbaR

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

Re: [mybase] FieldDef.Add zur Laufzeit, ohne "Datenverl

  Alt 4. Aug 2005, 10:24
*push*

hmm, es gibt doch bestimmt mehrere in diesem forum, die mit maybase gearbeitet haben, oder
hat denn wirklich keiner eine lösung, oder kennt jemand nicht eine alternative

mfg 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
Benutzerbild von Light
Light

Registriert seit: 3. Feb 2006
Ort: Paderborn NRW
123 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: [mybase] FieldDef.Add zur Laufzeit, ohne "Datenverl

  Alt 15. Feb 2006, 11:14
Hi GimbaR,

Ich hab neulich auch mal mit MyBase angefangen.
Also ne alternative kenn ich überhaupt nicht!

So hab grad ma mein Demoprog rausgesucht und ein bissel rum probiert!
Und bin zu dem Entschluss gekommen:
- Das geht nicht so einfach!

Begründung:
- Man muss die DatenMenge schließen -
wenn man dann unter dem Gleichen Dateinamen ein Neues DataSet Speichert Überschreibt man das alte mit Sicherheit!
-Logischerweiße auch den Inhalt!
und du solltest mal ausprobieren ob dein "ClientDataSet1.FieldByName('test2').Value:= 'teststring';"
überhaupt abgespeichert wird! ohne das du die Datei Expliziet speicherst!
weil
Zitat:
ClientDataSet1.MergeChangeLog;
//ClientDataSet1.Close; //hab ich auch mal ausprobiert, es ist der gleiche Effekt wie mit Active:= false;
ClientDataSet1.Active:= false;
führt ja dazu das durch Active := false; wirklich geschlossen wird!
und bei mir hat MergeChangeLog nicht ausgereicht um es wirklich zu speichern!

also müsstets du mindestens bevor du da irgendwas einfügst
ClientDataSet1.SaveToFile('C:\test2.xml', dfXML); aufrufen!

Ich hoffe ich konnte dir wenigstens ein bisschen weiterhelfen!
Es kann gut sein das es doch eine Möglichkeit gibt!
Ich hab mich auch noch nicht so lange damit auseindander gesetzt!

MFG
Stefan

PS: Mit with do sparst du dir arbeit!
Delphi-Quellcode:
with ClientDataSet1 do
  Begin
    Insert;
    FieldByName('test2').Value:= 'teststring';
    Post;
    SaveToFile('C:\test2.xml', dfXML);
  End;
Stefan
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz