--- oup/current/DataAccess/Access_OUP_ADB.pas 2007/04/01 22:49:17 156 +++ oup/current/DataAccess/Access_OUP_ADB.pas 2007/04/01 23:47:18 157 @@ -213,40 +213,6 @@ end; - 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; var @@ -285,54 +251,75 @@ var end; begin - 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 + if not (SortType in [ST_ExtNameAsc, ST_ExtNameDesc]) then 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 + list := TStringList.Create; + list.Sorted := True; + for i := 0 to GetFileCount - 1 do begin - if (NoEmptyFiles = False) or ((Fdat_files[i].FileType and $02) = 0) then + 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 + 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 - 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; + 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; - list.Free; end;