vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Visual-Basic Einsteiger
MSFlexGrid sortiert nicht korrekt 
Autor: partybremser
Datum: 21.08.21 21:28

(VB6/Windows XP SP2)

Hallo.

Habe eine recht große Datenbank (Tonträger) die in einem MSFlexgrid (>11000 Zeilen à 22 Spalten) dargestellt wird -> Titel, Interpret, Label, Händler, Kaufdatum etc...

Folgendes Problem: Wenn ich zB Label sortieren lasse so erscheint das Ergebnis fehlerhaft. Die Zeichen (u.a., hab jetzt nicht alles ausprobiert) "ä", "-" oder "'" werden nicht korrekt sortiert. Beispiel in der Spalte Label:

Amiga
A-Musik

oder

Abc
Ab-cd

Nach dem aufsteigenden Sortieren ist das immer noch so. Amiga gefolgt von A-Musik. Dass das nicht korrekt ist kann man leicht im debug-Fenster mit ?"Amiga" < "A-Musik" nachprüfen (Wert = falsch). Genau wie bei zB Abc und Ab-cd.

Da das Programm beim laden der DB prüft nach welchem Kriterium sortiert wurde ist das Ergebnis natürlich immer "nicht sortiert".

Nutze die Eigenschaft flexSortGenericAscending. Strings/Numerisch sortieren. Mit NoCase oder reine Stringsortierung ist das Ergebnis gleich.

Ideen? Will ungerne "nachsortieren".
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: MSFlexGrid sortiert nicht korrekt 
Autor: Zardoz
Datum: 24.08.21 04:32

Hi,
probier's mal mit dem Compare-Event des Flexgrids.
Sort = 9.

Gruss,

Zardoz

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: MSFlexGrid sortiert nicht korrekt 
Autor: partybremser
Datum: 24.08.21 20:54

Danke für den Tipp.

Ich muss zugeben, hatte das im Blick - aber nicht verstanden wie das Event zu händeln isz. Es werden als Werte die Reihe, darauffolgende Reihe sowie der Compate-Wert zurückgegeben.

Da ich Spalten vergleichen will nutzt mir das aber nichts.

Müsste ich in dem Event die zu sortierende Spalte über .col anwählen und in eigenem Code prüfen und sortieren (.rowposition)? Das wäre vermutlich sehr langsam. Mache das zur Zeit so:

Sortiere die Tabelle über ausgewählte Spalte komplett unter

Sort=flexSortGenericAscending

vor. Danach (komplette Tabelle) den Inhalt zweier aufeinanderfolgender Spalten über prüfen des Inhaltes $1>$2? und vertauschen der Zeilen (.rowposition). Durch die Vorsortierung geht das recht fix, dauert ein paar Sekunden. Ist bei 11000+ Datensätzen aber OK.

Wie oben geschrieben - evtl. verstehe ich aber das Event resp. die Anwendung nicht?!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: MSFlexGrid sortiert nicht korrekt 
Autor: Souffleurlos
Datum: 25.08.21 17:29

Hallo Partybremser

Wenn der Sortieralg. nicht das bringt was man sich wünscht, so kann man sich einfach mit einer zusätzlichen Spalte, integer, helfen. Diese füllt man, wenn man Daten in die Flexgrid lädt.
Dann prüft man Feld "Label" zu Beispiel so:

Ist kein Sonderzeichen enthalten, zusätzliches Feld = 0
Jedes Sonderzeichen dass gefünden wird, ist zusätzliches Feld 1 oder 2 oder 3 je nachdem
man sie sortiert haben will.

Dann sortiert man Flexgrid nach der Spalte Label und dann nach der zusätzlichen Spalte.

Was Zaardoz vorgeschlagen hat nimmt dir einige Sortierfeatures weg und sind nicht high speed.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: MSFlexGrid sortiert nicht korrekt 
Autor: partybremser
Datum: 01.09.21 21:01

Antwort etwas verspätet.

Das Problem bei deiner Lösung wäre, dass ich auch den Standort zB des "-" wissen müsste.

Als Beispiel zwei Labelcodes:

EMI 0C 063-02-382 Q
EMI 1A 052Z-64690

Aber... Bin jetzt philosophisch rangegangen... Betreibe das Programm seit 1993, damals noch auf dem Commodore Amiga. Und natürlich nicht mit VB. Erst durch die Problematik mit der Flexgrid-Sortierung fiel mir bewusst auf, dass die "Sonderzeichen" nicht korrekt sortiert werden. Was bedeutet in diesem Falle aber korrekt?! Korrekt im Sinne ASCII-Code. Ist das überhaupt sinnvoll? Sucht man so? Zumindest hab ich noch nie nach einem genauen Labelcode gesucht, immer nur nach Teilbereiche. Das gilt auch für Titel, Interpret... etc.

Deswegen ist es eigentlich irrelevant wo genau in der Liste das Gesuchte steht. Einzig wenn man einen kompletten Abdruck erstellt wird es sinnvoller. Aber so viele Datensätze druckt man selten (nie) komplett ab.

Bei einem Test, die mit der .sort-Funktion sortierte Datenbank ASCII-Like zu sortieren, war auch schnell klar, dass das recht fix geht. Einige Seukunden. Im Falle des Falles kein Problem.

Danke für eure Hilfe!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: MSFlexGrid sortiert nicht korrekt 
Autor: Zardoz
Datum: 03.09.21 03:28

Hallo,
du hast das Compare-Event nicht ganz verstanden.
Probier' mal dies:
Private Sub Command1_Click()
 
  MSFlexGrid1.Sort = 9
  Beep
 
End Sub
 
Private Sub MSFlexGrid1_Compare(ByVal Row1 As Long, ByVal Row2 As Long, Cmp As _
  Integer)
 
  Dim K As Long, Z1 As String, Z2 As String
 
  K = 1 ' Kolumne, nach der sortiert wird
  With MSFlexGrid1
    Z1 = .TextMatrix(Row1, K)
    Z2 = .TextMatrix(Row2, K)
  End With
 
  If Z1 = Z2 Then Exit Sub
 
  If Z1 < Z2 Then
    Cmp = -1
  Else
    Cmp = 1
  End If
 
End Sub

Gruss,

Zardoz

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: MSFlexGrid sortiert nicht korrekt 
Autor: partybremser
Datum: 07.09.21 21:26

Ah, super... Glaube, ich verstehe was du meinst. Probiere ich am Freitag mal aus, da ist viel Zeit Danke schon mal!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel