Implementierende Foxpro Scatter und Gather Memvar in delphi


Umsetzung des FoxPro Scatter und Gather Memvar in Delphi.

Delphi-EntwicklerFebruar 2001
Copyright Pinnacle Publishing, Inc. Alle Rechte vorbehalten.

Umsetzung des FoxPro Scatter und Gather Memvar in Delphi

Steve Zimmelman

Technologie ist immer, voran in der Regel zu produktiver Entwicklung führt. Es gibt jedoch auch mal wann dringt in der Vergangenheit hilfreich sein kann. Replizieren oder Vergleichen von Tabellendaten in FoxPro war eine ziemlich einfache Aufgabe. Steve Zimmelman argumentiert, dass vielleicht diese Technologie lohnt wieder zu erreichen.


FoxPro ist Scatter und sammeln Befehle immer nützlich für das Kopieren von Datensätzen aus einer Tabelle in eine andere, wurden Daten oder Rekord Replikation zwischen mehreren Tabellen vergleichen. Für diejenigen unter Ihnen, die hatte noch nicht das Vergnügen mit FoxPro arbeiten, arbeiten die Scatter und Gather-Befehle wie folgt.
Angenommen, müssen Sie einen Datensatz aus einer Tabelle in eine andere kopieren. Sie würden etwas tun:
Wählen Sie Tabelle1
Memvar streuen
Wählen Sie Tabelle2
Memvar sammeln

Der Scatter-Befehl liest alle Felder für die aktuelle
aufzeichnen und platziert sie Speichervariablen. Jede Variable, die
erstellt mit XY hat den gleichen Namen wie das Feld, aus dem sie
entstanden. Der Gather-Befehl aktualisiert den aktuellen Datensatz mit Speichervariablen, die Namen haben, die die Felder entsprechen. Also wenn der Gather-Befehl ausgeführt wird aktualisiert wenn Tabelle1 die Felder Name, Adresse und Telefonnummer hat und die Variablen Name, Adresse und Telefonnummer vorhanden ist, dann es den Datensatz mit dem Wert in der Variablen gespeichert.
Es gibt viele Möglichkeiten, dies zu erreichen, mit Delphi, aber gibt es nichts nativ in der VCL geliefert, die auf der TDataSet-Ebene funktioniert. In meiner neuesten Anwendung Bemühung hatte ich ein Bedürfnis für den alten Scatter und Funktionalität zu sammeln. Also landete ich meine eigenen Methoden ScatterMemvar und GatherMemvar zu schreiben.

Erstellen von Punkt- und Gather-Funktionen

Beide Methoden sind Wrapper für ein Objekt namens TMemvar. TMemvar unterhält ein dynamisches Array eines Datensatzes, genannt TMemVarFields. Jedes Element des Arrays MemVarFields enthält den FieldName, DataType und Wert eines entsprechenden Feldes in einem DataSet. Jede Instanz von TMemvar enthält die Daten aus einem Einzeltisch-Datensatz.

Typ
MemVarField = Packed Record
FieldName: String;
Wert: Variante;
Datentyp: TFieldType;
Ende;
TMemVarFields = Array von TMemVarField;

Wenn die Funktion ScatterMemvar aufgerufen wird, wird es erstellt eine Instanz der TMemvar und gibt einen Zeiger auf die Instanz. Wenn TMemvar erstellt wird, lädt er die Felder aus dem angegebenen DataSet in das Array. Um DataSet Doppelarbeit zu vermeiden, wird jede Instanz des TMemvar von seiner DataSet-Eigenschaft angegeben. Bevor eine neue Instanz der TMemvar erstellt wird, erfolgt eine Suche für eine passende DataSet in alle vorhandenen Instanzen von TMemvar. Wenn eine gefunden wird, wird die passende Instanz wiederverwendet. Wenn dies nicht der Fall ist, wird eine neue Instanz erstellt.
Funktion ScatterMemvar(DataSet:TDataSet): TMemVar;
BEGIN
Wenn (DataSet = Nil) dann
Exception.Create erhöhen ('DataSet nicht sein null');
Wiederverwenden Sie das Objekt, wenn sie bereits vorhanden ist.
Ergebnis: = FindMemvarObject(DataSet);
Wenn (Ergebnis = Nil) dann beginnen
Ergebnis: = TMemvar.Create(DataSet);
End Else Begin
Result.LoadFieldData;
Ende;
Ende;
Konstruktor TMemVar.Create(DataSet:TDataSet);
BEGIN
FFlds: = Nil;
FDataSet: = DataSet;
Wenn (FDataSet = Nil) dann beginnen
Exception.Create erhöhen ('DataSet nicht sein null');
Ende;
Wenn (FScatterList = Nil) dann
FScatterList: = TList.Create;
FScatterList.Add(Self);
LoadFieldData;
Ende;
Prozedur TMemVar.LoadFieldData;
Var
Ich: Integer;
BEGIN
Wenn nicht dann DataSet.Active DataSet.Open;
FFlds: = Nil;
legt die Länge für das Rekord-Array.
SetLength(FFlds,FieldCount);
For i: = 0, (DataSet.FieldCount-1) fangen
Fange mit DataSet.Fields[I]
FFlds [i]. FieldName: = FieldName;
FFlds [i]. Wert: = Value;
FFlds [i]. DataType: Datentyp; =
Ende;
Ende;
Ende;

Normalerweise, wenn Sie ein Objekt erstellen, ist es notwendig, das Objekt zu befreien, wenn es nicht mehr benötigt wird. Aber die Einheit, die den Code für dieses Objekt enthält unterhält eine eigene interne Liste von TMemvar-Instanzen und vernichtet sie automatisch beim Schließen der Anwendung. Also können Sie die Objekte freigeben, wenn sie nicht benötigt, oder sie ignorieren und lassen Sie das Gerät selbst kümmern.
Um die TMemvar-Objekte zu verwalten, die für jede ScatterMemvar-Nutzung erstellt werden, füge ich jede neue Instanz des TMemvar zu FScatterList, eine Art von 'tlist' zeigt. Die Einheit, die der gesamte Code behandelt enthält Abschnitte Initialization und Finalization. Die Initialisierung stellt sicher, dass die FScatterList auf NULL festgelegt ist. Dies geschieht, damit die Create-Methode der TMemvar kann den Wert des FScatterList zu verhören und erstellen eine Instanz davon nur bei Bedarf. Dies hält die Ressourcen, die das Gerät bis zu einem Minimum erfordert. Die Finalisierung
Abschnitt dreht sich durch die Liste und befreit alle TMemvar-Objekte, die darauf verweist.
Prozedur FreeScatterList;
Var ich: Integer;
BEGIN
Wenn (FScatterList = Nil) Then Exit;
Versuchen Sie
Für i:=(FScatterList.Count-1) DownTo 0 fangen
Versuchen Sie
TMemVar(FScatterList.Items[i]). Frei;
Außer
Ende;
Ende;
Schließlich
FScatterList.Free;
FScatterList: = Nil;
Ende;
Ende;
Initialisierung
FScatterList: = Nil;
Finalisierung
FreeScatterList;


Um mögliche Zugriff Ausnahmen zu vermeiden, entfernt TMemvar selbst aus der FScatterList wenn es freigegeben wird. Sie werden auch bemerken, dass wenn alle Elemente aus FScatterList gelöscht wurden, die Liste freigegeben ist. Dies erfolgt wieder um Ressourcenverwendung niedrig zu halten.
Destruktor TMemVar.Destroy;
Var ich: Integer;
BEGIN
Deaktivieren Sie die Arrayelemente.
FFlds: = Nil;
For i: = 0, (FScatterList.Count-1) fangen
Versuchen Sie
Wenn (TMemvar(FScatterList.Items[i]). DataSet = FDataSet) dann beginnen
FScatterList.Delete(i);
Ende;
Außer
Ende;
Ende;
Wenn (FScatterList.Count = 0) dann beginnen
FScatterList.Free;
FScatterList: = Nil;
Ende;
Erbte;
Ende;

Nachdem ScatterMemvar verwendet wurde, um ein DataSet im Arbeitsspeicher zu platzieren, kann dieses spezifische TMemvar-Objekt aus jeder Einheit in der Anwendung zugegriffen werden. Da jede Instanz von TMemvar in FScatterList gespeichert wird, kann es ein globales Objekt betrachtet werden, das von jeder Einheit zugegriffen werden kann, die einen Verweis auf die Memvar-Einheit in ihrer Erklärung verwendet hat.
Die Methode GatherMemvar verwendet wird, um die Daten in die gleiche Tabelle aus dem es ursprünglich kamen oder, falls erforderlich, eine andere Tabelle. GatherMemvar dreht durch die Felder in das TMemvar-Objekt gespeichert und aktualisiert den Ziel-Datensatz mit Feldern, die den FieldName und Datentyp entsprechen. Die Felder des TMemvar-Objekts müssen also nicht exakte strukturelle Entsprechung für das Ziel sein. Felder, die den FieldName und DataType nicht übereinstimmen, werden ignoriert. Darüber hinaus TMemvars Feldwerte können geändert werden, bevor mit GatherMemvar, damit Sie repliziert werden können leicht unterschiedliche Daten sollte die Notwendigkeit entstehen.
GatherMemvar erfolgt mit der Überladung-Direktive in der Methodendeklaration in zwei Geschmacksrichtungen:
Prozedur GatherMemVar (Quelle: TMemVar; Ziel: TDataSet;
Options:TGatherOptions); überladen;
Prozedur GatherMemVar (Quelle, Ziel: TDataSet;
Options:TGatherOptions); überladen;

Der einzige Unterschied zwischen diesen beiden Methoden ist der erste Parameter. Die erste Implementierung verwendet den tatsächlichen TMemvar-Objektverweis. Die zweite verwendet das DataSet, das mit die TMemvar-Instanz erstellt wurde. Other than, die sind beide identisch. In der Tat Ruft die erste Implementierung tatsächlich die zweite. Es gibt auch einige Optionen, mit denen Sie steuern, wie die GatherMemvar-Methode die Daten sammelt. Sie können ersetzen oder Daten anhängen, Ausgabe einen Beitrag, oder das Objekt frei, sobald der Gather abgeschlossen ist. Wenn Nein
Optionen im Parameter vorhanden sind, standardmäßig werden ersetzen die
Des Ziels DataSet-Datensatzes und lassen es im Zustand nach dem bearbeiten es ändert die Felddaten.
TGatherOption = (GoReplace, GoAppend, GoPost, GoFree);
TGatherOptions = Satz von TGatherOption;
Prozedur GatherMemVar (Quelle: TMemVar; Ziel: TDataSet;
Options:TGatherOptions);
BEGIN
Wenn (Quelle = Nil) dann
Exception.Create erhöhen ('Quellobjekt TMemVar nicht sein null');
GatherMemVar(Source.DataSet,Target,Options);
Ende;
Prozedur GatherMemVar (Quelle, Ziel: TDataSet; Options:TGatherOptions);
Var
Ich: Integer;
iIndex: Integer;
MemObj: TMemvar;
FR: TMemvarField;
BEGIN
MemObj: = FindMemvarObject(Source);
Wenn (MemObj = Nil) dann beginnen
Exception.Create zu erhöhen ('Quelle DataSet ('+
Source.Name+') hat nicht zerstreut worden!');
Ende;
Wenn (GoAppend In Optionen) dann beginnen
Target.Append;
End Else Begin
Wenn nicht (Target.State In [DsEdit, DsInsert]) dann
Target.Edit;
Ende;
For i: = 0, (Target.FieldCount-1) fangen
iIndex: = MemObj.FindFieldIndex (Target.Fields [i]. FieldName);
Wenn iIndex > = 0 dann beginnen
Wenn (Target.Fields[i]. DataType = MemObj.Fields[iIndex]. DataType) dann
Target.Fields[i]. Wert: = MemObj.Fields[iIndex]. Wert;
Ende;
Ende;
Wenn (GoPost In Optionen) dann
Target.Post;
Wenn (In Optionen GoFree) dann
MemObj.Free;
Ende;

Setzen die neuen Funktionen verwenden
Hier sind ein paar Beispiele, wie diese Methoden verwendet werden können.
Prozedur MyExample1 Kopien Feld Daten aus Tabelle1 und fügt einen Datensatz an Tabelle2 mit den Daten aus Tab. 1. Die Optionen Parameter GoPost und GoFree anweisen, die Methode, um einen Beitrag zu Tabelle2 ausstellen, dann das TMemvar-Objekt frei.
Prozedur MyExample1;
Var
MemObj: TMemvar;
BEGIN
MemObj: = ScatterMemvar(Table1);
< tun einige Sachen Tabelle >
Fügen Sie einen Datensatz zu Tabelle2, Post-it,
dann frei, das TMemvar-Objekt.
GatherMemvar(MemObj,Table2,[goAppend,goPost,goFree]);
Ende;

Prozedur MyExample2 kopiert Daten aus Tabelle1, fügt einen Datensatz an Tabelle2 mit den Daten aus Tabelle1, dann ändert das Namensfeld vor Anhängen eines Datensatzes zu Tabelle3. In beiden Fällen GatherMemvar ist der Datensatz geschrieben. Die letzte gibt auch das TMemvar-Objekt frei.
Prozedur MyExample2;
Var
MemObj: TMemvar
BEGIN
MemObj: = ScatterMemvar(Table1);
< tun einige Sachen Tabelle >
Fügen Sie einen Datensatz an Tabelle2 und Tabelle3, Post-it,
dann frei, das TMemvar-Objekt.
GatherMemvar(Table1,Table2,[goAppend,goPost]);
Ändern Sie einen Memvar-Feldwert, bevor Sie anhängen
ein Datensatz zur Tabelle3.
MemObj.FieldValue['Name']: = 'Steve Zimmelman';
GatherMemvar(Table1,Table3,[goAppend,goPost,goFree]);
Ende;










Implementierende Foxpro Scatter und Gather Memvar in delphi


Implementierende Foxpro Scatter und Gather Memvar in delphi : Mehreren tausend Tipps, um Ihr Leben einfacher machen.


Umsetzung des FoxPro Scatter und Gather Memvar in Delphi.

Delphi-EntwicklerFebruar 2001
Copyright Pinnacle Publishing, Inc. Alle Rechte vorbehalten.

Umsetzung des FoxPro Scatter und Gather Memvar in Delphi

Steve Zimmelman

Technologie ist immer, voran in der Regel zu produktiver Entwicklung führt. Es gibt jedoch auch mal wann dringt in der Vergangenheit hilfreich sein kann. Replizieren oder Vergleichen von Tabellendaten in FoxPro war eine ziemlich einfache Aufgabe. Steve Zimmelman argumentiert, dass vielleicht diese Technologie lohnt wieder zu erreichen.


FoxPro ist Scatter und sammeln Befehle immer nützlich für das Kopieren von Datensätzen aus einer Tabelle in eine andere, wurden Daten oder Rekord Replikation zwischen mehreren Tabellen vergleichen. Für diejenigen unter Ihnen, die hatte noch nicht das Vergnügen mit FoxPro arbeiten, arbeiten die Scatter und Gather-Befehle wie folgt.
Angenommen, müssen Sie einen Datensatz aus einer Tabelle in eine andere kopieren. Sie würden etwas tun:
Wählen Sie Tabelle1
Memvar streuen
Wählen Sie Tabelle2
Memvar sammeln

Der Scatter-Befehl liest alle Felder für die aktuelle
aufzeichnen und platziert sie Speichervariablen. Jede Variable, die
erstellt mit XY hat den gleichen Namen wie das Feld, aus dem sie
entstanden. Der Gather-Befehl aktualisiert den aktuellen Datensatz mit Speichervariablen, die Namen haben, die die Felder entsprechen. Also wenn der Gather-Befehl ausgeführt wird aktualisiert wenn Tabelle1 die Felder Name, Adresse und Telefonnummer hat und die Variablen Name, Adresse und Telefonnummer vorhanden ist, dann es den Datensatz mit dem Wert in der Variablen gespeichert.
Es gibt viele Möglichkeiten, dies zu erreichen, mit Delphi, aber gibt es nichts nativ in der VCL geliefert, die auf der TDataSet-Ebene funktioniert. In meiner neuesten Anwendung Bemühung hatte ich ein Bedürfnis für den alten Scatter und Funktionalität zu sammeln. Also landete ich meine eigenen Methoden ScatterMemvar und GatherMemvar zu schreiben.

Erstellen von Punkt- und Gather-Funktionen

Beide Methoden sind Wrapper für ein Objekt namens TMemvar. TMemvar unterhält ein dynamisches Array eines Datensatzes, genannt TMemVarFields. Jedes Element des Arrays MemVarFields enthält den FieldName, DataType und Wert eines entsprechenden Feldes in einem DataSet. Jede Instanz von TMemvar enthält die Daten aus einem Einzeltisch-Datensatz.

Typ
MemVarField = Packed Record
FieldName: String;
Wert: Variante;
Datentyp: TFieldType;
Ende;
TMemVarFields = Array von TMemVarField;

Wenn die Funktion ScatterMemvar aufgerufen wird, wird es erstellt eine Instanz der TMemvar und gibt einen Zeiger auf die Instanz. Wenn TMemvar erstellt wird, lädt er die Felder aus dem angegebenen DataSet in das Array. Um DataSet Doppelarbeit zu vermeiden, wird jede Instanz des TMemvar von seiner DataSet-Eigenschaft angegeben. Bevor eine neue Instanz der TMemvar erstellt wird, erfolgt eine Suche für eine passende DataSet in alle vorhandenen Instanzen von TMemvar. Wenn eine gefunden wird, wird die passende Instanz wiederverwendet. Wenn dies nicht der Fall ist, wird eine neue Instanz erstellt.
Funktion ScatterMemvar(DataSet:TDataSet): TMemVar;
BEGIN
Wenn (DataSet = Nil) dann
Exception.Create erhöhen ('DataSet nicht sein null');
Wiederverwenden Sie das Objekt, wenn sie bereits vorhanden ist.
Ergebnis: = FindMemvarObject(DataSet);
Wenn (Ergebnis = Nil) dann beginnen
Ergebnis: = TMemvar.Create(DataSet);
End Else Begin
Result.LoadFieldData;
Ende;
Ende;
Konstruktor TMemVar.Create(DataSet:TDataSet);
BEGIN
FFlds: = Nil;
FDataSet: = DataSet;
Wenn (FDataSet = Nil) dann beginnen
Exception.Create erhöhen ('DataSet nicht sein null');
Ende;
Wenn (FScatterList = Nil) dann
FScatterList: = TList.Create;
FScatterList.Add(Self);
LoadFieldData;
Ende;
Prozedur TMemVar.LoadFieldData;
Var
Ich: Integer;
BEGIN
Wenn nicht dann DataSet.Active DataSet.Open;
FFlds: = Nil;
legt die Länge für das Rekord-Array.
SetLength(FFlds,FieldCount);
For i: = 0, (DataSet.FieldCount-1) fangen
Fange mit DataSet.Fields[I]
FFlds [i]. FieldName: = FieldName;
FFlds [i]. Wert: = Value;
FFlds [i]. DataType: Datentyp; =
Ende;
Ende;
Ende;

Normalerweise, wenn Sie ein Objekt erstellen, ist es notwendig, das Objekt zu befreien, wenn es nicht mehr benötigt wird. Aber die Einheit, die den Code für dieses Objekt enthält unterhält eine eigene interne Liste von TMemvar-Instanzen und vernichtet sie automatisch beim Schließen der Anwendung. Also können Sie die Objekte freigeben, wenn sie nicht benötigt, oder sie ignorieren und lassen Sie das Gerät selbst kümmern.
Um die TMemvar-Objekte zu verwalten, die für jede ScatterMemvar-Nutzung erstellt werden, füge ich jede neue Instanz des TMemvar zu FScatterList, eine Art von 'tlist' zeigt. Die Einheit, die der gesamte Code behandelt enthält Abschnitte Initialization und Finalization. Die Initialisierung stellt sicher, dass die FScatterList auf NULL festgelegt ist. Dies geschieht, damit die Create-Methode der TMemvar kann den Wert des FScatterList zu verhören und erstellen eine Instanz davon nur bei Bedarf. Dies hält die Ressourcen, die das Gerät bis zu einem Minimum erfordert. Die Finalisierung
Abschnitt dreht sich durch die Liste und befreit alle TMemvar-Objekte, die darauf verweist.
Prozedur FreeScatterList;
Var ich: Integer;
BEGIN
Wenn (FScatterList = Nil) Then Exit;
Versuchen Sie
Für i:=(FScatterList.Count-1) DownTo 0 fangen
Versuchen Sie
TMemVar(FScatterList.Items[i]). Frei;
Außer
Ende;
Ende;
Schließlich
FScatterList.Free;
FScatterList: = Nil;
Ende;
Ende;
Initialisierung
FScatterList: = Nil;
Finalisierung
FreeScatterList;


Um mögliche Zugriff Ausnahmen zu vermeiden, entfernt TMemvar selbst aus der FScatterList wenn es freigegeben wird. Sie werden auch bemerken, dass wenn alle Elemente aus FScatterList gelöscht wurden, die Liste freigegeben ist. Dies erfolgt wieder um Ressourcenverwendung niedrig zu halten.
Destruktor TMemVar.Destroy;
Var ich: Integer;
BEGIN
Deaktivieren Sie die Arrayelemente.
FFlds: = Nil;
For i: = 0, (FScatterList.Count-1) fangen
Versuchen Sie
Wenn (TMemvar(FScatterList.Items[i]). DataSet = FDataSet) dann beginnen
FScatterList.Delete(i);
Ende;
Außer
Ende;
Ende;
Wenn (FScatterList.Count = 0) dann beginnen
FScatterList.Free;
FScatterList: = Nil;
Ende;
Erbte;
Ende;

Nachdem ScatterMemvar verwendet wurde, um ein DataSet im Arbeitsspeicher zu platzieren, kann dieses spezifische TMemvar-Objekt aus jeder Einheit in der Anwendung zugegriffen werden. Da jede Instanz von TMemvar in FScatterList gespeichert wird, kann es ein globales Objekt betrachtet werden, das von jeder Einheit zugegriffen werden kann, die einen Verweis auf die Memvar-Einheit in ihrer Erklärung verwendet hat.
Die Methode GatherMemvar verwendet wird, um die Daten in die gleiche Tabelle aus dem es ursprünglich kamen oder, falls erforderlich, eine andere Tabelle. GatherMemvar dreht durch die Felder in das TMemvar-Objekt gespeichert und aktualisiert den Ziel-Datensatz mit Feldern, die den FieldName und Datentyp entsprechen. Die Felder des TMemvar-Objekts müssen also nicht exakte strukturelle Entsprechung für das Ziel sein. Felder, die den FieldName und DataType nicht übereinstimmen, werden ignoriert. Darüber hinaus TMemvars Feldwerte können geändert werden, bevor mit GatherMemvar, damit Sie repliziert werden können leicht unterschiedliche Daten sollte die Notwendigkeit entstehen.
GatherMemvar erfolgt mit der Überladung-Direktive in der Methodendeklaration in zwei Geschmacksrichtungen:
Prozedur GatherMemVar (Quelle: TMemVar; Ziel: TDataSet;
Options:TGatherOptions); überladen;
Prozedur GatherMemVar (Quelle, Ziel: TDataSet;
Options:TGatherOptions); überladen;

Der einzige Unterschied zwischen diesen beiden Methoden ist der erste Parameter. Die erste Implementierung verwendet den tatsächlichen TMemvar-Objektverweis. Die zweite verwendet das DataSet, das mit die TMemvar-Instanz erstellt wurde. Other than, die sind beide identisch. In der Tat Ruft die erste Implementierung tatsächlich die zweite. Es gibt auch einige Optionen, mit denen Sie steuern, wie die GatherMemvar-Methode die Daten sammelt. Sie können ersetzen oder Daten anhängen, Ausgabe einen Beitrag, oder das Objekt frei, sobald der Gather abgeschlossen ist. Wenn Nein
Optionen im Parameter vorhanden sind, standardmäßig werden ersetzen die
Des Ziels DataSet-Datensatzes und lassen es im Zustand nach dem bearbeiten es ändert die Felddaten.
TGatherOption = (GoReplace, GoAppend, GoPost, GoFree);
TGatherOptions = Satz von TGatherOption;
Prozedur GatherMemVar (Quelle: TMemVar; Ziel: TDataSet;
Options:TGatherOptions);
BEGIN
Wenn (Quelle = Nil) dann
Exception.Create erhöhen ('Quellobjekt TMemVar nicht sein null');
GatherMemVar(Source.DataSet,Target,Options);
Ende;
Prozedur GatherMemVar (Quelle, Ziel: TDataSet; Options:TGatherOptions);
Var
Ich: Integer;
iIndex: Integer;
MemObj: TMemvar;
FR: TMemvarField;
BEGIN
MemObj: = FindMemvarObject(Source);
Wenn (MemObj = Nil) dann beginnen
Exception.Create zu erhöhen ('Quelle DataSet ('+
Source.Name+') hat nicht zerstreut worden!');
Ende;
Wenn (GoAppend In Optionen) dann beginnen
Target.Append;
End Else Begin
Wenn nicht (Target.State In [DsEdit, DsInsert]) dann
Target.Edit;
Ende;
For i: = 0, (Target.FieldCount-1) fangen
iIndex: = MemObj.FindFieldIndex (Target.Fields [i]. FieldName);
Wenn iIndex > = 0 dann beginnen
Wenn (Target.Fields[i]. DataType = MemObj.Fields[iIndex]. DataType) dann
Target.Fields[i]. Wert: = MemObj.Fields[iIndex]. Wert;
Ende;
Ende;
Wenn (GoPost In Optionen) dann
Target.Post;
Wenn (In Optionen GoFree) dann
MemObj.Free;
Ende;

Setzen die neuen Funktionen verwenden
Hier sind ein paar Beispiele, wie diese Methoden verwendet werden können.
Prozedur MyExample1 Kopien Feld Daten aus Tabelle1 und fügt einen Datensatz an Tabelle2 mit den Daten aus Tab. 1. Die Optionen Parameter GoPost und GoFree anweisen, die Methode, um einen Beitrag zu Tabelle2 ausstellen, dann das TMemvar-Objekt frei.
Prozedur MyExample1;
Var
MemObj: TMemvar;
BEGIN
MemObj: = ScatterMemvar(Table1);
< tun einige Sachen Tabelle >
Fügen Sie einen Datensatz zu Tabelle2, Post-it,
dann frei, das TMemvar-Objekt.
GatherMemvar(MemObj,Table2,[goAppend,goPost,goFree]);
Ende;

Prozedur MyExample2 kopiert Daten aus Tabelle1, fügt einen Datensatz an Tabelle2 mit den Daten aus Tabelle1, dann ändert das Namensfeld vor Anhängen eines Datensatzes zu Tabelle3. In beiden Fällen GatherMemvar ist der Datensatz geschrieben. Die letzte gibt auch das TMemvar-Objekt frei.
Prozedur MyExample2;
Var
MemObj: TMemvar
BEGIN
MemObj: = ScatterMemvar(Table1);
< tun einige Sachen Tabelle >
Fügen Sie einen Datensatz an Tabelle2 und Tabelle3, Post-it,
dann frei, das TMemvar-Objekt.
GatherMemvar(Table1,Table2,[goAppend,goPost]);
Ändern Sie einen Memvar-Feldwert, bevor Sie anhängen
ein Datensatz zur Tabelle3.
MemObj.FieldValue['Name']: = 'Steve Zimmelman';
GatherMemvar(Table1,Table3,[goAppend,goPost,goFree]);
Ende;



Implementierende Foxpro Scatter und Gather Memvar in delphi

Implementierende Foxpro Scatter und Gather Memvar in delphi : Mehreren tausend Tipps, um Ihr Leben einfacher machen.
Implementierende Foxpro Scatter und Gather Memvar in delphi
Wiezutun
Freunden empfehlen
  • gplus
  • pinterest

Kommentar

Einen Kommentar hinterlassen

Wertung