![]() |
Alternative zu Array of TStrings
Hallo zusammen :hi: ,
ich benutze im Moment ein Array of TStrings, um Strings tabellenartig und nicht visuell zu speichern. Was muss es können:
Was könnt ihr mir am dafür empfehlen und wovon sollte ich die Finger lassen? Ich hab übrigens gestern schon mal eine ähnliche Frage dazu gestellt, auf welche bis jetzt keiner antworten konnte. ![]() Vielen Dank René |
Re: Alternative zu Array of TStrings
Wenn es darum geht, Daten tabellenartig im RAM zu speichern käme ein Memory Dataset in Frage.
Mit TJvMemoryData bist du da schon auch dem richtigen Wege. Ich kenne TJvMemoryData nicht, da es aber sicher von TDataset abgeleitet ist, können folgende Operationen durchgeführt werden.
Delphi-Quellcode:
var
ds : TDataSet; begin ds := JvMemoryData1; ds.Open; // Datenmenge öffnen ds.Insert; // Datensatz einfügen ds['Feld1'] := 'test1'; ds['Feld2'] := 4711; ds.Post; // Daten abschicken ds.first; // an Anfang while not ds.eof do begin ShowMessage(ds.FieldByName('Feld1').AsString); ds.next; end; ds.First; ds.Delete; // Datensatz löschen |
Re: Alternative zu Array of TStrings
ich würde dir eine TStringList ans Herz legen.
Diese Listen übernehmen die Verwaltung der Strings für dich und du hast viele Funktionen wie z.B. - Strings hinzufügen - strings entfernen - sortieren - in der liste verschieben - Elemente der liste vertauschen - Liste in File speichern und aus File lesen - in Stream schieben - Einträge suchen - Einträge zählen - usw. Arrays und dyn.Arrays solltest du nur verwenden, wenn wenige Einträge im Array sind. gruessle |
Re: Alternative zu Array of TStrings
Danke Andreas,
gibt es denn außer First, Next usw. auch die Möglichkeit, direkt auf einen bestimmten Datensatz zu springen? René |
Re: Alternative zu Array of TStrings
Zitat:
Delphi-Quellcode:
Du kannst übrigens ein TDatasource mit einem TDBGrid verbinden.
ds.Locate('Feld1', suchwert, []);
DataSource.Dataset := JvMemoryData1 und sogleich hast du einen vollwertigen Editor. |
Re: Alternative zu Array of TStrings
Also ist ein Keyfield (z.B. Field 0 für Index) unbedingt notwendig?
Eine direkte Adressierung (Record z, Field s) muss ich demzufolge selbst verwalten? Trotzdem - hat mir schon ne Menge weitergeholfen, Danke! |
Re: Alternative zu Array of TStrings
Noch ein Problemchen :oops:
shmia hat die Insert-Routine im Quelltext beschrieben. Das funktioniert. Komischerweise funktioniert Edit nicht. Alles was ich dabei ändere: statt ds.Insert verwende ich ds.Edit Lese ich diese Zelle aus, ist sie leer :freak: |
Re: Alternative zu Array of TStrings
Zitat:
Bei Memory-Datasets ist Locate sehr schnell. Zitat:
Mit dataset.IsEmpty kann abgefragt werden, ob die Tabelle leer ist. |
Re: Alternative zu Array of TStrings
Zitat:
D.h. - wenn die Zelle außerhalb des Bereiches liegt, füge ich zuerst die fehlenden Spalten ein
Delphi-Quellcode:
und anschließend die fehlenden Zeilen mit
ds.FieldDefs.Add(...automatischer Header...,ftString);
Delphi-Quellcode:
Soweit funktionierts auch. Im Anschluss möchte ich die entsprechende Zelle editieren:
ds.Append;
ds['id']:=ds.RecordCount; ds.Post;
Delphi-Quellcode:
Oder muss ich beim Insert in jede Zelle etwas reinschreiben? :gruebel:
ds.Locate('id',z,[]);
ds.Edit; ds[...Header...]:=text; ds.Post; |
Re: Alternative zu Array of TStrings
Habs gefunden :bouncing4:
statt ftString verwende ich jetzt ftVariant und schon gehts. Kann mir das mal jemand erklären? :wall: ftInteger macht übrigens auch kein Problem. Danke fürs Helfen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:05 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