--- oup/current/DataAccess/Access_OUP_ADB.pas 2007/02/26 22:57:02 116 +++ oup/current/DataAccess/Access_OUP_ADB.pas 2007/04/01 22:49:17 156 @@ -18,7 +18,6 @@ type procedure UpdateListCache; function GetLinksToFile(FileID: Integer): TLinks; - function GetLinksFromFile(FileID: Integer): TLinks; function GetFileInfo(FileID: Integer): TFileInfo; override; function GetFilesList(Ext: String; Pattern: String; @@ -47,7 +46,7 @@ type implementation uses - SysUtils, Data, Functions, ABSDecUtil, DB, DatLinks; + SysUtils, Data, Functions, ABSDecUtil, DB, DatLinks, StrUtils; (* @@ -67,10 +66,14 @@ begin FFileName := DBFilename; FDatabase := TABSDatabase.Create(nil); + FDatabase.Exclusive := True; + FDatabase.MultiUser := False; FDatabase.DatabaseName := 'OLDBcon' + IntToStr(ConnectionID); FDatabase.DatabaseFileName := DBFilename; FDatabase.Open; FQuery := TABSQuery.Create(FDatabase); + FQuery.DisableControls; + FQuery.RequestLive := False; FQuery.DatabaseName := 'OLDBcon' + IntToStr(ConnectionID); FQuery.SQL.Text := 'SELECT [name],[value] FROM globals ORDER BY [name] ASC'; FQuery.Open; @@ -193,27 +196,6 @@ begin FQuery.Close; end; -function TAccess_OUP_ADB.GetLinksFromFile(FileID: Integer): TLinks; -var - i: Integer; -begin - SetLength(Result.ByName, 0); - FQuery.SQL.Text := 'SELECT src_link_offset, target_id FROM linkmap WHERE src_id = ' + IntToStr(FileID) + ' ORDER BY target_id ASC;'; - FQuery.Open; - SetLength(Result.ByID, FQuery.RecordCount); - if FQuery.RecordCount > 0 then - begin - i := 0; - repeat - Result.ByID[i].SrcOffset := FQuery.FieldByName('src_link_offset').AsInteger; - Result.ByID[i].Destination := FQuery.FieldByName('target_id').AsInteger; - Inc(i); - FQuery.Next; - until FQuery.EOF; - end; - FQuery.Close; -end; - function TAccess_OUP_ADB.GetFileInfo(fileid: Integer): TFileInfo; @@ -231,6 +213,39 @@ 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; @@ -271,7 +286,10 @@ var begin list := TStringList.Create; - list.Sorted := True; + 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 @@ -288,11 +306,13 @@ begin 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(name + ';' + extension + ';' + id); + ST_ExtNameAsc, ST_ExtNameDesc: list.Add(extension + ';' + name + ';' + id); 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