diff --git a/fcl/db/interbase/interbase.pp b/fcl/db/interbase/interbase.pp index 105cf412e2..44fd91ffa4 100644 --- a/fcl/db/interbase/interbase.pp +++ b/fcl/db/interbase/interbase.pp @@ -52,6 +52,8 @@ type procedure SetDBDialect; procedure SetTransaction(Value : TIBTransaction); protected + procedure Notification(AComponent: TComponent; + Operation: TOperation); override; function GetHandle : pointer; virtual; { This procedure makes connection to Interbase server internally. Is visible only by descendants, in application programming @@ -180,7 +182,7 @@ type property AccessMode: TAccessMode read FAccessMode write FAccessMode default amReadWrite; property IsolationLevel: TIsolationLevel - read FIsolationLevel write FIsolationLevel default ilReadCommitted; + read FIsolationLevel write FIsolationLevel default ilConcurrent; property LockResolution: TLockResolution read FLockResolution write FLockResolution default lrWait; property TableReservation: TTableReservation @@ -383,22 +385,24 @@ end; procedure TIBDatabase.SetTransaction(Value : TIBTransaction); begin - if FTransaction = nil then + if Value <> FTransaction then begin - FTransaction := Value; - if Assigned(FTransaction) then - FTransaction.Database := Self; - exit; - end; - - if (Value <> FTransaction) and (Value <> nil) then - if (not FTransaction.Active) then + if FTransaction <> nil then + begin + if FTransaction.Active then + raise EInterBaseError.Create( + 'Cannot assign transaction while old transaction active!'); + FTransaction.RemoveFreeNotification(Self); + end; + + FTransaction := Value; + + if FTransaction <> nil then begin - FTransaction := Value; FTransaction.Database := Self; - end - else - raise EInterBaseError.Create('Cannot assign transaction while old transaction active!'); + FTransaction.FreeNotification(Self); + end; + end; end; function TIBDatabase.GetHandle: pointer; @@ -468,6 +472,14 @@ begin inherited Destroy; end; +procedure TIBDatabase.Notification(AComponent: TComponent; + Operation: TOperation); +begin + inherited; + if (AComponent = FTransaction) and (Operation = opRemove) then + FTransaction := nil; +end; + { TIBTransaction } procedure TIBTransaction.SetActive(Value : boolean); @@ -573,7 +585,7 @@ end; constructor TIBTransaction.Create(AOwner : TComponent); begin inherited Create(AOwner); - FIsolationLevel := ilReadCommitted; + FIsolationLevel := ilConcurrent; end; destructor TIBTransaction.Destroy; @@ -990,7 +1002,7 @@ begin for x := 0 to FSQLDA^.SQLD - 1 do begin {$R-} - if (Field.FieldName = FSQLDA^.SQLVar[x].SQLName) then + if (Field.FieldName = FSQLDA^.SQLVar[x].AliasName) then begin Result := not PFieldDataPrefix(CurrBuff)^.IsNull; @@ -1138,7 +1150,7 @@ begin begin TranslateFldType(FSQLDA^.SQLVar[x].SQLType, FSQLDA^.SQLVar[x].SQLLen, lenset, TransType, TransLen); - TFieldDef.Create(FieldDefs, FSQLDA^.SQLVar[x].SQLName, TransType, + TFieldDef.Create(FieldDefs, FSQLDA^.SQLVar[x].AliasName, TransType, TransLen, False, (x + 1)); end; {$R+} @@ -1247,7 +1259,10 @@ end. { $Log$ - Revision 1.16 2005-03-17 09:02:17 michael + Revision 1.17 2005-03-23 08:35:05 michael + + Patch from Michalis Kamburelis to correct transactions + + Revision 1.16 2005/03/17 09:02:17 michael + Patch from Michalis Kamburelis to fix TField.IsNull Revision 1.15 2005/02/14 17:13:12 peter