123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- unit ProjectGLDm;
- interface
- uses
- SysUtils, Classes, sdDB, sdProvider, ADODB;
- type
- TProjectGLData = class(TDataModule)
- sdpProjectGL: TsdADOProvider;
- sddProjectGL: TsdDataSet;
- sdvProjectGL: TsdDataView;
- procedure sddProjectGLAfterAddRecord(ARecord: TsdDataRecord);
- procedure sddProjectGLBeforeValueChange(AValue: TsdValue;
- const NewValue: Variant; var Allow: Boolean);
- private
- FProjectData: TObject;
- function CheckSameCode(ACode: Integer): Boolean;
- procedure SaveGLPrice;
- public
- constructor Create(AProjectData: TObject);
- destructor Destroy; override;
- procedure Open(AConnection: TADOConnection);
- procedure Save;
- procedure LoadCurPhaseInfoPrice;
- property ProjectData: TObject read FProjectData write FProjectData;
- end;
- implementation
- uses
- ProjectData, UtilMethods, DB, Variants;
- {$R *.dfm}
- { TProjectGLData }
- function TProjectGLData.CheckSameCode(ACode: Integer): Boolean;
- var
- Rec: TsdDataRecord;
- begin
- Rec := sddProjectGL.FindKey('idxCode', ACode);
- Result := Assigned(Rec);
- end;
- constructor TProjectGLData.Create(AProjectData: TObject);
- begin
- inherited Create(nil);
- FProjectData := AProjectData;
- end;
- destructor TProjectGLData.Destroy;
- begin
- inherited;
- end;
- procedure TProjectGLData.LoadCurPhaseInfoPrice;
- const
- sSelectSql = 'Select * From GLPrice Where PhaseID = %d';
- var
- sSql: string;
- vQuery: TADOQuery;
- procedure LoadInfoPrice;
- var
- Rec: TsdDataRecord;
- begin
- vQuery.First;
- while not vQuery.Eof do
- begin
- Rec := sddProjectGL.FindKey('idxID', vQuery.FieldByName('GLID').AsInteger);
- Rec.ValueByName('InfoPrice').AsFloat := vQuery.FieldByName('InfoPrice').AsFloat;
- Rec.ValueByName('InfoDate').AsString := vQuery.FieldByName('InfoDate').AsVariant;
- vQuery.Next;
- end;
- end;
- begin
- sddProjectGL.BeginUpdate;
- vQuery := TADOQuery.Create(nil);
- try
- vQuery.Connection := sdpProjectGL.Connection;
- sSql := Format(sSql, [TProjectData(FProjectData).PhaseIndex]);
- vQuery.SQL.Clear;
- vQuery.SQL.Add(sSql);
- vQuery.ExecSQL;
- LoadInfoPrice;
- finally
- vQuery.Free;
- sddProjectGL.EndUpdate;
- end;
- end;
- procedure TProjectGLData.Open(AConnection: TADOConnection);
- begin
- sdpProjectGL.Connection := AConnection;
- sddProjectGL.Open;
- if not Assigned(sddProjectGL.IndexList.FindByName('idxID')) then
- sddProjectGL.AddIndex('idxID', 'ID');
- if not Assigned(sddProjectGL.IndexList.FindByName('idxCode')) then
- sddProjectGL.AddIndex('idxCode', 'Code');
- sdvProjectGL.Open;
- sdvProjectGL.IndexName := 'idxCode';
- end;
- procedure TProjectGLData.Save;
- begin
- sddProjectGL.Save;
- with TProjectData(FProjectData) do
- if Assigned(PhaseData) and not PhaseData.StageDataReadOnly and (PhaseData.StageCount > 1) then
- SaveGLPrice;
- end;
- procedure TProjectGLData.SaveGLPrice;
- const
- sDeleteSql = 'Delete From GLPrice Where PhaseID = %d';
- const
- sInsertSql = 'Insert Into GLPrice'+
- ' Select ID As GLID, %d As PhaseID, InfoPrice, InfoDate' +
- ' From ProjectGL';
- var
- vQuery: TADOQuery;
- iPhaseID: Integer;
- sSql: String;
- begin
- iPhaseID := TProjectData(FProjectData).ProjProperties.PhaseCount;
- vQuery := TADOQuery.Create(nil);
- try
- vQuery.Connection := sdpProjectGL.Connection;
- sSql := Format(sDeleteSql, [iPhaseID]);
- vQuery.SQL.Clear;
- vQuery.SQL.Add(sSql);
- vQuery.ExecSQL;
- sSql := Format(sInsertSql, [iPhaseID]);
- vQuery.SQL.Clear;
- vQuery.SQL.Add(sSql);
- vQuery.ExecSQL;
- finally
- vQuery.Free;
- end;
- end;
- procedure TProjectGLData.sddProjectGLAfterAddRecord(
- ARecord: TsdDataRecord);
- begin
- ARecord.ValueByName('ID').AsInteger := GetsdDataSetNewID(sddProjectGL, 'idxID');
- ARecord.ValueByName('CreatePhaseID').AsInteger := TProjectData(FProjectData).ProjProperties.PhaseCount;
- ARecord.ValueByName('CreateStageID').AsInteger := TProjectData(FProjectData).ProjProperties.AuditStatus;
- end;
- procedure TProjectGLData.sddProjectGLBeforeValueChange(AValue: TsdValue;
- const NewValue: Variant; var Allow: Boolean);
- begin
- if SameText(AValue.FieldName, 'Code') then
- begin
- Allow := False;
- if VarIsNull(NewValue) then
- ErrorMessage('编号不可为空。')
- else if CheckSameCode(NewValue) then
- ErrorMessage('编号不可重复。')
- else
- Allow := True;
- end
- else if not(SameText(AValue.FieldName, 'ID') or
- SameText(AValue.FieldName, 'CreatePhaseID') or
- SameText(AValue.FieldName, 'CreateStageID')) then
- begin
- Allow := False;
- if (AValue.Owner.ValueByName('Code').AsString = '') then
- ErrorMessage('编号不可为空,请先填写编号,再填写其他信息。')
- else
- Allow := True;
- end;
- end;
- end.
|