12.09.2021 (Version 1.2)
13.04.2021 (Version 1.1)
27.03.2021 (Version 1.0)
Wenn Sie an Ihrem Softwareprojekt arbeiten, müssen Sie immer einige Daten in einer INI-Datei oder einer Textdatei speichern, beispielsweise als Konfigurationsdatei oder als andere Informationen.
Sie haben also die Wahl zwischen INI-Datei oder einfachem Text. Und fast immer braucht man eine Tabelle mit einigen Feldern.
In einem einfachen Text können Sie einen Datensatz pro Zeile verwenden und Felder mithilfe von Tabulatorzeichen, Pipe-Zeichen oder einem anderen Zeichen trennen. Bei dieser Methode treten jedoch einige Probleme auf: Sie müssen auf das Trennzeichen achten und es nicht als Feldwert verwenden. Und Sie haben ein größtes Problem: Wenn Sie in einer zukünftigen Version eine Spalte hinzufügen müssen, geht die Kompatibilität dieser Datei verloren, wenn bereits Daten gespeichert sind.
Wenn Sie mit einer INI-Datei arbeiten, können Sie die Feldnamen angeben, aber selbst dann haben Sie Probleme, einen Datensatz pro Abschnitt zu speichern, und es ist schwierig, Datensätze neu anzuordnen, Datensätze zu löschen und den Datensatz zu benennen.
Aber keine Sorge, hier ist die Lösung.
Die DzXMLTable ist eine nicht-visuelle Komponente, in der Sie Datensätze mit Feldern und Werten speichern und das Feld benennen können, sodass Sie sich bei zukünftigen Versionen keine Sorgen machen müssen. Sie können jederzeit neue Felder hinzufügen, indem Sie sie einfach lesen und schreiben.
Dies ist ein neues Konzept meiner vorherigen DzMiniTable-Komponente.
Unterstützt Delphi XE3..Delphi 11
type
TContact = class
ID: Integer;
Name : string;
Phone: string;
Active: Boolean; // new field in some new program version
end ;
procedure LoadContactsExample (List: TObjectList<TContact>);
var
XML: TDzXMLTable;
Rec: TDzRecord;
Contact: TContact;
begin
XML := TDzXMLTable.Create( nil );
try
XML.FileName := ' C:Data.xml ' ;
XML.Load;
for Rec in XML do
begin
Contact := TContact.Create;
Contact.ID := Rec[ ' ID ' ];
Contact. Name := Rec[ ' Name ' ];
Contact.Phone := Rec[ ' Phone ' ];
Contact.Active := Rec.ReadDef( ' Active ' , True); // saved xml in old version could not have this field, so, read with default value.
List.Add(Contact);
end ;
finally
XML.Free;
end ;
end ;
Beim Feldnamen wird in allen Methoden- und Eigenschaftenparametern immer die Groß-/Kleinschreibung beachtet.
FileName: string
= Gibt den vollständigen XML-Dateinamen zum Öffnen und Speichern der Tabelle an
RequiredFile: Boolean
= Wenn diese Eigenschaft deaktiviert ist (Standard) und die Datei bei der Open-Methode nicht vorhanden ist, wird die Tabelle leer geladen, ohne dass eine Ausnahme ausgelöst wird.
RequiredField: Boolean
= Wenn diese Eigenschaft deaktiviert ist (Standard), können Sie ein nicht vorhandenes Feld ohne Auslösen und Ausnahme lesen und geben Unassigned
Variantenwert zurück.
Rec[Index: Integer]: TDzRecord
(Standardkomponenteneigenschaft) = Gibt das Datensatzobjekt nach Index zurück.
RecCount: Integer
= Gibt die Datensatzanzahl zurück.
procedure Load ;
Laden Sie die Tabelle aus der in der FileName-Eigenschaft angegebenen Datei
procedure Save ;
Speichern Sie die Tabelle in der Datei, die in der FileName-Eigenschaft angegeben ist
procedure Clear ;
Löschen Sie alle Daten in der Tabelle
function New (Index: Integer = - 1 ): TDzRecord;
Erstellen Sie einen neuen Datensatz in der Tabelle und geben Sie das Datensatzobjekt zurück. Sie können die neue Datensatzposition in der Tabelle mithilfe Index
angeben. Wenn Sie Index = -1
belassen, wird der Datensatz am Ende der Tabelle hinzugefügt.
procedure Delete (Index: Integer);
Löschen Sie einen Datensatz nach Index.
function FindIdxByField ( const Name : string; const Value : Variant): Integer;
Gibt den ersten Datensatzindex zurück, der mit demselben Namen und Wert übereinstimmt. Wenn kein Datensatz gefunden wird, gibt die Funktion nil
zurück.
function FindRecByField ( const Name : string; const Value : Variant): TDzRecord;
Gibt das erste Datensatzobjekt zurück, das mit demselben Namen und Wert übereinstimmt. Wenn kein Datensatz gefunden wird, gibt die Funktion nil
zurück.
function FindIdxBySameText ( const Name : string; const Value : Variant): Integer;
Gibt den ersten Datensatzindex zurück, der mit demselben Namen und Wert übereinstimmt, wobei der Wert als Zeichenfolge unter Berücksichtigung der Groß- und Kleinschreibung verglichen wird . Wenn kein Datensatz gefunden wird, gibt die Funktion nil
zurück.
function FindRecBySameText ( const Name : string; const Value : Variant): TDzRecord;
Gibt das erste Datensatzobjekt zurück, das mit demselben Namen und Wert übereinstimmt, wobei der Wert als Zeichenfolge unter Berücksichtigung der Groß- und Kleinschreibung verglichen wird . Wenn kein Datensatz gefunden wird, gibt die Funktion nil
zurück.
procedure Move (CurIndex, NewIndex: Integer);
Verschiebt einen Datensatz von CurIndex
zur NewIndex
-Position in der Tabelle.
Field[const Name: string]: Variant
= Gibt den Feldwert als Variante nach Feldname zurück oder definiert ihn. Wenn beim Abrufen des Feldwerts das Feld nicht vorhanden ist, wird eine Ausnahme ausgelöst, es sei denn, die RequiredField
-Eigenschaft ist False (in diesem Fall wird ein Unassigned
Wert zurückgegeben). Wenn beim Festlegen des Feldwerts das Feld nicht vorhanden ist, ist dies der Fall automatisch mit dem angegebenen Namen und Wert erstellt werden.
FieldIdx[Index: Integer]: TDzField
= Gibt das Feldobjekt nach Feldindex zurück.
Warnung: Ein Datensatz kann Felder enthalten, die sich von denen eines anderen Datensatzes unterscheiden. Daher sollten Sie niemals einen festen Index für ein bestimmtes Feld (z. B. eine Spalte) in den Datensätzen verwenden.
FieldCount: Integer
= Gibt die Anzahl der Felder in diesem Datensatz zurück.
function ReadDef ( const Name : string; DefValue: Variant): Variant;
Gibt den Feldwert nach Feldname zurück. Wenn das Feld im Datensatz nicht vorhanden ist, geben Sie DefValue
zurück.
function FindField ( const Name : string): TDzField;
Gibt das Feldobjekt nach Feldname zurück. Wenn das Feld nicht vorhanden ist, wird nil
zurückgegeben.
function FieldExists ( const Name : string): Boolean;
Gibt „true“ zurück, wenn das Feld unter dem angegebenen Feldnamen vorhanden ist.
procedure ClearFields ;
Alle Felddaten im Datensatz löschen (Es wird nicht nur der Wert aus den Feldern, sondern die Felder insgesamt entfernt).