![]() |
Re: TQuery oder TTable?
ja muss irgendwie eine DB nehmen, da ich nicht weiß wie ich sonst mehrere Informationen von unterschiedlichen Quellen zusammenfassen soll und vielleicht nur etwas berechnen.
Das Ganze läuft bei mir Privat. Zweifle aber auch am Sinn einer DB. EInziger Vorteil ist halt das man die Daten gut wegspeichern kann. |
Re: TQuery oder TTable?
Hi Daywalker299!
Ganz einfach: Es wird zum Beispiel die TStringList mitgeliefert. Als erstes schreibst du ein paar Funktionen um komfortabel auf eine PipeStringListe zurück zu greifen. Z.B. PipeStrItem, PipeStrCount, PipeStrSetItem. Dann initialisierst du eine Liste mit TStringList. Wenn du eine Sortierung haben möchtest, kannst du auch indexbasierte PipeStrings nehmen. |CWortC|ADasA|BdritteB| Hier gehst du mit "Pos('|A',String)" drauf. Dann suchst du mit "Pos('A|',String)" das Ende und berechnest die Menge. Dann host du die Daten mit Copy raus und gut. Bei mir heißt die Funktion PipeVarStrItem und hier ein Beispiel:
Code:
Klar ist das ein bißchen Aufwand. Man MUSS nur als erstes ein paar Grundfunktionen schreiben. Noch gleiler wird das in Listboxen. Hier zeichnest du den Inhalt selber und kannst dabei schon zu Ausgabe darauf achten, daß aus 'A' links und aus 'B' rechts in der Listbox ausgegeben wird. In Feld 'C' könnten noch parameter wie Satzposition stehen. Strings könne einige GB groß werden, sollte reichen.
Const Inhalt = '|CWortC|ADasA|BdritteB|';
Var lSt : String; lCh : Char; Begin lSt:=''; For lCh:='A' To 'C' Do Begin If lSt > '' Then lSt:=lSt + ' '; lSt:=lSt + PipeVarStrItem(Inhalt,lCh); End; ShowMessage(lSt); End; Eine andere schöne Möglichkeit die Daten zu speichern, ist mit Typisierten Dateien. Das leidige bei größeren Datenmengen ist nur, daß du einen Index führen mußt. Klar, DB bringen das gleich mit, richtig debuggen kann man die Datenbanken aber nicht. Ich bin übrigens kein Freund der Datenbanken, ich möchte wissen was passiert. Für Indexe habe ich mir übrigens ein Object geschrieben, mit dem ich einen Binärbaum verwalte. Genug meiner alten Ansichten. Jammert mir keiner die Ohren voll, daß die blöden Dinger kaputt gehen. 8-) |
Re: TQuery oder TTable?
Danke, ich bin auch schon soweit das ich vielleicht wieder auf Dateien gehe.
Zitat:
Sven |
Re: TQuery oder TTable?
Hi Daywalker299!
Ich schreibe nur mal flach über dieses Thema, nicht so in die Tiefe. Wie man Objekte schreibt mit vererben und so, sollte klar sein. Wenn man eine typisierte Datendatei hat kann man dafür eine Index führen. Klar Datenbanken machen so etwas mal eben "nebenbei", nur wer diese Banken nicht verwenden will, muß das schon zu Fuß machen. Das typische Beispiel "Adreßbuch" möchte ich mal verwenden:
Code:
Mie diesen beiden Typen könnten man das ganze schon einmal laufen lassen. Die Inhalte gibt man über Edit-Felder ein und speichert sie in die Dat-Datei. Nach der Speicherung muß man den Index schreiben. Ist es eine Änderung, dann den alten Indexsatz suchen und dort "Belegt" auf false setzen. Dann den neuen Indexsatz zusammenstellen. Eine Variable des Typen TAdrIdx mit nullen füllen (FillChar mit #0), belegt dann auf True, SatzNr beim Speichern in der Dat-Datei merken, SuchName ohne Umlaute mit ausschließlich großen Buchstaben setzen und in Anzeige eine Schöne Opitik für die Auswahlliste. Jetzt muß die Indexdatei durchlaufen werden, damit die Position des neuen Eintrages gesucht wird. Immer wenn der Vergleich kleiner/gleich ist wird nach links verzweigt, bei größer als nach rechts. Ein Beispiel an Nachnamen: Der Name Müller muß eingefügt werden. Das ist der Suchname "MUELLER"
Type TAdresse = Packed Record
Belegt : Boolean; Name : String[24]; Vorname : String[24]; Strasse : String[20]; Hausnummer : String[5]; PLZ : String[5]; Ort : String[20]; End TAdrIdx = Packed Record Belegt Links Rechts SatzNr SuchName Anzeige End;
Code:
Und nun wird der Reihe nach durchlaufen.
SCHMIDT
BRAMLAGE VOGEL ABEL NOETZEL SCHULZE WESSEL FREI FREI *MUELLER FREI FREI FREI FREI FREI MUELLER ist kleiner als SCHMIDT, also nach links MUELLER ist größer als BRAMLAGE, also nach rechts MUELLER ist kleiner als NOETZEL, also nach links So steht die neue Position für *MUELLER fest. Wenn der Vergleich "gleich" ausgeht, wird auch nach links verzweigt. Beim verzweigen ist darauf zu achten, daß die Positionsnummer immer höher wird. Ist sie mal kleiner, liegt ein Fehler im Index vor und es könnte zur Endlosschleife kommen. Beim Suchen ist dann nur darauf zu achten, daß bei Gleichheit in beide Richtungen weiter gesucht werden muß. In dem Moment legt man die Position nach rechts auf einen Stapel während nach links weiter gesucht wird. Befehle für den Festplattenzugriff: AssignFile, CloseFile, Read, Write, Seek, FilePos Variable: FDat : File Of TAdresse; FIdx : File Of TAdrIdx Vorschlag für das Objekt: TBtree - Add, Del, LookFor Einen fertigen Quellcode möchte ich bewußt nicht geben, tüftel mal. :-D Wenn du nicht weiter kommst, frage noch einmal nach. Stefan |
Re: TQuery oder TTable?
Danke für deine ausführliche Beschreibung. Werde es mal ausprobieren, ob ich es hinbekomme.
Schönen Sonntag noch. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:26 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-2025 by Thomas Breitkreuz