尚工,看这儿:
static procedure TDOCRELEVANCYINFO2.FillRelevancyDataSet(ADataSet: TDataSet;
const AFileName: string);
var
I: Integer;
lQuery: TQuery;
lSQLFilter: string;
lCloneDataSet: TCloneDataSet;
lOldReadonly: Boolean;
begin
if ADataSet.RecordCount = 0 then
Exit;
lSQLFilter := '';
ADataSet.DisableControls;
ADataSet.LogChanges := False;
lOldReadonly := ADataSet.Readonly;
lQuery := TQuery.Create(nil);
lCloneDataSet := TCloneDataSet.Create(nil);
try
ADataSet.Readonly := False;
if AFileName <> '' then
begin
lCloneDataSet.CloneCursor(ADataSet, False, False, False);
if not lCloneDataSet.Locate('FDOCGUID', FileSys.FileUtils.GetFileNameNoExt(AFileName), []) then
Exit;
lSQLFilter := SysUtils.Format('''%s''', [FileSys.FileUtils.GetFileNameNoExt(AFileName)])
end
else
begin
lCloneDataSet.CloneCursor(ADataSet, True, False, False);
lCloneDataSet.First;
while not lCloneDataSet.Eof do
begin
if lSQLFilter = '' then
lSQLFilter := SysUtils.Format('''%s''', [lCloneDataSet.FieldByName('FDOCGUID').AsString])
else
lSQLFilter := SysUtils.Format('%s, ''%s''', [lSQLFilter, lCloneDataSet.FieldByName('FDOCGUID').AsString]);
lCloneDataSet.Next;
end;
lCloneDataSet.First;
end;
lQuery.ConnectionString := BizObjConsts.cSysDatabaseConnectionString;
lQuery.CommandText := SysUtils.Format('SELECT * FROM TDOCSYSTEM WHERE FID IN(%s)', [lSQLFilter]);
lQuery.Open;
while not lCloneDataSet.Eof do
begin
lQuery.First;
if lQuery.Locate('FID', lCloneDataSet.FieldByName('FDOCGUID').AsString, []) then
begin
lCloneDataSet.Edit;
for I := 0 to lCloneDataSet.Fields.Count - 1 do
if (not SysUtils.SameText(lCloneDataSet.Fields[I].FieldName, 'FGUID'))
and (lQuery.FindField(lCloneDataSet.Fields[I].FieldName) <> nil) then
begin
lCloneDataSet.FieldByName(lCloneDataSet.Fields[I].FieldName).Value :=
lQuery.FieldByName(lCloneDataSet.Fields[I].FieldName).Value;
end;
// TS 为了兼容
lCloneDataSet.FieldByName('FDOCURL').AsString := FileSys.cDocFilePrefix + lQuery.FieldByName('FPATH').AsString
+ lQuery.FieldByName('FID').AsString + lQuery.FieldByName('FKIND').AsString;
if lCloneDataSet.FieldByName('FCUREDITORURL').AsString = '' then
lCloneDataSet.FieldByName('FEDITSTATE').AsString := TDocConst.EditState_None
else if TOrgUtils.InOperator(TSystemCore.Operator, lCloneDataSet.FieldByName('FCUREDITORURL').AsString) then
lCloneDataSet.FieldByName('FEDITSTATE').AsString := TDocConst.EditState_OperatorEditing
else
lCloneDataSet.FieldByName('FEDITSTATE').AsString := TDocConst.EditState_NotOperatorEditing;
if lCloneDataSet.FieldByName('FCUREDITORURL').AsString = '' then
begin
lCloneDataSet.FieldByName('FCONTENTCHANGED').AsInteger := 0;
lCloneDataSet.FieldByName('FFILESTATE').AsInteger := FileState_None;
end;
lCloneDataSet.Post;
lCloneDataSet.Next;
end
else if lCloneDataSet.FieldByName('FDOCURL').AsString <> '' then
begin
lCloneDataSet.Delete;
end
else
begin
lCloneDataSet.Edit;
lCloneDataSet.FieldByName('FKIND').AsString := SysUtils.UpperCase(FileSys.FileUtils.GetFileExt(lCloneDataSet.FieldByName('FDOCURL').AsString));
lCloneDataSet.Post;
lCloneDataSet.Next;
end;
if AFileName <> '' then
Break;
end;
finally
lCloneDataSet.Free;
lQuery.Free;
ADataSet.EnableControls;
ADataSet.LogChanges := True;
ADataSet.Readonly := lOldReadonly;
end;
end; |