Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ClientDataSet erkennt neues Feld nicht (https://www.delphipraxis.net/102778-clientdataset-erkennt-neues-feld-nicht.html)

Chemiker 4. Nov 2007 19:54

Datenbank: Keine • Zugriff über: ClientDataSet

ClientDataSet erkennt neues Feld nicht
 
Hallo,

ich habe beim ClientDataSet versucht ein neues Feld anzulegen, bekomme aber jetzt immer eine Fehlermeldung:

Zitat:

Das Feld Datum wird nicht gefunden
Das Feld ist zu einem bestehenden Datenbestand hinzugefügt worden.
Wie kann ich erreichen, dass das neue Feld erkannt wird?

Bis bald Chemiker

mkinzler 4. Nov 2007 19:59

Re: ClientDataSet erkennt neues Feld nicht
 
Das Feld ist dem Provider bekannt?
Verbinde mal neu mit dem Provider.

Chemiker 4. Nov 2007 20:14

Re: ClientDataSet erkennt neues Feld nicht
 
Hallo mkinzler,

nein, ich erstelle ein XML – File:

Ich habe die Daten – Felder im ClientDataSet angelegt und unter FileName ein Dateiname eingetrage: TankZustandsprotokoll.xml

Das hat auch soweit alles funktioniert, jetzt wollte ich noch ein Feld hinzufügen, aber es wird nicht angenommen.

Bis bald Chemiker

mkinzler 4. Nov 2007 20:17

Re: ClientDataSet erkennt neues Feld nicht
 
Hast du das Feld auch unter .FieldDefs angelegt?

Chemiker 4. Nov 2007 20:39

Re: ClientDataSet erkennt neues Feld nicht
 
Hallo mkinzler,

nein, ich habe jetzt alle Felder gelöscht und noch mal Dataset erstellen lassen, unter einen neuen FileName. Dann wird auch das neue Feld erkannt. Offensichtlich ist es nicht möglich einen bestehenden Datenbestand um ein Feld zu erweitern.

Oder hast Du noch eine Idee?


Bis bald Chemiker

mkinzler 4. Nov 2007 20:50

Re: ClientDataSet erkennt neues Feld nicht
 
Dann versuch mal das Feld zuerst unter .FielDefs zuzufügen

Chemiker 4. Nov 2007 21:15

Re: ClientDataSet erkennt neues Feld nicht
 
Hallo mkinzler,

habe das Feld unter TFieldDefs angelegt, aber es wird trotzdem nicht übernommen.
Es kommt die Fehlermeldung:

Zitat:

Listenindex überschreiten das Maximum (3)
Danach ist alles wie vorher.

Bis bald Chemiker

mkinzler 4. Nov 2007 21:16

Re: ClientDataSet erkennt neues Feld nicht
 
Wie hast du es versucht anzulegen?

Chemiker 4. Nov 2007 21:39

Re: ClientDataSet erkennt neues Feld nicht
 
Hallo mkinzler,

das neue Feld zuerst mit dem Feld – Editor im ClientDataSet anlegt. Dann ClientDataSet markiert und unter FieldDefs doppelClick aufrufen, anschließend mit Hinzufügen das neue Feld hinzufügen. Neues Feld markieren und den Name und DataType ändern.

ClientDataSet.Active auf TRUE setzen, dann kommt wieder die erste Fehlermeldung.

Danach ist das Feld aus dem FiedDefs wieder verschwunden und es sind nur wieder die ersten 3 Felder vorhanden.

Bis bald Chemiker

mkinzler 4. Nov 2007 21:42

Re: ClientDataSet erkennt neues Feld nicht
 
http://dn.codegear.com/article/28959

Dicksaiter 9. Feb 2008 10:10

Re: ClientDataSet erkennt neues Feld nicht
 
Hallo Chemiker,

hast Du das Problem lösen können ?
Ich stehe vor dem gleichen, der hier nagegebene Link zeigt nur wie man die Datenbank zur Laufzeit anlegt.
Aber ich habe keinen Hinweis darauf gefunden, wie man zur Laufzeit die Datenbank um ein Feld erweitern kann.
Ist natürlich möglich das mein englisch nicht ausreicht oder ich hab irgend etwas übersehn :oops: .

ciao ..Dicksaiter

Chemiker 9. Feb 2008 16:36

Re: ClientDataSet erkennt neues Feld nicht
 
Hallo Dicksaiter,

herzlich Willkommen in der DP.

Nein, ich habe das Problem leider nicht lösen können. Ich wollte auch nicht zu viel Arbeit mit dem Suchen zubringen. Ich benutzte diese Datenbank als „Memory – Stick Datenbank“ um bei Besprechungen aktuelle Betriebsdaten auf jeden Rechner in der Firma zur Verfügung zu haben. Ich habe die Felder neu angelegt und unter einen neuen FileName abgespeichert. Da die Daten von einer richtigen Datenbank kommen und ich nur ein Teil davon brauche war der Aufwand nicht so groß.
Prinzipiell ist es bei Datenbanken ja so, dass man sich vor dem Anlegen genau überlegen sollte welche Felder man braucht und in welcher Beziehung die Daten zueinander stehen.
Damit wird dann vermieden, dass man im Nachhinein ein neues Feld in die Anwendung reinfummeln muss.

Bis bald Chemiker

Dicksaiter 9. Feb 2008 17:22

Re: ClientDataSet erkennt neues Feld nicht
 
Hallo Chemiker,

Danke für den Willkommensgruß :-D

Ich habe weiter gesucht und folgendes gefunden:

ClientDataSet2.Data:=ClientDataSet1.Data; //kopiere Datenmenge
ClientDataSet1.Close;
ClientDataSet1.FieldDefs.Add('TMPFELD',ftString,20 ); //neues Feld hinzufügen
ClientDataSet1.CreateDataSet;
ClientDataSet1.Open;
for y:=0 to ClientDataSet2.RecordCount-1 do // Jetzt die alten Daten zurück kopieren
begin
ClientDataSet1.Append;
for i:=0 to ClientDataSet2.FieldCount-1 do
ClientDataSet1.Fields.Fields[i]:=ClientDataSet2.Fields.Fields[i];

ClientDataSet1.Post;
end;


Ich habe es bei mir ausprobiert und es funktioniert. So habe ich ein neues Datenfeld hinzugefügt und die alten Daten behalten.
Ich brauche keine Datei umkopieren.

ciao ..Dicksaiter

ferby 29. Mär 2008 18:44

Re: ClientDataSet erkennt neues Feld nicht
 
Hallo,

ich hatte das selbe Problem und habe es so gelößt:

1) Beim TClientDataSet Rechtsklick --> Daten löschen
2) Delphi schließen + neu starten
3) Feld hinzufügen
4) TClientDataSet Rechtsklick --> DataSet erstellen
5) TClientDataSet Rechtsklick --> In MyBase-XML-Tabelle speichern


Ist zwar ein wenig umständlich aber so funktionierts bei mir immer.

Geronimo 18. Nov 2014 10:34

AW: ClientDataSet erkennt neues Feld nicht
 
Hallo an alle.

Ich zupfe noch mal diesen alten Thread hier 'raus, weil offensichtlich alle das gleiche Problem haben, zur Designzeit neue Felder einfügen zu wollen/müssen.
Bei mir funktioniert das, wenn zuerst die FieldDefs erstellt werden und anschließend die Felder mit dem Feldeditor. Der Feldeditor scheint die FieldDefs zu
benutzen und greift ins Leere, wenn sie nicht vorhanden sind.

Also folgendes Vorgehen, analog zu ferbys Beitrag:

1) Beim TClientDataSet Rechtsklick --> Daten löschen (Danach steht active auf false.)
2) FieldDefs einfügen
3) Feld hinzufügen
4) TClientDataSet Rechtsklick --> DataSet erstellen (Danach steht active auf true.)

(Ohne An-Aus und so tun, als wäre nichts gewesen.)


Könnt Ihr dieses Verhalten des TClientDataset bestätigen? Oder ist es wieder nur bei mir Zufall?

Gruß
Geronimo


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz