--- oup/current/DataAccess/Access_OUP_ADB.pas 2007/02/25 17:20:22 113 +++ oup/current/DataAccess/Access_OUP_ADB.pas 2007/02/26 22:57:02 116 @@ -32,6 +32,7 @@ type procedure UpdateDatFilePart(FileID, Offset, Size: Integer; Src: TStream); overload; override; function GetDatLinks(FileID: Integer): TDatLinkList; override; + function GetDatLink(FileID, DatOffset: Integer): TDatLink; override; function GetRawList(FileID: Integer): TRawDataList; override; function GetRawInfo(FileID, DatOffset: Integer): TRawDataInfo; override; @@ -46,7 +47,7 @@ type implementation uses - SysUtils, Data, Functions, ABSDecUtil, DB; + SysUtils, Data, Functions, ABSDecUtil, DB, DatLinks; (* @@ -443,6 +444,48 @@ begin end; end; + + +function TAccess_OUP_ADB.GetDatLink(FileID, DatOffset: Integer): TDatLink; +begin + Result := DatLinksManager.GetDatLink(FConnectionID, FileID, DatOffset); + FQuery.SQL.Text := 'SELECT target_id FROM linkmap WHERE src_id = ' + IntToStr(FileID) + ' and src_link_offset = ' + IntToStr(DatOffset) + ';'; + FQuery.Open; + if FQuery.RecordCount > 0 then + Result.DestID := FQuery.FieldByName('target_id').AsInteger; + FQuery.Close; +end; + + +function TAccess_OUP_ADB.GetDatLinks(FileID: Integer): TDatLinkList; +var + i: Integer; + SrcOffset, DestID: Integer; +begin + Result := DatLinksManager.GetDatLinks(FConnectionID, FileID); + if Length(Result) > 0 then + begin + FQuery.SQL.Text := 'SELECT src_link_offset, target_id FROM linkmap WHERE src_id = ' + IntToStr(FileID) + ' ORDER BY src_link_offset ASC;'; + FQuery.Open; + if FQuery.RecordCount > 0 then + begin + repeat + SrcOffset := FQuery.FieldByName('src_link_offset').AsInteger; + DestID := FQuery.FieldByName('target_id').AsInteger; + for i := 0 to High(Result) do + if Result[i].SrcOffset = SrcOffset then + Break; + if i < Length(Result) then + Result[i].DestID := DestID + else + Result[i].DestID := -1; + FQuery.Next; + until FQuery.EOF; + end; + FQuery.Close; + end; +end; + function TAccess_OUP_ADB.GetRawList(FileID: Integer): TRawDataList; var