Ignore:
Timestamp:
Apr 2, 2007, 1:47:18 AM (18 years ago)
Author:
alloc
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • oup/current/DataAccess/Access_OUP_ADB.pas

    r156 r157  
    214214
    215215
    216   function CompareItems(List: TStringList; I1, I2: Integer): Integer;
    217   var
    218     fin: Boolean;
    219     pos: Integer;
    220     s1, s2: String;
    221   begin
    222     fin := False;
    223     s1 := MidStr(List[I1], 1, PosEx(';', List[I1], 6) - 1);
    224     s2 := MidStr(List[I2], 1, PosEx(';', List[I2], 6) - 1);
    225     pos := 1;
    226     Result := 0;
    227     repeat
    228       if Ord(s1[pos]) < Ord(s2[pos]) then
    229       begin
    230         Result := -1;
    231         fin := True;
    232       end
    233       else if Ord(s1[pos]) > Ord(s2[pos]) then
    234       begin
    235         Result := 1;
    236         fin := True;
    237       end;
    238       Inc(pos);
    239     until fin or (pos > Length(s1)) or (pos > Length(s2));
    240 
    241     if not fin then
    242     begin
    243       if pos > Length(s1) then
    244         Result := -1
    245       else
    246         Result := 1;
    247     end;
    248   end;
    249 
    250216function TAccess_OUP_ADB.GetFilesList(ext: String; pattern: String;
    251217  NoEmptyFiles: Boolean; SortType: TSortType): TStrings;
     
    286252
    287253begin
    288   list := TStringList.Create;
    289   if SortType in [ST_ExtNameAsc, ST_ExtNameDesc] then
    290     list.Sorted := False
    291   else
     254  if not (SortType in [ST_ExtNameAsc, ST_ExtNameDesc]) then
     255  begin
     256    list := TStringList.Create;
    292257    list.Sorted := True;
    293   for i := 0 to GetFileCount - 1 do
    294   begin
    295     if ((Length(ext) = 0) or (Pos(Fdat_files[i].Extension, ext) > 0)) and
    296       ((Length(pattern) = 0) or
    297       (Pos(UpperCase(pattern), UpperCase(Fdat_files[i].Name)) > 0)) then
    298     begin
    299       if (NoEmptyFiles = False) or ((Fdat_files[i].FileType and $02) = 0) then
     258    for i := 0 to GetFileCount - 1 do
     259    begin
     260      if ((Length(ext) = 0) or (Pos(Fdat_files[i].Extension, ext) > 0)) and
     261        ((Length(pattern) = 0) or
     262        (Pos(UpperCase(pattern), UpperCase(Fdat_files[i].Name)) > 0)) then
    300263      begin
    301         id := FormatNumber(Fdat_files[i].ID, 5, '0');
    302         name := Fdat_files[i].Name;
    303         extension := Fdat_files[i].Extension;
    304 
    305         case SortType of
    306           ST_IDAsc, ST_IDDesc:     list.Add(id + ';' + name + ';' + extension);
    307           ST_NameAsc, ST_NameDesc: list.Add(name + ';' + id + ';' + extension);
    308           ST_ExtAsc, ST_ExtDesc:   list.Add(extension + ';' + id + ';' + name);
    309           ST_ExtNameAsc, ST_ExtNameDesc: list.Add(extension + ';' + name + ';' + id);
     264        if (NoEmptyFiles = False) or ((Fdat_files[i].FileType and $02) = 0) then
     265        begin
     266          id := FormatNumber(Fdat_files[i].ID, 5, '0');
     267          name := Fdat_files[i].Name;
     268          extension := Fdat_files[i].Extension;
     269
     270          case SortType of
     271            ST_IDAsc, ST_IDDesc:     list.Add(id + ';' + name + ';' + extension);
     272            ST_NameAsc, ST_NameDesc: list.Add(name + ';' + id + ';' + extension);
     273            ST_ExtAsc, ST_ExtDesc:   list.Add(extension + ';' + id + ';' + name);
     274            ST_ExtNameAsc, ST_ExtNameDesc: list.Add(extension + ';' + name + ';' + id);
     275          end;
    310276        end;
    311277      end;
    312278    end;
    313   end;
    314   if SortType in [ST_ExtNameAsc, ST_ExtNameDesc] then
    315     list.CustomSort(CompareItems);
    316   if not Assigned(Result) then
    317     Result := TStringList.Create;
    318   if list.Count > 0 then
    319   begin
    320     fields := TStringList.Create;
    321     if SortType in [ST_IDAsc, ST_NameAsc, ST_ExtAsc, ST_ExtNameAsc] then
    322       for i := 0 to list.Count - 1 do
    323       begin
    324         getfields;
    325         Result.Add(id + '-' + name + '.' + extension);
    326       end
    327     else
    328       for i := list.Count - 1 downto 0 do
    329       begin
    330         getfields;
    331         Result.Add(id + '-' + name + '.' + extension);
    332       end;
    333     fields.Free;
    334   end;
    335   list.Free;
     279    if not Assigned(Result) then
     280      Result := TStringList.Create;
     281    if list.Count > 0 then
     282    begin
     283      fields := TStringList.Create;
     284      if SortType in [ST_IDAsc, ST_NameAsc, ST_ExtAsc, ST_ExtNameAsc] then
     285        for i := 0 to list.Count - 1 do
     286        begin
     287          getfields;
     288          Result.Add(id + '-' + name + '.' + extension);
     289        end
     290      else
     291        for i := list.Count - 1 downto 0 do
     292        begin
     293          getfields;
     294          Result.Add(id + '-' + name + '.' + extension);
     295        end;
     296      fields.Free;
     297    end;
     298    list.Free;
     299  end
     300  else
     301  begin
     302    FQuery.SQL.Text := 'SELECT id, name, extension FROM datfiles ' +
     303        'WHERE Length(name) > 0 ORDER BY extension ASC, name ASC;';
     304    FQuery.Open;
     305    if not Assigned(Result) then
     306      Result := TStringList.Create;
     307    if FQuery.RecordCount > 0 then
     308    begin
     309      FQuery.First;
     310      repeat
     311        name := FormatNumber(FQuery.FieldByName('id').AsInteger, 5, '0') +
     312              '-' + FQuery.FieldByName('name').AsString + '.' +
     313              FQuery.FieldByName('extension').AsString;
     314        if SortType = ST_ExtNameAsc then
     315          Result.Add(name)
     316        else
     317          Result.Insert(0, name);
     318        FQuery.Next;
     319      until FQuery.EOF;
     320    end;
     321    FQuery.Close;
     322  end;
    336323end;
    337324
Note: See TracChangeset for help on using the changeset viewer.