|
60 | 60 | SMinIndexes = 'The minimum amount of indexes is 1'; |
61 | 61 | SIndexNotFound = 'Index ''%s'' not found'; |
62 | 62 | SUniDirectional = 'Operation cannot be performed on an unidirectional dataset'; |
| 63 | + SFieldRequired = 'Field ''%s'' must have a value'; |
63 | 64 |
|
64 | 65 | Type |
65 | 66 | TCompareFunc = Function(subValue, |
@@ -648,6 +649,7 @@ TDoubleLinkedBufIndex = class(TRESTDWIndex) |
648 | 649 | Procedure InternalDelete; Override; |
649 | 650 | Procedure InternalPost; Override; |
650 | 651 | Procedure InternalClose; Override; |
| 652 | + procedure CheckRequiredFields; |
651 | 653 | Procedure InternalHandleException; Override; |
652 | 654 | Procedure InternalInitFieldDefs; Override; |
653 | 655 | Procedure InternalOpen; Override; |
@@ -817,6 +819,7 @@ TDoubleLinkedBufIndex = class(TRESTDWIndex) |
817 | 819 | Property IndexName : String Read GetIndexName Write SetIndexName; |
818 | 820 | Property IndexFieldNames : String Read GetIndexFieldNames Write SetIndexFieldNames; |
819 | 821 | Property MaxIndexesCount : Integer Read FMaxIndexesCount Write SetMaxIndexesCount default 2; |
| 822 | + Property Filter; |
820 | 823 | Property BeforeOpen; |
821 | 824 | Property AfterOpen; |
822 | 825 | Property BeforeClose; |
@@ -972,9 +975,11 @@ TDoubleLinkedBufIndex = class(TRESTDWIndex) |
972 | 975 | Private |
973 | 976 | vSize, |
974 | 977 | vPrecision : Integer; |
| 978 | + Procedure SetAsExtended(Const AValue : Extended); |
975 | 979 | Protected |
976 | | - Function GetAsString : String; Override; |
977 | | - Function GetAsVariant : Variant; Override; |
| 980 | + Function GetAsString : String; Override; |
| 981 | + Procedure SetAsString (Const AValue : String); Override; |
| 982 | +// Function GetAsVariant : Variant; Override; |
978 | 983 | Public |
979 | 984 | Constructor Create(AOwner: TComponent); override; |
980 | 985 | Property Size : Integer Read vSize Write vSize; |
@@ -1423,6 +1428,26 @@ TMemBookmarkInfo = record |
1423 | 1428 | vPrecision := 8; |
1424 | 1429 | End; |
1425 | 1430 |
|
| 1431 | +{$IFDEF FPC} |
| 1432 | +Procedure TExtendedField.SetAsExtended(Const AValue : Extended); |
| 1433 | +Begin |
| 1434 | + SetData(@AValue, True); |
| 1435 | +End; |
| 1436 | + |
| 1437 | +Procedure TExtendedField.SetAsString(Const AValue : String); |
| 1438 | +Var |
| 1439 | + x : Extended; |
| 1440 | +Begin |
| 1441 | + If AValue = '' Then |
| 1442 | + Clear |
| 1443 | + Else |
| 1444 | + Begin |
| 1445 | + x := StrToFloat(AValue); |
| 1446 | + SetAsExtended(x); |
| 1447 | + End; |
| 1448 | +End; |
| 1449 | +{$ENDIF} |
| 1450 | + |
1426 | 1451 | Function TExtendedField.GetAsString: string; |
1427 | 1452 | Var |
1428 | 1453 | x : Extended; |
@@ -1515,13 +1540,6 @@ TMemBookmarkInfo = record |
1515 | 1540 | End; |
1516 | 1541 | {$ENDIF} |
1517 | 1542 |
|
1518 | | -{$IFDEF FPC} |
1519 | | -Function TExtendedField.GetAsVariant : Variant; |
1520 | | -Begin |
1521 | | - Result := Extended(Value); //_RealSupportManager._VarFromReal(Value); |
1522 | | -End; |
1523 | | -{$ENDIF} |
1524 | | - |
1525 | 1543 | Function TRESTDWMTMemoryRecord.GetIndex: Integer; |
1526 | 1544 | Begin |
1527 | 1545 | // If FMemoryData <> nil then |
@@ -2699,8 +2717,9 @@ function TRESTDWMemTable.GetActiveRecBuf(var RecBuf: PRESTDWMTMemBuffer |
2699 | 2717 | End |
2700 | 2718 | Else If Field.datatype = ftExtended Then |
2701 | 2719 | Begin |
2702 | | - Move(aDataBytes[1], Pointer(@vLongDouble)^, SizeOf(DWLongDouble)); |
2703 | | - PExtended(Buffer)^ := vLongDouble; |
| 2720 | + If Length(TRESTDWBytes(Buffer)) = 0 Then |
| 2721 | + SetLength(TRESTDWBytes(Buffer), cLen); |
| 2722 | + Move(aDataBytes[1], Pointer(Buffer)^, SizeOf(DWLongDouble)); |
2704 | 2723 | End |
2705 | 2724 | Else |
2706 | 2725 | Begin |
@@ -3084,6 +3103,8 @@ procedure TRESTDWMemTable.InternalSetFieldData(Field : TField; |
3084 | 3103 | dwftFloat, |
3085 | 3104 | {$IFNDEF FPC} |
3086 | 3105 | dwftFMTBCD, |
| 3106 | + {$ELSE} |
| 3107 | + 45, |
3087 | 3108 | {$ENDIF} |
3088 | 3109 | dwftBCD, |
3089 | 3110 | dwftCurrency, |
@@ -5422,6 +5443,18 @@ procedure TRESTDWMemTable.InternalDelete; |
5422 | 5443 | End; |
5423 | 5444 | End; |
5424 | 5445 |
|
| 5446 | +procedure TRESTDWMemTable.CheckRequiredFields; |
| 5447 | +var |
| 5448 | + I: Integer; |
| 5449 | +begin |
| 5450 | + for I := 0 to Fields.Count - 1 do |
| 5451 | + if Fields[I].Required and not Fields[I].ReadOnly and (Fields[I].FieldKind = fkData) and Fields[I].IsNull then |
| 5452 | + begin |
| 5453 | + Fields[I].FocusControl; |
| 5454 | + DatabaseErrorFmt(SFieldRequired, [Fields[I].DisplayName]); |
| 5455 | + end; |
| 5456 | +end; |
| 5457 | + |
5425 | 5458 | procedure TRESTDWMemTable.InternalPost; |
5426 | 5459 | var |
5427 | 5460 | RecPos: Integer; |
|
0 commit comments