Browse Source

* Fixed bug #8209

git-svn-id: trunk@6566 -
joost 18 years ago
parent
commit
c9a2067b61
3 changed files with 21 additions and 15 deletions
  1. 1 0
      fcl/db/bufdataset.pp
  2. 19 14
      fcl/db/dataset.inc
  3. 1 1
      fcl/db/db.pp

+ 1 - 0
fcl/db/bufdataset.pp

@@ -847,6 +847,7 @@ Var tmpRecBuffer : PBufRecLinkItem;
     NullMask     : pbyte;
     NullMask     : pbyte;
 
 
 begin
 begin
+  inherited InternalPost;
   if assigned(FUpdateBlobBuffers) then for i:=0 to length(FUpdateBlobBuffers)-1 do
   if assigned(FUpdateBlobBuffers) then for i:=0 to length(FUpdateBlobBuffers)-1 do
    if assigned(FUpdateBlobBuffers[i]) and (FUpdateBlobBuffers[i]^.FieldNo>0) then
    if assigned(FUpdateBlobBuffers[i]) and (FUpdateBlobBuffers[i]^.FieldNo>0) then
     begin
     begin

+ 19 - 14
fcl/db/dataset.inc

@@ -924,6 +924,25 @@ begin
     ShowException(ExceptObject,ExceptAddr);
     ShowException(ExceptObject,ExceptAddr);
 end;
 end;
 
 
+procedure TDataSet.InternalPost;
+
+  Procedure Checkrequired;
+
+  Var I : longint;
+
+  begin
+    For I:=0 to FFieldList.Count-1 do
+      With FFieldList[i] do
+        // Required fields that are NOT autoinc !! Autoinc cannot be set !!
+        if Required and not ReadOnly and
+           (FieldKind=fkData) and Not (DataType=ftAutoInc) and IsNull then
+          DatabaseErrorFmt(SNeedField,[DisplayName],Self);
+  end;
+
+begin
+  Checkrequired;
+end;
+
 procedure TDataSet.SetUniDirectional(const Value: Boolean);
 procedure TDataSet.SetUniDirectional(const Value: Boolean);
 begin
 begin
   FIsUniDirectional := Value;
   FIsUniDirectional := Value;
@@ -1878,19 +1897,6 @@ end;
 
 
 Procedure TDataset.Post;
 Procedure TDataset.Post;
 
 
-  Procedure Checkrequired;
-
-    Var I : longint;
-
-  begin
-    For I:=0 to FFieldList.Count-1 do
-      With FFieldList[i] do
-        // Required fields that are NOT autoinc !! Autoinc cannot be set !!
-        if Required and not ReadOnly and
-           (FieldKind=fkData) and Not (DataType=ftAutoInc) and IsNull then
-          DatabaseErrorFmt(SNeedField,[DisplayName],Self);
-  end;
-
 begin
 begin
   if State in [dsEdit,dsInsert] then
   if State in [dsEdit,dsInsert] then
     begin
     begin
@@ -1899,7 +1905,6 @@ begin
 {$ifdef dsdebug}
 {$ifdef dsdebug}
     writeln ('Post: checking required fields');
     writeln ('Post: checking required fields');
 {$endif}
 {$endif}
-    CheckRequired;
     DoBeforePost;
     DoBeforePost;
     If Not TryDoing(@InternalPost,OnPostError) then exit;
     If Not TryDoing(@InternalPost,OnPostError) then exit;
     cursorposchanged;
     cursorposchanged;

+ 1 - 1
fcl/db/db.pp

@@ -1131,7 +1131,7 @@ type
     procedure InternalInitRecord(Buffer: PChar); virtual; abstract;
     procedure InternalInitRecord(Buffer: PChar); virtual; abstract;
     procedure InternalLast; virtual; abstract;
     procedure InternalLast; virtual; abstract;
     procedure InternalOpen; virtual; abstract;
     procedure InternalOpen; virtual; abstract;
-    procedure InternalPost; virtual; abstract;
+    procedure InternalPost; virtual;
     procedure InternalSetToRecord(Buffer: PChar); virtual; abstract;
     procedure InternalSetToRecord(Buffer: PChar); virtual; abstract;
     function IsCursorOpen: Boolean; virtual; abstract;
     function IsCursorOpen: Boolean; virtual; abstract;
     procedure SetBookmarkFlag(Buffer: PChar; Value: TBookmarkFlag); virtual; abstract;
     procedure SetBookmarkFlag(Buffer: PChar; Value: TBookmarkFlag); virtual; abstract;