> kennt jemand eine Lösung um bei der  Alphabetischen-Sortierfolge 
> einer Listbox die Umlaute korrekt zu sortieren?

Na ja, ich habe eine App wo ich zur Design-Zeit nicht weiss, welche Datenbank 
der Benutzer wählt und welche Felder er für die Datenbanktabellen definiert. 
Welche Felder wo in den Listboxen angezeigt werden, dass kann er auch selber 
wählen.

Daher versuche ich die Sortierung nicht auf die Datenbank zu schieben und so 
habe ich eine checkbox unter den Preferences eingebaut, wo der Benutzer selber 
entscheiden kann, ob er eine schnelle Sortierung wünscht, oder eine langsame, 
wo besondere Zeichen 'richtig' eingeordnet werden.

In einem Modul habe ich eine Method 'AsciiSort' welche einen String zur 
Benutzung in strcomp vorbereitet (und das dauert...) Siehe code ganz unten.

Dann habe ich eine Methode für das Sortieren meiner Listboxen. (Bein Füllen der 
Listbox wird im CellTag der Datentyp abgelegt).

Keine Ahnung, ob man das effizienter gestalten könnte.

Code:

========
Function imListboxCompareRows(row1 as Integer, row2 as Integer, column as 
Integer, ByRef result as Integer, ColType As String, lbox As imListbox) As 
Boolean
  SELECT CASE ColType.Uppercase
  CASE "TEXT"
    
    // The user can switch off strComp in Preferences
    If SUPRT.DoQuickSort Then Return False

    result = StrComp(lbox.Cell(row1, column).AsciiSort, lbox.Cell(row2, 
column).AsciiSort,1)
    return True
    
  CASE "NUMBER"
    result = Sign( val( lbox.Cell( row1, Column )) - val( lbox.Cell( row2, 
Column)))
    Return True
    
  CASE "DATE"

    'Dim d1,d2 As Date
    'd1 = Date(lbox.CellTag(row1, column))
    'd2 = Date(lbox.CellTag(row2, column))
    'If d1.TotalSeconds > d2.TotalSeconds Then
    'result = 1
    'ElseIf d1.TotalSeconds < d2.TotalSeconds Then
    'result = -1
    'Else
    'result = 0
    'End If
    'Return True
    
    // But as we use SQLDateString, we let REALStudio handle the comparison
    Return False 
    
    
  CASE ELSE
    Return False  // Let REALStudio handle the comparison
    
  END SELECT
End Function

=======

Function AsciiSort(Extends s As String) As String
  If s <> "" Then
    s = s.Lowercase
    s = ReplaceAll(s, "ä", "a")
    s = ReplaceAll(s, "å", "a")
    s = ReplaceAll(s, "â", "a")
    s = ReplaceAll(s, "ã", "a")
    s = ReplaceAll(s, "á", "a")
    s = ReplaceAll(s, "æ", "a")
    s = ReplaceAll(s, "é", "e")
    s = ReplaceAll(s, "è", "e")
    s = ReplaceAll(s, "ê", "e")
    s = ReplaceAll(s, "ë", "e")
    s = ReplaceAll(s, "ï", "i")
    s = ReplaceAll(s, "î", "i")
    s = ReplaceAll(s, "ì", "i")
    s = ReplaceAll(s, "í", "i")
    s = ReplaceAll(s, "ö", "o")
    s = ReplaceAll(s, "ô", "o")
    s = ReplaceAll(s, "ò", "o")
    s = ReplaceAll(s, "ó", "o")
    s = ReplaceAll(s, "ü", "u")
    s = ReplaceAll(s, "ù", "u")
    s = ReplaceAll(s, "û", "u")
    s = ReplaceAll(s, "ú", "u")
    s = ReplaceAll(s, "ÿ", "y")
    s = ReplaceAll(s, "ç", "c")
    s = ReplaceAll(s, "ñ", "n")
    s = ReplaceAll(s, "ž", "z")
    s = ReplaceAll(s, "š", "s")
    s = ReplaceAll(s, "ß", "s")
  End If
  Return s
End Function

=======

Oliver


Antwort per Email an