Index: oup/current/DataAccess/Access_OUP_ADB.pas
===================================================================
--- oup/current/DataAccess/Access_OUP_ADB.pas	(revision 156)
+++ oup/current/DataAccess/Access_OUP_ADB.pas	(revision 157)
@@ -214,38 +214,4 @@
 
 
-  function CompareItems(List: TStringList; I1, I2: Integer): Integer;
-  var
-    fin: Boolean;
-    pos: Integer;
-    s1, s2: String;
-  begin
-    fin := False;
-    s1 := MidStr(List[I1], 1, PosEx(';', List[I1], 6) - 1);
-    s2 := MidStr(List[I2], 1, PosEx(';', List[I2], 6) - 1);
-    pos := 1;
-    Result := 0;
-    repeat
-      if Ord(s1[pos]) < Ord(s2[pos]) then
-      begin
-        Result := -1;
-        fin := True;
-      end
-      else if Ord(s1[pos]) > Ord(s2[pos]) then
-      begin
-        Result := 1;
-        fin := True;
-      end;
-      Inc(pos);
-    until fin or (pos > Length(s1)) or (pos > Length(s2));
-
-    if not fin then
-    begin
-      if pos > Length(s1) then
-        Result := -1
-      else
-        Result := 1;
-    end;
-  end;
-
 function TAccess_OUP_ADB.GetFilesList(ext: String; pattern: String;
   NoEmptyFiles: Boolean; SortType: TSortType): TStrings;
@@ -286,52 +252,73 @@
 
 begin
-  list := TStringList.Create;
-  if SortType in [ST_ExtNameAsc, ST_ExtNameDesc] then
-    list.Sorted := False
-  else
+  if not (SortType in [ST_ExtNameAsc, ST_ExtNameDesc]) then
+  begin
+    list := TStringList.Create;
     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
-    begin
-      if (NoEmptyFiles = False) or ((Fdat_files[i].FileType and $02) = 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
-        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);
+        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;
         end;
       end;
     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;
+    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;
 
