123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377 |
- unit FXQDManagerUnit;
- interface
- uses
- Classes,
- Windows,
- ScProjectManager,
- ConstVarUnit,
- FileOprUnit,
- ADODB,
- Provider,
- DBClient,
- CommonIntfUnit;
- type
- TConfigFileManager = class(TInterfacedObject, IFileManager)
- private
- FFileList : TStrings;
- { TODO : FFileFlag = 1: 表示分项清单, 2: 表示工程量清单 }
- FFileFlag : Integer;
- FFileDir : string;
- procedure LoadFromFile(const aFileName: string);
- procedure SaveToFile(const aFileName: string);
- public
- constructor Create;
- destructor Destroy; override;
- procedure AddFile(const aFileName: string);
- procedure DeleteFile(const aFileName: string);
- procedure RenameFile(const aOldFileName, aNewFileName: string);
- procedure AddLibsTo(aLibs, aLibFiles: TStrings; aFileFlag: Integer);
- property Libs: TStrings read FFileList;
- end;
- TFXQDManager = class(TInterfacedObject, IFileManager)
- private
- FFileDir : string;
- FFileOpr : TFileOpr;
- FConfigFileManager : TConfigFileManager;
- FProjectManager : TProjectManager;
- FConnection : TADOConnection;
- FBillsTable : TADOTable;
- FDrawTable : TADOTable;
- function GenerateTemplateName: string;
- { TODO : aLibName is a ShortFileName }
- function CreateNewLib(const aLibName: string): string;
- { TODO : aLibName is a FullFileName }
- procedure OpenLib(const aLibName: string);
- procedure WriteBills;
- procedure WriteDrawingQty;
- procedure Write;
- procedure Save;
- procedure Close;
- procedure LoadFromFile(const aFileName: string);
- procedure SaveToFile(const aFileName: string);
- function GetFileFlag: Integer;
- procedure SetFileFlag(const Value: Integer);
- public
- constructor Create(aProjectManager: TProjectManager);
- destructor Destroy; override;
- function CheckLibExists(const aShortName: string): Boolean;
- function GenerateLibName(const aShortName: string): string;
- { the Params are all shortNames }
- procedure AddFile(const aLibName: string);
- procedure DeleteFile(const aLibName: string);
- procedure RenameFile(const aOldLibName, aNewLibName: string);
- procedure ImportLib(const aOldLibName, aNewLibName: string);
- procedure ExportLib(const aOldLibName, aNewLibName: string);
- property FileFlag: Integer read GetFileFlag write SetFileFlag;
- property ConfigFileManager: TConfigFileManager read FConfigFileManager;
- end;
- implementation
- uses SysUtils, DataBase, DB;
- { TFXQDManager }
- procedure TConfigFileManager.AddFile(const aFileName: string);
- begin
- FFileList.Add(Format('%d.%s', [FFileFlag, aFileName]));
- end;
- procedure TConfigFileManager.AddLibsTo(aLibs, aLibFiles: TStrings;
- aFileFlag: Integer);
- var
- I: Integer;
- sLib: string;
- sHead: string;
- begin
- sHead := IntToStr(FFileFlag) + '.';
- for I := 0 to FFileList.Count - 1 do
- begin
- sLib := FFileList[I];
- if Pos(sHead, sLib) = 1 then
- begin
- sLib := Copy(sLib, Pos('.', sLib) + 1, Length(sLib));
- aLibs.Add(sLib);
- sLib := Format('%sStdLibs\%s.dat', [FFileDir, sLib]);
- aLibFiles.Add(sLib);
- end;
- end;
- end;
- constructor TConfigFileManager.Create;
- begin
- FFileFlag := 1;
- FFileList := TStringList.Create;
- end;
- procedure TConfigFileManager.DeleteFile(const aFileName: string);
- var
- iIdx: Integer;
- begin
- iIdx := FFileList.IndexOf(Format('%d.%s', [FFileFlag, aFileName]));
- if iIdx > -1 then
- FFileList.Delete(iIdx);
- end;
- destructor TConfigFileManager.Destroy;
- begin
- FFileList.Free;
- inherited;
- end;
- procedure TConfigFileManager.LoadFromFile(const aFileName: string);
- begin
- if FileExists(aFileName) then
- FFileList.LoadFromFile(aFileName)
- else
- FFileList.Clear;
- end;
- procedure TConfigFileManager.RenameFile(const aOldFileName, aNewFileName: string);
- var
- iIdx: Integer;
- begin
- iIdx := FFileList.IndexOf(Format('%d.%s', [FFileFlag, aOldFileName]));
- if iIdx > -1 then
- FFileList[iIdx] := Format('%d.%s', [FFileFlag, aNewFileName]);
- end;
- procedure TConfigFileManager.SaveToFile(const aFileName: string);
- begin
- FFileList.SaveToFile(aFileName);
- end;
- procedure TFXQDManager.WriteBills;
- begin
- with FProjectManager.ActiveProject.BillsData do
- begin
- cdsBills.First;
- while not cdsBills.Eof do
- begin
- { Value 和 AsString 产生的结果不一样!!! }
- { 为安全起见,最好还是用 AsString 吧 }
- // slist.Add(cdsBillsCode.Value + ' <----> ' + cdsBillsB_Code.Value);
- // slist.Add(cdsBillsCode.AsString + ' <----> ' + cdsBillsB_Code.AsString);
- FBillsTable.Append;
- FBillsTable.FieldByName(SID).AsInteger := cdsBillsID.AsInteger;
- FBillsTable.FieldByName(sParentID).AsInteger := cdsBillsParentID.AsInteger;
- FBillsTable.FieldByName('NextID').AsInteger := cdsBillsNextSiblingID.AsInteger;
- FBillsTable.FieldByName(sCode).AsString := cdsBillsCode.AsString;
- FBillsTable.FieldByName(sB_Code).AsString := cdsBillsB_Code.AsString;
- FBillsTable.FieldByName(sName).AsString := cdsBillsName.AsString;
- FBillsTable.FieldByName('Unit').AsString := cdsBillsUnits.AsString;
- if cdsBillsID.Value < 100 then
- FBillsTable.FieldByName('StaticID').AsInteger := cdsBillsID.AsInteger;
- FBillsTable.FieldByName(sMemoStr).AsString := cdsBillsMemoStr.AsString;
- FBillsTable.Post;
- cdsBills.Next;
- end;
- end;
- end;
- procedure TFXQDManager.WriteDrawingQty;
- begin
- with FProjectManager.ActiveProject.BillsData do
- begin
- cdsDrawingQuantity.First;
- while not cdsDrawingQuantity.Eof do
- begin
- FDrawTable.Append;
- FDrawTable.FieldByName(SID).AsInteger := cdsDrawingQuantityID.AsInteger;
- FDrawTable.FieldByName(sName).AsString := cdsDrawingQuantityName.AsString;
- FDrawTable.FieldByName(sUnits).AsString := cdsDrawingQuantityUnits.AsString;
- FDrawTable.FieldByName(sDesignQuantity).AsFloat := cdsDrawingQuantityDQuantity1.AsFloat;
- FDrawTable.FieldByName(sDesignQuantity2).AsFloat := cdsDrawingQuantityDQuantity2.AsFloat;
- FDrawTable.FieldByName(sMemoStr).AsString := cdsDrawingQuantityMemoContext.AsString;
- FDrawTable.FieldByName(sBillsID).AsInteger := cdsDrawingQuantityBillsID.AsInteger;
- FDrawTable.Post;
- cdsDrawingQuantity.Next;
- end;
- end;
- end;
- { TFXQDManager }
- procedure TFXQDManager.AddFile(const aLibName: string);
- var
- sNewFileName: string;
- begin
- sNewFileName := CreateNewLib(aLibName);
- if sNewFileName = '' then Exit;
- FConfigFileManager.AddFile(aLibName);
-
- OpenLib(sNewFileName);
- Write;
- Save;
- Close;
- end;
- function TFXQDManager.CheckLibExists(const aShortName: string): Boolean;
- var
- sLibName: string;
- begin
- sLibName := GenerateLibName(aShortName);
- Result := FFileOpr.FileExists(sLibName);
- end;
- procedure TFXQDManager.Close;
- begin
- FConnection.Close;
- end;
- constructor TFXQDManager.Create(aProjectManager: TProjectManager);
- begin
- FFileOpr := TFileOpr.Create;
- FFileDir := FFileOpr.ExtractFilePath(ParamStr(0));
- FProjectManager := aProjectManager;
- FConnection := TADOConnection.Create(nil);
- FConnection.LoginPrompt := False;
- FBillsTable := TADOTable.Create(nil);
- FDrawTable := TADOTable.Create(nil);
- FConfigFileManager := TConfigFileManager.Create;
- FConfigFileManager.FFileDir := FFileDir;
- LoadFromFile({$I StdLibs.inc});
- end;
- function TFXQDManager.CreateNewLib(const aLibName: string): string;
- var
- sTemplateName: string;
- begin
- Result := GenerateLibName(aLibName);
- sTemplateName := GenerateTemplateName;
- if not FFileOpr.CopyFile(sTemplateName, Result) then
- Result := '';
- end;
- procedure TFXQDManager.DeleteFile(const aLibName: string);
- var
- sLibName: string;
- begin
- sLibName := GenerateLibName(aLibName);
- FFileOpr.DeleteFile(sLibName);
- FConfigFileManager.DeleteFile(aLibName);
- Save;
- end;
- destructor TFXQDManager.Destroy;
- begin
- FConnection.Free;
- FBillsTable.Free;
- FDrawTable.Free;
- FFileOpr.Free;
- FConfigFileManager.Free;
- inherited;
- end;
- procedure TFXQDManager.ExportLib(const aOldLibName, aNewLibName: string);
- begin
- FFileOpr.CopyFile(aOldLibName, aNewLibName);
- Save;
- end;
- function TFXQDManager.GenerateLibName(const aShortName: string): string;
- begin
- Result := Format('%sStdLibs\%s.dat', [FFileDir, aShortName]);
- end;
- function TFXQDManager.GenerateTemplateName: string;
- begin
- if FileFlag = 1 then
- Result := Format('%sData\%s', [FFileDir, FXTemplateFile])
- else
- Result := '';
- end;
- function TFXQDManager.GetFileFlag: Integer;
- begin
- Result := FConfigFileManager.FFileFlag;
- end;
- procedure TFXQDManager.ImportLib(const aOldLibName, aNewLibName: string);
- var
- sNewLibName: string;
- begin
- sNewLibName := GenerateLibName(aNewLibName);
- FFileOpr.CopyFile(aOldLibName, sNewLibName);
- FConfigFileManager.AddFile(aNewLibName);
- Save;
- end;
- procedure TFXQDManager.LoadFromFile(const aFileName: string);
- begin
- FConfigFileManager.LoadFromFile(aFileName);
- end;
- procedure TFXQDManager.OpenLib(const aLibName: string);
- begin
- FConnection.ConnectionString := Format(SAdoConnectStr, [aLibName, 'Admin', '']);
- FConnection.Open;
- FBillsTable.Connection := FConnection;
- FDrawTable.Connection := FConnection;
- FBillsTable.TableName := 'BillsTree';
- FDrawTable.TableName := 'DrawingQuantity';
- FBillsTable.Active := True;
- if FileFlag = 1 then
- FDrawTable.Active := True;
- end;
- procedure TFXQDManager.RenameFile(const aOldLibName, aNewLibName: string);
- var
- sOldLibName: string;
- sNewLibName: string;
- begin
- sOldLibName := GenerateLibName(aOldLibName);
- sNewLibName := GenerateLibName(aNewLibName);
- FFileOpr.RenameFile(sOldLibName, sNewLibName);
- FConfigFileManager.RenameFile(aOldLibName, aNewLibName);
- Save;
- end;
- procedure TFXQDManager.Save;
- begin
- SaveToFile({$I StdLibs.inc});
- end;
- procedure TFXQDManager.SaveToFile(const aFileName: string);
- begin
- FConfigFileManager.SaveToFile(aFileName);
- end;
- procedure TFXQDManager.SetFileFlag(const Value: Integer);
- begin
- FConfigFileManager.FFileFlag := Value;
- end;
- procedure TFXQDManager.Write;
- begin
- WriteBills;
- if FileFlag = 1 then
- WriteDrawingQty;
- end;
- end.
|