AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Alternative zu Array of TStrings

Ein Thema von smudo · begonnen am 9. Sep 2005 · letzter Beitrag vom 9. Sep 2005
Antwort Antwort
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#1

Alternative zu Array of TStrings

  Alt 9. Sep 2005, 09:04
Hallo zusammen ,

ich benutze im Moment ein Array of TStrings, um Strings tabellenartig und nicht visuell zu speichern.
Was muss es können:
  • Zugriff auf einzelne Zellen
  • beliebig viele Zeilen und Spalten verwalten
  • Änderung der Zeilen- und Spaltenzahl auch wenn schon Daten drinstehen
  • Sortierung der Zeilen

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.
Frage von gestern

Vielen Dank

René
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Alternative zu Array of TStrings

  Alt 9. Sep 2005, 09:46
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
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Alternative zu Array of TStrings

  Alt 9. Sep 2005, 09:50
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
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Alternative zu Array of TStrings

  Alt 9. Sep 2005, 10:02
Danke Andreas,

gibt es denn außer First, Next usw. auch die Möglichkeit, direkt auf einen bestimmten Datensatz zu springen?

René
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: Alternative zu Array of TStrings

  Alt 9. Sep 2005, 10:15
Zitat von smudo:
gibt es denn außer First, Next usw. auch die Möglichkeit, direkt auf einen bestimmten Datensatz zu springen?
Natürlich:
ds.Locate('Feld1', suchwert, []); Du kannst übrigens ein TDatasource mit einem TDBGrid verbinden.
DataSource.Dataset := JvMemoryData1 und sogleich hast du einen vollwertigen Editor.
Andreas
  Mit Zitat antworten Zitat
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Alternative zu Array of TStrings

  Alt 9. Sep 2005, 10:39
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!
  Mit Zitat antworten Zitat
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Alternative zu Array of TStrings

  Alt 9. Sep 2005, 11:49
Noch ein Problemchen

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
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#8

Re: Alternative zu Array of TStrings

  Alt 9. Sep 2005, 12:18
Zitat von smudo:
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?
Nein, Locate funktioniert auf jedem Feld. Man darf sogar 2 oder mehr Felder und Suchwerte angeben.
Bei Memory-Datasets ist Locate sehr schnell.
Zitat von smudo:
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
Am Anfang ist die Tabelle leer; sie muss erst mit .Insert oder .Append (ist das Gleiche) gefüllt werden.
Mit dataset.IsEmpty kann abgefragt werden, ob die Tabelle leer ist.
Andreas
  Mit Zitat antworten Zitat
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#9

Re: Alternative zu Array of TStrings

  Alt 9. Sep 2005, 12:36
Zitat von shmia:
Am Anfang ist die Tabelle leer; sie muss erst mit .Insert oder .Append (ist das Gleiche) gefüllt werden.
Mit dataset.IsEmpty kann abgefragt werden, ob die Tabelle leer ist.
Ist schon klar. Ich fülle die Tabelle auch zuerst mindestens bis zur Zelle, welche editiert werden soll.
D.h. - wenn die Zelle außerhalb des Bereiches liegt, füge ich zuerst die fehlenden Spalten ein
ds.FieldDefs.Add(...automatischer Header...,ftString); und anschließend die fehlenden Zeilen mit
Delphi-Quellcode:
ds.Append;
ds['id']:=ds.RecordCount;
ds.Post;
Soweit funktionierts auch. Im Anschluss möchte ich die entsprechende Zelle editieren:
Delphi-Quellcode:
ds.Locate('id',z,[]);
ds.Edit;
ds[...Header...]:=text;
ds.Post;
Oder muss ich beim Insert in jede Zelle etwas reinschreiben?
  Mit Zitat antworten Zitat
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#10

Re: Alternative zu Array of TStrings

  Alt 9. Sep 2005, 12:55
Habs gefunden

statt ftString verwende ich jetzt ftVariant und schon gehts.
Kann mir das mal jemand erklären?
ftInteger macht übrigens auch kein Problem.

Danke fürs Helfen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:03 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