Index: oup/current/DataAccess/Access_OUP_ADB.pas
===================================================================
--- oup/current/DataAccess/Access_OUP_ADB.pas	(revision 157)
+++ oup/current/DataAccess/Access_OUP_ADB.pas	(revision 159)
@@ -214,4 +214,13 @@
 
 
+  function CompareItems(List: TStringList; I1, I2: Integer): Integer;
+  var
+    s1, s2: String;
+  begin
+    s1 := MidStr(List[I1], 1, PosEx(';', List[I1], 6) - 1);
+    s2 := MidStr(List[I2], 1, PosEx(';', List[I2], 6) - 1);
+    Result := CompareStr(s1, s2);
+  end;
+
 function TAccess_OUP_ADB.GetFilesList(ext: String; pattern: String;
   NoEmptyFiles: Boolean; SortType: TSortType): TStrings;
@@ -252,73 +261,52 @@
 
 begin
-  if not (SortType in [ST_ExtNameAsc, ST_ExtNameDesc]) then
-  begin
-    list := TStringList.Create;
+  list := TStringList.Create;
+  if SortType in [ST_ExtNameAsc, ST_ExtNameDesc] then
+    list.Sorted := False
+  else
     list.Sorted := True;
-    for i := 0 to GetFileCount - 1 do
-    begin
-      if ((Length(ext) = 0) or (Pos(Fdat_files[i].Extension, ext) > 0)) and
-        ((Length(pattern) = 0) or
-        (Pos(UpperCase(pattern), UpperCase(Fdat_files[i].Name)) > 0)) then
+  for i := 0 to GetFileCount - 1 do
+  begin
+    if ((Length(ext) = 0) or (Pos(Fdat_files[i].Extension, ext) > 0)) and
+      ((Length(pattern) = 0) or
+      (Pos(UpperCase(pattern), UpperCase(Fdat_files[i].Name)) > 0)) then
+    begin
+      if (NoEmptyFiles = False) or ((Fdat_files[i].FileType and $02) = 0) then
       begin
-        if (NoEmptyFiles = False) or ((Fdat_files[i].FileType and $02) = 0) then
-        begin
-          id := FormatNumber(Fdat_files[i].ID, 5, '0');
-          name := Fdat_files[i].Name;
-          extension := Fdat_files[i].Extension;
-
-          case SortType of
-            ST_IDAsc, ST_IDDesc:     list.Add(id + ';' + name + ';' + extension);
-            ST_NameAsc, ST_NameDesc: list.Add(name + ';' + id + ';' + extension);
-            ST_ExtAsc, ST_ExtDesc:   list.Add(extension + ';' + id + ';' + name);
-            ST_ExtNameAsc, ST_ExtNameDesc: list.Add(extension + ';' + name + ';' + id);
-          end;
+        id := FormatNumber(Fdat_files[i].ID, 5, '0');
+        name := Fdat_files[i].Name;
+        extension := Fdat_files[i].Extension;
+
+        case SortType of
+          ST_IDAsc, ST_IDDesc:     list.Add(id + ';' + name + ';' + extension);
+          ST_NameAsc, ST_NameDesc: list.Add(name + ';' + id + ';' + extension);
+          ST_ExtAsc, ST_ExtDesc:   list.Add(extension + ';' + id + ';' + name);
+          ST_ExtNameAsc, ST_ExtNameDesc: list.Add(extension + ';' + name + ';' + id);
         end;
       end;
     end;
-    if not Assigned(Result) then
-      Result := TStringList.Create;
-    if list.Count > 0 then
-    begin
-      fields := TStringList.Create;
-      if SortType in [ST_IDAsc, ST_NameAsc, ST_ExtAsc, ST_ExtNameAsc] then
-        for i := 0 to list.Count - 1 do
-        begin
-          getfields;
-          Result.Add(id + '-' + name + '.' + extension);
-        end
-      else
-        for i := list.Count - 1 downto 0 do
-        begin
-          getfields;
-          Result.Add(id + '-' + name + '.' + extension);
-        end;
-      fields.Free;
-    end;
-    list.Free;
-  end
-  else
-  begin
-    FQuery.SQL.Text := 'SELECT id, name, extension FROM datfiles ' +
-        'WHERE Length(name) > 0 ORDER BY extension ASC, name ASC;';
-    FQuery.Open;
-    if not Assigned(Result) then
-      Result := TStringList.Create;
-    if FQuery.RecordCount > 0 then
-    begin
-      FQuery.First;
-      repeat
-        name := FormatNumber(FQuery.FieldByName('id').AsInteger, 5, '0') +
-              '-' + FQuery.FieldByName('name').AsString + '.' +
-              FQuery.FieldByName('extension').AsString;
-        if SortType = ST_ExtNameAsc then
-          Result.Add(name)
-        else
-          Result.Insert(0, name);
-        FQuery.Next;
-      until FQuery.EOF;
-    end;
-    FQuery.Close;
-  end;
+  end;
+  if SortType in [ST_ExtNameAsc, ST_ExtNameDesc] then
+    list.CustomSort(CompareItems);
+  if not Assigned(Result) then
+    Result := TStringList.Create;
+  if list.Count > 0 then
+  begin
+    fields := TStringList.Create;
+    if SortType in [ST_IDAsc, ST_NameAsc, ST_ExtAsc, ST_ExtNameAsc] then
+      for i := 0 to list.Count - 1 do
+      begin
+        getfields;
+        Result.Add(id + '-' + name + '.' + extension);
+      end
+    else
+      for i := list.Count - 1 downto 0 do
+      begin
+        getfields;
+        Result.Add(id + '-' + name + '.' + extension);
+      end;
+    fields.Free;
+  end;
+  list.Free;
 end;
 
