![]() |
Datenbank: kbmMemtable • Version: 5.52 • Zugriff über: direct
kbmMemTable index with negativ Values not working
Hello,
I still use Delphi 7 and kbmMemTable V5.52. I tried an Index on Column with this values: MyCSVMEmTable.AddIndex('PK', 'MyFloats'); natural: MyFloats 2.17332172393799 -2.54788446426392 22.841100692749 -2.18307662010193 -21.6549758911133 After Index: MyFloats 2.17332172393799 -2.18307662010193 -2.54788446426392 -21.6549758911133 22.841100692749 Any ideas how to have an Index, which properly sorts Floatvalues? Thank you Dieter |
AW: kbmMemTable index with negativ Values not working
Liste der Anhänge anzeigen (Anzahl: 2)
Delphi 7, kbmMemTable V5.72.
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var i : Integer; begin for i := 100 downto -100 do begin tb.Append; if i mod 2 = 0 then begin tb.Fields[0].AsFloat := i / 42; end else begin tb.Fields[0].AsFloat := i / 42 * -1; end; tb.Post; end; tb.First; tb.PersistentFile := 'c:\temp\test_unsorted.kbmt'; tb.Persistent := true; tb.PersistentSaved := false; tb.SavePersistent; tb.IndexName := 'Float'; tb.First; tb.PersistentFile := 'c:\temp\test_sorted.kbmt'; tb.Persistent := true; tb.PersistentSaved := false; tb.SavePersistent; end;
Delphi-Quellcode:
Unsortiertes Ergebnis siehe Datei test_unseorted.kbmt.txt
object tb: TkbmMemTable
Active = True DesignActivation = True AttachedAutoRefresh = True AttachMaxCount = 1 FieldDefs = < item Name = 'Float' DataType = ftFloat end> IndexDefs = < item Name = 'Float' Fields = 'Float' end> SortOptions = [] PersistentBackup = False ProgressFlags = [mtpcLoad, mtpcSave, mtpcCopy] LoadedCompletely = False SavedCompletely = False FilterOptions = [] Version = '5.72' LanguageID = 0 SortID = 0 SubLanguageID = 1 LocaleID = 1024 PersistentFormat = csv AllDataFormat = csv end object csv: TkbmCSVStreamFormat CommentChar = #0 EscapeChar = '%' DefaultStringFieldSize = 255 CSVQuote = '"' CSVFieldDelimiter = ',' CSVRecordDelimiter = ',' CSVTrueString = 'True' CSVFalseString = 'False' sfLocalFormat = [] sfQuoteOnlyStrings = [] sfNoHeader = [] Version = '3.10' sfData = [sfSaveData, sfLoadData] sfCalculated = [] sfLookup = [] sfNonVisible = [sfSaveNonVisible, sfLoadNonVisible] sfBlobs = [sfSaveBlobs, sfLoadBlobs] sfDef = [sfSaveDef, sfLoadDef] sfIndexDef = [sfSaveIndexDef, sfLoadIndexDef] sfPlaceHolders = [] sfFiltered = [sfSaveFiltered] sfIgnoreRange = [sfSaveIgnoreRange] sfIgnoreMasterDetail = [sfSaveIgnoreMasterDetail] sfDeltas = [] sfDontFilterDeltas = [] sfAppend = [] sfFieldKind = [sfSaveFieldKind] sfFromStart = [sfLoadFromStart] end Sortiertes Ergebnis siehe Datei test_sorted.kbmt.txt Scheint korrekt zu funktionieren. Translation per ![]() Unsorted result see file test_unseorted.kbmt.txt Sorted result see file test_sorted.kbmt.txt Seems to work correctly. |
AW: kbmMemTable index with negativ Values not working
Hi. Index means not sorting. To sort the data of the memtable, you need to call the methode SortOn(FieldNames: String).
FieldNames is then the field(s) where you want sort for. An index is used to increase the speed of filter and sorting opertions but it does no automatically sorting (at the TKbmMemTable). |
AW: kbmMemTable index with negativ Values not working
Sorry, aber das stimmt bei kbmMemTable nicht.
Wenn Du im Attribut IndexDef einen Index definiert hast, so kannst Du den Namen des Index zur Laufzeit mit Attribut
Delphi-Quellcode:
setzen und der Inhalt der Tabelle wird entsprechend sortiert angezeigt.
.IndexName := 'NameDesInIndexDefDefinirtenIndex'
Das funktioniert analog zu vielen anderen Datenbankkomponenten, bei denen Du die Sortierung durch Angabe des Indexnamens im Attribut IndexName festlegen kannst. |
AW: kbmMemTable index with negativ Values not working
Danke erstmal.
Hilft mir momentan leider noch nicht wirklich weiter. Ich lese eine CSVDatei ein, habe also nur String-Felder (ftString). Wie kann ich zur Laufzeit den Feldtyp ändern? Gehen wir bei dem einfachen Beispiel davon aus, dass ich weiß welches Feld die Floats enthält. Dieter |
AW: kbmMemTable index with negativ Values not working
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zeig' bitte mal ein Beispiel Deiner CSV-Datei, damit man sieht, um was es sich genau handelt. Wenn Du weißt, wie der Aufbau der Tabelle in der Datei ist, dann definiere bitte die Felder in den FieldDefs der kbmMemTable im Objektinspektor entsprechend. Anhängendes Projekt sollte Deine Beispieldaten korrekt aus einer CSV-Datei lesen und richtig sortiert anzeigen. Ist nur ein Schnellschuß ohne jeglichen Anspruch auf Schönheit ... ;-) |
AW: kbmMemTable index with negativ Values not working
Zitat:
DANKE! Die Datei sieht so aus (hat also einen Header) MyFloats 2.17332172393799 -2.54788446426392 22.841100692749 -2.18307662010193 -21.6549758911133 Wir können auch gerne zwei Spalten verwenden, Separator kann ; oder auch , sein. (Sollte aber für die Lösung relativ unwichtig sein.) AString;MyFloats Hans;2.17332172393799 Peter;-2.54788446426392 Claudia;22.841100692749 Erwin;-2.18307662010193 Manuela;-21.6549758911133 |
AW: kbmMemTable index with negativ Values not working
Liste der Anhänge anzeigen (Anzahl: 1)
Anhängend eine neue Version.
Habe lediglich die Feld- und Indexdefinitionen angepasst und in der CSV-Komponenten bei der Eigenschaft sfNoHeader sfSaveNoHeader und sfLoadNoHeader auf False gesetzt. |
AW: kbmMemTable index with negativ Values not working
Alles klar.
Danke für die Mühe. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:50 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