OtherMeasureOnceDm.pas 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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. procedure sdvOnceSetText(var Text: String; ARecord: TsdDataRecord;
  12. AValue: TsdValue; AColumn: TsdViewColumn; var Allow: Boolean);
  13. private
  14. FProjectData: TObject;
  15. function GetNewID: Integer;
  16. function GetNewSerialNo: Integer;
  17. public
  18. constructor Create(AProjectData: TObject);
  19. destructor Destroy; override;
  20. procedure Open(AConnection: TADOConnection);
  21. procedure Close;
  22. procedure Save;
  23. end;
  24. implementation
  25. uses
  26. ProjectData, UtilMethods, Variants;
  27. {$R *.dfm}
  28. { TOtherMeasureOnceData }
  29. procedure TOtherMeasureOnceData.Close;
  30. begin
  31. sddOnce.Close;
  32. end;
  33. constructor TOtherMeasureOnceData.Create(AProjectData: TObject);
  34. begin
  35. inherited Create(nil);
  36. FProjectData := AProjectData;
  37. end;
  38. destructor TOtherMeasureOnceData.Destroy;
  39. begin
  40. inherited;
  41. end;
  42. function TOtherMeasureOnceData.GetNewID: Integer;
  43. var
  44. idx: TsdIndex;
  45. begin
  46. idx := sddOnce.FindIndex('idxID');
  47. if idx.RecordCount > 0 then
  48. Result := idx.Records[idx.RecordCount - 1].ValueByName('ID').AsInteger + 1
  49. else
  50. Result := 1;
  51. end;
  52. function TOtherMeasureOnceData.GetNewSerialNo: Integer;
  53. var
  54. idx: TsdIndex;
  55. begin
  56. idx := sddOnce.FindIndex('idxSerial');
  57. if idx.RecordCount > 0 then
  58. Result := idx.Records[idx.RecordCount - 1].ValueByName('SerialNo').AsInteger + 1
  59. else
  60. Result := 1;
  61. end;
  62. procedure TOtherMeasureOnceData.Open(AConnection: TADOConnection);
  63. begin
  64. sdpOnce.Connection := AConnection;
  65. sddOnce.Open;
  66. if not Assigned(sddOnce.FindIndex('idxID')) then
  67. sddOnce.AddIndex('idxID', 'ID');
  68. if not Assigned(sddOnce.FindIndex('idxSerial')) then
  69. sddOnce.AddIndex('idxSerial', 'SerialNo');
  70. sdvOnce.Open;
  71. sdvOnce.IndexName := 'idxSerial';
  72. end;
  73. procedure TOtherMeasureOnceData.Save;
  74. begin
  75. sddOnce.Save;
  76. end;
  77. procedure TOtherMeasureOnceData.sddOnceAfterAddRecord(
  78. ARecord: TsdDataRecord);
  79. begin
  80. ARecord.ValueByName('ID').AsInteger := GetNewID;
  81. ARecord.ValueByName('SerialNo').AsInteger := GetNewSerialNo;
  82. ARecord.ValueByName('CreatePhaseID').AsInteger := TProjectData(FProjectData).PhaseIndex;
  83. end;
  84. procedure TOtherMeasureOnceData.sdvOnceSetText(var Text: String;
  85. ARecord: TsdDataRecord; AValue: TsdValue; AColumn: TsdViewColumn;
  86. var Allow: Boolean);
  87. begin
  88. if SameText(AColumn.FieldName, 'Code') then
  89. begin
  90. if (Text = '') then
  91. begin
  92. if (ARecord.ValueByName('Name').AsString = '') then
  93. DataSetErrorMessage(Allow, '编号和名称不可同时为空。');
  94. if (ARecord.ValueByName('Code').AsString = '') and (ARecord.ValueByName('Name').AsString = '') then
  95. sddOnce.Remove(ARecord);
  96. end;
  97. end
  98. else if SameText(AColumn.FieldName, 'Name') then
  99. begin
  100. if (Text = '') then
  101. begin
  102. if (ARecord.ValueByName('Code').AsString = '') then
  103. DataSetErrorMessage(Allow, '编号和名称不可同时为空。');
  104. if(ARecord.ValueByName('Code').AsString = '') and (ARecord.ValueByName('Name').AsString = '') then
  105. sddOnce.Remove(ARecord);
  106. end;
  107. end
  108. else
  109. begin
  110. if (ARecord.ValueByName('Code').AsString = '') and (ARecord.ValueByName('Name').AsString = '') then
  111. begin
  112. DataSetErrorMessage(Allow, '编号、名称不可同时为空,请先填写编号或名称,再填写其他信息。');
  113. sddOnce.Remove(AValue.Owner);
  114. end;
  115. end;
  116. end;
  117. end.