Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi jvMemoryData und CopyStructure (https://www.delphipraxis.net/95949-jvmemorydata-und-copystructure.html)

smudo 16. Jul 2007 14:32

Datenbank: egal • Version: ? • Zugriff über: jvMemoryDataSet

jvMemoryData und CopyStructure
 
Ich habe vor längerem schon mal zu diesem Thema einen Thread eröffnet. Das Problem hat sich jetzt wieder aufgetan und zwar so:

Ich möchte mit CopyStructure die Struktur eines vorhandenen jvMemoryData in ein anderes kopieren und anschließend noch einige Spalten über Fielddefs.Add hinzufügen.
Die zusätzlichen Spalten sind anschließend auch in den Fielddefs enthalten, leider aber nicht in den Fields. Dadurch kann man auch nicht über ValueByName oder FieldByName auf solch ein Feld zugreifen.

Hat jemand eine Idee, woran das liegen könnte und wie man es behebt?

Danke
René

alzaimar 16. Jul 2007 15:41

Re: jvMemoryData und CopyStructure
 
Ich mache das immer so:
Delphi-Quellcode:
Procedure AddStringField(aDS : TDataSet; aFieldName : String; aMaxSize : Integer);
Var
  f : TField;

Begin
  With TStringumericField.Create (aDS ) Do Begin
    FieldName := sName;
    Calculated := False;
    FieldKind := fkData;
    DataSet := aDS;
    Size := aMaxSize;
  End;
  aDS.fieldDefs.update;
End;
Entsprechend für TNumericField, TInterField, TDateTimeField etc. Mit FieldDefs habe ich es nicht hinbekommen...

smudo 17. Jul 2007 08:08

Re: jvMemoryData und CopyStructure
 
Danke für den Hinweis. Ehrlich gesagt, finde ich das sehr aufwändig.
Momentan habe ich eine eigene Routine für CopyStructure erstellt, welche mir die Fielddefs kopiert.
Delphi-Quellcode:
Procedure MyCopyStructure(aFromDS, aToDS: TDataSet);
var i: Integer;
begin
  aToDS.Close;
  aToDS.FieldDefs.Clear;
  for i := 0 to aFromDS.FieldDefs.Count - 1 do
    aToDS.FieldDefs.Add(aFromDS.FieldDefs[i].Name,
      aFromDS.FieldDefs[i].DataType,
        aFromDS.FieldDefs[i].Size,
          aFromDS.FieldDefs[i].Required);
  //...
end;
Anschließend besteht ohne Weiteres die Möglichkeit, über Fielddefs.Add weitere Felder hinzuzufügen.
Warum geht das mit der Standard-Routine nicht? Was macht CopyStructure anders? Es kann doch eigentlich nur ein Flag sein, welches anschließend verhindert, dass die Struktur weiter angepasst werden kann.

Auch wenn das Problem erstmal so umgangen werden kann, würde es mich trotzdem sehr interessieren, eine direkte Lösung zu finden.

smudo 18. Jul 2007 14:29

Re: jvMemoryData und CopyStructure
 
push :cyclops:

tr909 7. Sep 2007 13:11

Re: jvMemoryData und CopyStructure
 
hmm. Evtl könnte dir folgendes helfen.

aToDS.ApplyMode := amAppand;

Gruß
tr909


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:01 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