OtherMeasureOnceDm.pas 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. unit OtherMeasureOnceDm;
  2. interface
  3. uses
  4. SysUtils, Classes, sdDB, sdProvider, ADODB;
  5. type
  6. TOtherMeasureOnceData = class(TDataModule)
  7. sdpOnce: TsdADOProvider;
  8. sddOnce: TsdDataSet;
  9. sdvOnce: TsdDataView;
  10. procedure sddOnceAfterAddRecord(ARecord: TsdDataRecord);
  11. private
  12. FProjectData: TObject;
  13. function GetNewID: Integer;
  14. function GetNewSerialNo: Integer;
  15. public
  16. constructor Create(AProjectData: TObject);
  17. destructor Destroy; override;
  18. procedure Open(AConnection: TADOConnection);
  19. procedure Close;
  20. procedure Save;
  21. end;
  22. implementation
  23. uses
  24. ProjectData;
  25. {$R *.dfm}
  26. { TOtherMeasureOnceData }
  27. procedure TOtherMeasureOnceData.Close;
  28. begin
  29. sddOnce.Close;
  30. end;
  31. constructor TOtherMeasureOnceData.Create(AProjectData: TObject);
  32. begin
  33. inherited Create(nil);
  34. FProjectData := AProjectData;
  35. end;
  36. destructor TOtherMeasureOnceData.Destroy;
  37. begin
  38. inherited;
  39. end;
  40. function TOtherMeasureOnceData.GetNewID: Integer;
  41. var
  42. idx: TsdIndex;
  43. begin
  44. idx := sddOnce.FindIndex('idxID');
  45. if idx.RecordCount > 0 then
  46. Result := idx.Records[idx.RecordCount - 1].ValueByName('ID').AsInteger + 1
  47. else
  48. Result := 1;
  49. end;
  50. function TOtherMeasureOnceData.GetNewSerialNo: Integer;
  51. var
  52. idx: TsdIndex;
  53. begin
  54. idx := sddOnce.FindIndex('idxSerial');
  55. if idx.RecordCount > 0 then
  56. Result := idx.Records[idx.RecordCount - 1].ValueByName('SerialNo').AsInteger + 1
  57. else
  58. Result := 1;
  59. end;
  60. procedure TOtherMeasureOnceData.Open(AConnection: TADOConnection);
  61. begin
  62. sdpOnce.Connection := AConnection;
  63. sddOnce.Open;
  64. if not Assigned(sddOnce.FindIndex('idxID')) then
  65. sddOnce.AddIndex('idxID', 'ID');
  66. if not Assigned(sddOnce.FindIndex('idxSerial')) then
  67. sddOnce.AddIndex('idxSerial', 'SerialNo');
  68. sdvOnce.Open;
  69. sdvOnce.IndexName := 'idxSerial';
  70. end;
  71. procedure TOtherMeasureOnceData.Save;
  72. begin
  73. sddOnce.Save;
  74. end;
  75. procedure TOtherMeasureOnceData.sddOnceAfterAddRecord(
  76. ARecord: TsdDataRecord);
  77. begin
  78. ARecord.ValueByName('ID').AsInteger := GetNewID;
  79. ARecord.ValueByName('SerialNo').AsInteger := GetNewSerialNo;
  80. ARecord.ValueByName('CreatePhaseID').AsInteger := TProjectData(FProjectData).PhaseIndex;
  81. end;
  82. end.