+ Patch from Joost Van der Sluis to fix transactions

This commit is contained in:
michael 2004-10-27 07:23:13 +00:00
parent 3f15c310d7
commit 951ace9dc2
11 changed files with 225 additions and 125 deletions

View File

@ -65,7 +65,7 @@ var i : integer;
begin begin
for i := 0 to FBRecordCount-1 do FreeRecord(FBBuffers[i]); for i := 0 to FBRecordCount-1 do FreeRecord(FBBuffers[i]);
freemem(FBBuffers); If FBRecordCount > 0 then freemem(FBBuffers);
FBRecordcount := 0; FBRecordcount := 0;
FBBuffercount := 0; FBBuffercount := 0;
FBCurrentrecord := -1; FBCurrentrecord := -1;

View File

@ -47,7 +47,7 @@ begin
begin begin
If Value then If Value then
begin begin
if csLoading in ComponentState then if csReading in ComponentState then
begin begin
FOpenAfterRead := true; FOpenAfterRead := true;
exit; exit;
@ -255,6 +255,20 @@ begin
end; end;
end; end;
Procedure TDBDataset.SetTransaction (Value : TDBTransaction);
begin
CheckInactive;
If Value<>FTransaction then
begin
If Assigned(FTransaction) then
FTransaction.UnregisterDataset(Self);
If Value<>Nil Then
Value.RegisterDataset(Self);
FTransaction:=Value;
end;
end;
Procedure TDBDataset.CheckDatabase; Procedure TDBDataset.CheckDatabase;
begin begin
@ -266,13 +280,13 @@ Destructor TDBDataset.Destroy;
begin begin
Database:=Nil; Database:=Nil;
Transaction:=Nil;
Inherited; Inherited;
end; end;
{ --------------------------------------------------------------------- { ---------------------------------------------------------------------
TDBTransaction TDBTransaction
---------------------------------------------------------------------} ---------------------------------------------------------------------}
Procedure TDBTransaction.SetDatabase (Value : TDatabase); Procedure TDBTransaction.SetDatabase (Value : TDatabase);
begin begin
@ -287,6 +301,13 @@ begin
end; end;
end; end;
constructor TDBTransaction.create(AOwner : TComponent);
begin
inherited create(AOwner);
FDatasets:=TList.Create;
end;
Procedure TDBTransaction.CheckDatabase; Procedure TDBTransaction.CheckDatabase;
begin begin
@ -294,17 +315,85 @@ begin
DatabaseError(SErrNoDatabaseAvailable,Self) DatabaseError(SErrNoDatabaseAvailable,Self)
end; end;
procedure TDBTransaction.CloseDataSets;
Var I : longint;
begin
If Assigned(FDatasets) then
begin
For I:=FDatasets.Count-1 downto 0 do
TDBDataset(FDatasets[i]).Close;
end;
end;
Destructor TDBTransaction.Destroy; Destructor TDBTransaction.Destroy;
begin begin
Database:=Nil; Database:=Nil;
RemoveDatasets;
FDatasets.Free;
Inherited; Inherited;
end; end;
procedure TDBTransaction.RemoveDataSets;
Var I : longint;
begin
If Assigned(FDatasets) then
For I:=FDataSets.Count-1 downto 0 do
TDBDataset(FDataSets[i]).Transaction:=Nil;
end;
Function TDBTransaction.GetDataSetCount : Longint;
begin
If Assigned(FDatasets) Then
Result:=FDatasets.Count
else
Result:=0;
end;
procedure TDBTransaction.UnRegisterDataset (DS : TDBDataset);
Var I : longint;
begin
I:=FDatasets.IndexOf(DS);
If I<>-1 then
FDatasets.Delete(I)
else
DatabaseErrorFmt(SNoDatasetRegistered,[DS.Name]);
end;
procedure TDBTransaction.RegisterDataset (DS : TDBDataset);
Var I : longint;
begin
I:=FDatasets.IndexOf(DS);
If I=-1 then
FDatasets.Add(DS)
else
DatabaseErrorFmt(SDatasetRegistered,[DS.Name]);
end;
Function TDBTransaction.GetDataset(Index : longint) : TDBDataset;
begin
If Assigned(FDatasets) then
Result:=TDBDataset(FDatasets[Index])
else
DatabaseError(SNoDatasets);
end;
{ {
$Log$ $Log$
Revision 1.6 2004-09-26 16:55:24 michael Revision 1.7 2004-10-27 07:23:13 michael
+ Patch from Joost Van der Sluis to fix transactions
Revision 1.6 2004/09/26 16:55:24 michael
* big patch from Joost van der Sluis * big patch from Joost van der Sluis
bufdataset.inc: bufdataset.inc:
fix getrecord (prior) fix getrecord (prior)

View File

@ -625,12 +625,6 @@ begin
//!! To be implemented //!! To be implemented
end; end;
Procedure TDataset.Loaded;
begin
//!! To be implemented
end;
Procedure TDataset.OpenCursor(InfoQuery: Boolean); Procedure TDataset.OpenCursor(InfoQuery: Boolean);
begin begin
@ -663,12 +657,26 @@ Procedure TDataset.SetActive (Value : Boolean);
begin begin
If Value<>Factive then If Value<>Factive then
If Value then If Value then
if csLoading in ComponentState then
begin
FOpenAfterRead := true;
exit;
end
else
DoInternalOpen DoInternalOpen
else else
DoInternalClose(True); DoInternalClose(True);
FActive:=Value; FActive:=Value;
end; end;
procedure TDataset.Loaded;
begin
inherited;
if FOpenAfterRead then SetActive(true);
end;
procedure TDataSet.RecalcBufListSize; procedure TDataSet.RecalcBufListSize;
var var
@ -1725,7 +1733,10 @@ end;
{ {
$Log$ $Log$
Revision 1.26 2004-10-16 09:27:23 michael Revision 1.27 2004-10-27 07:23:13 michael
+ Patch from Joost Van der Sluis to fix transactions
Revision 1.26 2004/10/16 09:27:23 michael
+ Fixed GotoBookMark (as suggested by Americo Luiz) + Fixed GotoBookMark (as suggested by Americo Luiz)
Revision 1.25 2004/10/10 14:25:21 michael Revision 1.25 2004/10/10 14:25:21 michael

View File

@ -67,6 +67,7 @@ type
TDataBase = Class; TDataBase = Class;
TDatasource = Class; TDatasource = Class;
TDatalink = Class; TDatalink = Class;
TDBTransaction = Class;
{ Exception classes } { Exception classes }
@ -773,6 +774,7 @@ type
TDataSet = class(TComponent) TDataSet = class(TComponent)
Private Private
FActive: Boolean; FActive: Boolean;
FOpenAfterRead : boolean;
FActiveRecord: Longint; FActiveRecord: Longint;
FAfterCancel: TDataSetNotifyEvent; FAfterCancel: TDataSetNotifyEvent;
FAfterClose: TDataSetNotifyEvent; FAfterClose: TDataSetNotifyEvent;
@ -849,6 +851,7 @@ type
procedure CalculateFields(Buffer: PChar); virtual; procedure CalculateFields(Buffer: PChar); virtual;
procedure CheckActive; virtual; procedure CheckActive; virtual;
procedure CheckInactive; virtual; procedure CheckInactive; virtual;
procedure Loaded; override;
procedure ClearBuffers; virtual; procedure ClearBuffers; virtual;
procedure ClearCalcFields(Buffer: PChar); virtual; procedure ClearCalcFields(Buffer: PChar); virtual;
procedure CloseBlob(Field: TField); virtual; procedure CloseBlob(Field: TField); virtual;
@ -896,7 +899,6 @@ type
procedure InternalCancel; virtual; procedure InternalCancel; virtual;
procedure InternalEdit; virtual; procedure InternalEdit; virtual;
procedure InternalRefresh; virtual; procedure InternalRefresh; virtual;
procedure Loaded; override;
procedure OpenCursor(InfoQuery: Boolean); virtual; procedure OpenCursor(InfoQuery: Boolean); virtual;
procedure RefreshInternalCalcFields(Buffer: PChar); virtual; procedure RefreshInternalCalcFields(Buffer: PChar); virtual;
procedure RestoreState(const Value: TDataSetState); procedure RestoreState(const Value: TDataSetState);
@ -1177,19 +1179,21 @@ type
property OnUpdateData: TNotifyEvent read FOnUpdateData write FOnUpdateData; property OnUpdateData: TNotifyEvent read FOnUpdateData write FOnUpdateData;
end; end;
{ TDBDataset } { TDBDataset }
TDBDatasetClass = Class of TDBDataset; TDBDatasetClass = Class of TDBDataset;
TDBDataset = Class(TDataset) TDBDataset = Class(TDataset)
Private Private
FDatabase : TDatabase; FDatabase : TDatabase;
FTransaction : TDBTransaction;
Protected Protected
Procedure SetDatabase (Value : TDatabase); virtual; Procedure SetDatabase (Value : TDatabase); virtual;
Procedure SetTransaction(Value : TDBTransaction); virtual;
Procedure CheckDatabase; Procedure CheckDatabase;
Public Public
Destructor destroy; override; Destructor destroy; override;
Property DataBase : TDatabase Read FDatabase Write SetDatabase; Property DataBase : TDatabase Read FDatabase Write SetDatabase;
Property Transaction : TDBTransaction Read FTransaction Write SetTransaction;
end; end;
{ TDBTransaction } { TDBTransaction }
@ -1198,16 +1202,23 @@ type
TDBTransaction = Class(TComponent) TDBTransaction = Class(TComponent)
Private Private
FDatabase : TDatabase; FDatabase : TDatabase;
FDataSets : TList;
Procedure SetDatabase (Value : TDatabase); Procedure SetDatabase (Value : TDatabase);
Function GetDataSetCount : Longint;
Function GetDataset(Index : longint) : TDBDataset;
procedure RegisterDataset (DS : TDBDataset);
procedure UnRegisterDataset (DS : TDBDataset);
procedure RemoveDataSets;
Protected Protected
Procedure CheckDatabase; Procedure CheckDatabase;
Public
procedure EndTransaction; virtual; abstract; procedure EndTransaction; virtual; abstract;
Public
constructor Create(AOwner: TComponent); override;
Destructor destroy; override; Destructor destroy; override;
procedure CloseDataSets;
Property DataBase : TDatabase Read FDatabase Write SetDatabase; Property DataBase : TDatabase Read FDatabase Write SetDatabase;
end; end;
{ TDatabase } { TDatabase }
TLoginEvent = procedure(Database: TDatabase; TLoginEvent = procedure(Database: TDatabase;
@ -1572,7 +1583,10 @@ end.
{ {
$Log$ $Log$
Revision 1.26 2004-10-10 14:45:51 michael Revision 1.27 2004-10-27 07:23:13 michael
+ Patch from Joost Van der Sluis to fix transactions
Revision 1.26 2004/10/10 14:45:51 michael
+ Use of dbconst for resource strings + Use of dbconst for resource strings
Revision 1.25 2004/10/10 14:25:21 michael Revision 1.25 2004/10/10 14:25:21 michael

View File

@ -32,6 +32,7 @@ Const
SErrNoDatabaseAvailable = 'Invalid operation: Not attached to database'; SErrNoDatabaseAvailable = 'Invalid operation: Not attached to database';
SErrNoSelectStatement = 'Cannot open a non-select statement'; SErrNoSelectStatement = 'Cannot open a non-select statement';
SErrNoStatement = 'SQL statement not set'; SErrNoStatement = 'SQL statement not set';
SErrTransAlreadyActive = 'Transaction already active';
SErrTransactionnSet = 'Transaction not set'; SErrTransactionnSet = 'Transaction not set';
SFieldNotFound = 'Field not found : "%s"'; SFieldNotFound = 'Field not found : "%s"';
SInactiveDataset = 'Operation cannot be performed on an inactive dataset'; SInactiveDataset = 'Operation cannot be performed on an inactive dataset';
@ -65,7 +66,10 @@ end.
{ {
$Log$ $Log$
Revision 1.2 2004-10-16 09:20:25 michael Revision 1.3 2004-10-27 07:23:13 michael
+ Patch from Joost Van der Sluis to fix transactions
Revision 1.2 2004/10/16 09:20:25 michael
+ Moved resourcestrings to dbconst + Moved resourcestrings to dbconst
Revision 1.1 2004/10/10 14:45:51 michael Revision 1.1 2004/10/10 14:45:51 michael

View File

@ -69,7 +69,7 @@ type
function GetTransactionHandle(trans : TSQLHandle): pointer; override; function GetTransactionHandle(trans : TSQLHandle): pointer; override;
function Commit(trans : TSQLHandle) : boolean; override; function Commit(trans : TSQLHandle) : boolean; override;
function RollBack(trans : TSQLHandle) : boolean; override; function RollBack(trans : TSQLHandle) : boolean; override;
function StartTransaction(trans : TSQLHandle) : boolean; override; function StartdbTransaction(trans : TSQLHandle) : boolean; override;
procedure CommitRetaining(trans : TSQLHandle); override; procedure CommitRetaining(trans : TSQLHandle); override;
procedure RollBackRetaining(trans : TSQLHandle); override; procedure RollBackRetaining(trans : TSQLHandle); override;
@ -177,7 +177,7 @@ begin
else result := true; else result := true;
end; end;
function TIBConnection.StartTransaction(trans : TSQLHandle) : boolean; function TIBConnection.StartDBTransaction(trans : TSQLHandle) : boolean;
var var
DBHandle : pointer; DBHandle : pointer;
tr : TIBTrans; tr : TIBTrans;

View File

@ -56,7 +56,7 @@ Type
function GetTransactionHandle(trans : TSQLHandle): pointer; override; function GetTransactionHandle(trans : TSQLHandle): pointer; override;
function Commit(trans : TSQLHandle) : boolean; override; function Commit(trans : TSQLHandle) : boolean; override;
function RollBack(trans : TSQLHandle) : boolean; override; function RollBack(trans : TSQLHandle) : boolean; override;
function StartTransaction(trans : TSQLHandle) : boolean; override; function StartdbTransaction(trans : TSQLHandle) : boolean; override;
procedure CommitRetaining(trans : TSQLHandle); override; procedure CommitRetaining(trans : TSQLHandle); override;
procedure RollBackRetaining(trans : TSQLHandle); override; procedure RollBackRetaining(trans : TSQLHandle); override;
Public Public
@ -670,7 +670,7 @@ begin
// Do nothing // Do nothing
end; end;
function TMySQLConnection.StartTransaction(trans: TSQLHandle): boolean; function TMySQLConnection.StartdbTransaction(trans: TSQLHandle): boolean;
begin begin
// Do nothing // Do nothing
end; end;

View File

@ -48,7 +48,7 @@ type
function RollBack(trans : TSQLHandle) : boolean; override; function RollBack(trans : TSQLHandle) : boolean; override;
function Commit(trans : TSQLHandle) : boolean; override; function Commit(trans : TSQLHandle) : boolean; override;
procedure CommitRetaining(trans : TSQLHandle); override; procedure CommitRetaining(trans : TSQLHandle); override;
function StartTransaction(trans : TSQLHandle) : boolean; override; function StartdbTransaction(trans : TSQLHandle) : boolean; override;
procedure RollBackRetaining(trans : TSQLHandle); override; procedure RollBackRetaining(trans : TSQLHandle); override;
published published
property DatabaseName; property DatabaseName;
@ -133,8 +133,7 @@ begin
end; end;
end; end;
function TPQConnection.StartdbTransaction(trans : TSQLHandle) : boolean;
function TPQConnection.StartTransaction(trans : TSQLHandle) : boolean;
var var
res : PPGresult; res : PPGresult;
tr : TPQTrans; tr : TPQTrans;
@ -425,7 +424,6 @@ begin
{$R-} {$R-}
with cursor as TPQCursor do for x := 0 to PQnfields(res)-1 do with cursor as TPQCursor do for x := 0 to PQnfields(res)-1 do
begin begin
// writeln('Getdata:' + pqgetvalue(res,0,x));
i := PQfsize(res, x); i := PQfsize(res, x);
buffer[0] := chr(pqgetisnull(res,0,x)); buffer[0] := chr(pqgetisnull(res,0,x));
inc(buffer); inc(buffer);

View File

@ -79,7 +79,7 @@ type
function GetTransactionHandle(trans : TSQLHandle): pointer; virtual; abstract; function GetTransactionHandle(trans : TSQLHandle): pointer; virtual; abstract;
function Commit(trans : TSQLHandle) : boolean; virtual; abstract; function Commit(trans : TSQLHandle) : boolean; virtual; abstract;
function RollBack(trans : TSQLHandle) : boolean; virtual; abstract; function RollBack(trans : TSQLHandle) : boolean; virtual; abstract;
function StartTransaction(trans : TSQLHandle) : boolean; virtual; abstract; function StartdbTransaction(trans : TSQLHandle) : boolean; virtual; abstract;
procedure CommitRetaining(trans : TSQLHandle); virtual; abstract; procedure CommitRetaining(trans : TSQLHandle); virtual; abstract;
procedure RollBackRetaining(trans : TSQLHandle); virtual; abstract; procedure RollBackRetaining(trans : TSQLHandle); virtual; abstract;
public public
@ -112,23 +112,25 @@ type
FTrans : TSQLHandle; FTrans : TSQLHandle;
FAction : TCommitRollbackAction; FAction : TCommitRollbackAction;
FActive : boolean; FActive : boolean;
FOpenAfterRead : boolean;
procedure SetActive(Value : boolean); procedure SetActive(Value : boolean);
protected protected
function GetHandle : Pointer; virtual; function GetHandle : Pointer; virtual;
procedure Loaded; override;
public public
procedure EndTransaction; override;
procedure Commit; virtual; procedure Commit; virtual;
procedure CommitRetaining; virtual; procedure CommitRetaining; virtual;
procedure Rollback; virtual; procedure Rollback; virtual;
procedure RollbackRetaining; virtual; procedure RollbackRetaining; virtual;
procedure StartTransaction; procedure StartTransaction; virtual;
constructor Create(AOwner : TComponent); override; constructor Create(AOwner : TComponent); override;
destructor Destroy; override; destructor Destroy; override;
property Handle: Pointer read GetHandle; property Handle: Pointer read GetHandle;
procedure EndTransaction; override;
published published
property Action : TCommitRollbackAction read FAction write FAction; property Action : TCommitRollbackAction read FAction write FAction;
property Active : boolean read FActive write SetActive; property Active : boolean read FActive write setactive;
property Database; property Database;
end; end;
@ -138,13 +140,11 @@ type
private private
FCursor : TSQLHandle; FCursor : TSQLHandle;
FOpen : Boolean; FOpen : Boolean;
FTransaction : TSQLTransaction;
FSQL : TStrings; FSQL : TStrings;
FIsEOF : boolean; FIsEOF : boolean;
FLoadingFieldDefs : boolean; FLoadingFieldDefs : boolean;
FRecordSize : Integer; FRecordSize : Integer;
procedure SetTransaction(Value : TSQLTransaction);
procedure FreeStatement; procedure FreeStatement;
procedure PrepareStatement; procedure PrepareStatement;
procedure FreeFldBuffers; procedure FreeFldBuffers;
@ -209,7 +209,7 @@ type
property AutoCalcFields; property AutoCalcFields;
property Database; property Database;
property Transaction : TSQLTransaction read FTransaction write SetTransaction; property Transaction;
property SQL : TStrings read FSQL write FSQL; property SQL : TStrings read FSQL write FSQL;
end; end;
@ -241,8 +241,9 @@ end;
procedure TSQLConnection.DoInternalConnect; procedure TSQLConnection.DoInternalConnect;
begin begin
if Connected then // Where is this for?!?!
Close; // if Connected then
// Close;
end; end;
procedure TSQLConnection.DoInternalDisconnect; procedure TSQLConnection.DoInternalDisconnect;
@ -251,11 +252,6 @@ end;
destructor TSQLConnection.Destroy; destructor TSQLConnection.Destroy;
begin begin
if FTransaction <> nil then
begin
FTransaction.Active := False;
FTransaction.Database := nil;
end;
inherited Destroy; inherited Destroy;
end; end;
@ -283,11 +279,30 @@ end;
procedure TSQLTransaction.SetActive(Value : boolean); procedure TSQLTransaction.SetActive(Value : boolean);
begin begin
if FActive and (not Value) then if FActive and (not Value) then
Rollback EndTransaction
else if (not FActive) and Value then else if (not FActive) and Value then
if csLoading in ComponentState then
begin
FOpenAfterRead := true;
exit;
end
else
StartTransaction; StartTransaction;
end; end;
procedure TSQLTransaction.Loaded;
begin
inherited;
if FOpenAfterRead then SetActive(true);
end;
procedure TSQLTransaction.EndTransaction;
begin
rollback;
end;
function TSQLTransaction.GetHandle: pointer; function TSQLTransaction.GetHandle: pointer;
begin begin
Result := (Database as tsqlconnection).GetTransactionHandle(FTrans); Result := (Database as tsqlconnection).GetTransactionHandle(FTrans);
@ -296,9 +311,13 @@ end;
procedure TSQLTransaction.Commit; procedure TSQLTransaction.Commit;
begin begin
if not FActive then Exit; if not FActive then Exit;
if (Database as tsqlconnection).commit(FTrans) then FActive := false; closedatasets;
if (Database as tsqlconnection).commit(FTrans) then
begin
FActive := false;
FTrans.free; FTrans.free;
end; end;
end;
procedure TSQLTransaction.CommitRetaining; procedure TSQLTransaction.CommitRetaining;
begin begin
@ -309,13 +328,12 @@ end;
procedure TSQLTransaction.Rollback; procedure TSQLTransaction.Rollback;
begin begin
if not FActive then Exit; if not FActive then Exit;
if (Database as tsqlconnection).RollBack(FTrans) then FActive := false; closedatasets;
if (Database as tsqlconnection).RollBack(FTrans) then
begin
FActive := false;
FTrans.free; FTrans.free;
end; end;
procedure TSQLTransaction.EndTransaction;
begin
Rollback;
end; end;
procedure TSQLTransaction.RollbackRetaining; procedure TSQLTransaction.RollbackRetaining;
@ -329,7 +347,8 @@ procedure TSQLTransaction.StartTransaction;
var db : TSQLConnection; var db : TSQLConnection;
begin begin
if Active then Active := False; if Active then
DatabaseError(SErrTransAlreadyActive);
db := (Database as tsqlconnection); db := (Database as tsqlconnection);
@ -340,7 +359,7 @@ begin
Db.Open; Db.Open;
if not assigned(FTrans) then FTrans := Db.AllocateTransactionHandle; if not assigned(FTrans) then FTrans := Db.AllocateTransactionHandle;
if Db.StartTransaction(FTrans) then FActive := true; if Db.StartdbTransaction(FTrans) then FActive := true;
end; end;
constructor TSQLTransaction.Create(AOwner : TComponent); constructor TSQLTransaction.Create(AOwner : TComponent);
@ -350,23 +369,11 @@ end;
destructor TSQLTransaction.Destroy; destructor TSQLTransaction.Destroy;
begin begin
// This will also do a Rollback, if the transaction is currently active Rollback;
Active := False;
// Database.Transaction := nil;
inherited Destroy; inherited Destroy;
end; end;
{ TSQLQuery } { TSQLQuery }
procedure TSQLQuery.SetTransaction(Value : TSQLTransaction);
begin
CheckInactive;
if (FTransaction <> Value) then
FTransaction := Value;
end;
procedure TSQLQuery.SetDatabase(Value : TDatabase); procedure TSQLQuery.SetDatabase(Value : TDatabase);
var db : tsqlconnection; var db : tsqlconnection;
@ -376,14 +383,18 @@ begin
begin begin
db := value as tsqlconnection; db := value as tsqlconnection;
inherited setdatabase(value); inherited setdatabase(value);
if (FTransaction = nil) and (Assigned(Db.Transaction)) then if assigned(value) and (Transaction = nil) and (Assigned(db.Transaction)) then
SetTransaction(Db.Transaction); transaction := Db.Transaction;
end; end;
end; end;
procedure TSQLQuery.FreeStatement; procedure TSQLQuery.FreeStatement;
begin
if assigned(FCursor) then
begin begin
(Database as tsqlconnection).FreeStatement(FCursor); (Database as tsqlconnection).FreeStatement(FCursor);
FCursor.free;
end;
end; end;
procedure TSQLQuery.PrepareStatement; procedure TSQLQuery.PrepareStatement;
@ -391,17 +402,18 @@ var
Buf : string; Buf : string;
x : integer; x : integer;
db : tsqlconnection; db : tsqlconnection;
sqltr : tsqltransaction;
begin begin
db := (Database as tsqlconnection); db := (Database as tsqlconnection);
if Db = nil then if Db = nil then
DatabaseError(SErrDatabasenAssigned); DatabaseError(SErrDatabasenAssigned);
if not Db.Connected then if not Db.Connected then
db.Open; db.Open;
if FTransaction = nil then if Transaction = nil then
DatabaseError(SErrTransactionnSet); DatabaseError(SErrTransactionnSet);
if not FTransaction.Active then sqltr := (transaction as tsqltransaction);
FTransaction.StartTransaction; if not sqltr.Active then sqltr.StartTransaction;
if assigned(fcursor) then FCursor.free; if assigned(fcursor) then FCursor.free;
FCursor := Db.AllocateCursorHandle; FCursor := Db.AllocateCursorHandle;
@ -414,15 +426,13 @@ begin
DatabaseError(SErrNoStatement); DatabaseError(SErrNoStatement);
exit; exit;
end; end;
FCursor.StatementType := GetSQLStatementType(buf); FCursor.StatementType := GetSQLStatementType(buf);
Db.PrepareStatement(Fcursor,sqltr,buf);
Db.PrepareStatement(Fcursor,FTransaction,buf);
end; end;
procedure TSQLQuery.FreeFldBuffers; procedure TSQLQuery.FreeFldBuffers;
begin begin
(Database as tsqlconnection).FreeFldBuffers(FCursor); if assigned(FCursor) then (Database as tsqlconnection).FreeFldBuffers(FCursor);
end; end;
procedure TSQLQuery.Fetch; procedure TSQLQuery.Fetch;
@ -452,7 +462,7 @@ end;
procedure TSQLQuery.Execute; procedure TSQLQuery.Execute;
begin begin
(Database as tsqlconnection).execute(Fcursor,FTransaction); (Database as tsqlconnection).execute(Fcursor,Transaction as tsqltransaction);
end; end;
function TSQLQuery.AllocRecord(ExtraSize : integer): PChar; function TSQLQuery.AllocRecord(ExtraSize : integer): PChar;
@ -493,7 +503,6 @@ begin
FIsEOF := False; FIsEOF := False;
FRecordSize := 0; FRecordSize := 0;
FOpen:=False; FOpen:=False;
FCursor.free;
inherited internalclose; inherited internalclose;
end; end;
@ -649,7 +658,10 @@ end.
{ {
$Log$ $Log$
Revision 1.5 2004-10-10 14:45:52 michael Revision 1.6 2004-10-27 07:23:13 michael
+ Patch from Joost Van der Sluis to fix transactions
Revision 1.5 2004/10/10 14:45:52 michael
+ Use of dbconst for resource strings + Use of dbconst for resource strings
Revision 1.4 2004/10/10 14:24:22 michael Revision 1.4 2004/10/10 14:24:22 michael

View File

@ -1,8 +1,8 @@
# #
# Don't edit, this file is generated by FPCMake Version 1.1 [2004/09/04] # Don't edit, this file is generated by FPCMake Version 1.1 [2004/07/12]
# #
default: all default: all
MAKEFILETARGETS=linux go32v2 win32 os2 freebsd beos netbsd amiga atari sunos qnx netware openbsd wdosx palmos macos darwin emx watcom morphos netwlibc MAKEFILETARGETS=linux go32v2 win32 os2 freebsd beos netbsd amiga atari sunos qnx netware openbsd wdosx palmos macos darwin emx watcom morphos
BSDs = freebsd netbsd openbsd darwin BSDs = freebsd netbsd openbsd darwin
UNIXs = linux $(BSDs) sunos qnx UNIXs = linux $(BSDs) sunos qnx
FORCE: FORCE:
@ -214,7 +214,7 @@ UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
endif endif
PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages/base $(FPCDIR)/packages/extra) PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
override PACKAGE_NAME=fcl override PACKAGE_NAME=fcl
override TARGET_UNITS+=sqlitedataset override TARGET_UNITS+=sqliteds
override INSTALL_FPCPACKAGE=y override INSTALL_FPCPACKAGE=y
override COMPILER_TARGETDIR+=../../$(OS_TARGET) override COMPILER_TARGETDIR+=../../$(OS_TARGET)
ifdef REQUIRE_UNITSDIR ifdef REQUIRE_UNITSDIR
@ -525,12 +525,6 @@ STATICLIBPREFIX=
FPCMADE=fpcmade.nw FPCMADE=fpcmade.nw
ZIPSUFFIX=nw ZIPSUFFIX=nw
endif endif
ifeq ($(OS_TARGET),netwlibc)
EXEEXT=.nlm
STATICLIBPREFIX=
FPCMADE=fpcmade.nwl
ZIPSUFFIX=nwl
endif
ifeq ($(OS_TARGET),macos) ifeq ($(OS_TARGET),macos)
BATCHEXT= BATCHEXT=
EXEEXT= EXEEXT=
@ -683,18 +677,6 @@ FPCMADE=fpcmade.nw
ZIPSUFFIX=nw ZIPSUFFIX=nw
EXEEXT=.nlm EXEEXT=.nlm
endif endif
ifeq ($(OS_TARGET),netwlibc)
STATICLIBPREFIX=
PPUEXT=.ppu
OEXT=.o
ASMEXT=.s
SMARTEXT=.sl
STATICLIBEXT=.a
SHAREDLIBEXT=.nlm
FPCMADE=fpcmade.nwl
ZIPSUFFIX=nwl
EXEEXT=.nlm
endif
ifeq ($(OS_TARGET),macos) ifeq ($(OS_TARGET),macos)
BATCHEXT= BATCHEXT=
PPUEXT=.ppu PPUEXT=.ppu
@ -1129,12 +1111,6 @@ REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_SQLITE=1 REQUIRE_PACKAGES_SQLITE=1
endif endif
endif endif
ifeq ($(OS_TARGET),netwlibc)
ifeq ($(CPU_TARGET),i386)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_SQLITE=1
endif
endif
ifdef REQUIRE_PACKAGES_RTL ifdef REQUIRE_PACKAGES_RTL
PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/$(OS_TARGET)/Makefile.fpc,$(PACKAGESDIR)))))) PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/$(OS_TARGET)/Makefile.fpc,$(PACKAGESDIR))))))
ifneq ($(PACKAGEDIR_RTL),) ifneq ($(PACKAGEDIR_RTL),)
@ -1339,7 +1315,7 @@ fpc_debug:
$(MAKE) all DEBUG=1 $(MAKE) all DEBUG=1
fpc_release: fpc_release:
$(MAKE) all RELEASE=1 $(MAKE) all RELEASE=1
.SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .lpr .dpr .pp .rc .res .SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .dpr .pp .rc .res
%$(PPUEXT): %.pp %$(PPUEXT): %.pp
$(COMPILER) $< $(COMPILER) $<
$(EXECPPAS) $(EXECPPAS)
@ -1352,9 +1328,6 @@ fpc_release:
%$(EXEEXT): %.pas %$(EXEEXT): %.pas
$(COMPILER) $< $(COMPILER) $<
$(EXECPPAS) $(EXECPPAS)
%$(EXEEXT): %.lpr
$(COMPILER) $<
$(EXECPPAS)
%$(EXEEXT): %.dpr %$(EXEEXT): %.dpr
$(COMPILER) $< $(COMPILER) $<
$(EXECPPAS) $(EXECPPAS)
@ -1362,7 +1335,6 @@ fpc_release:
windres -i $< -o $@ windres -i $< -o $@
vpath %.pp $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR) vpath %.pp $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
vpath %.pas $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR) vpath %.pas $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
vpath %.lpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
vpath %.dpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR) vpath %.dpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
vpath %$(PPUEXT) $(COMPILER_UNITTARGETDIR) vpath %$(PPUEXT) $(COMPILER_UNITTARGETDIR)
.PHONY: fpc_install fpc_sourceinstall fpc_exampleinstall .PHONY: fpc_install fpc_sourceinstall fpc_exampleinstall

View File

@ -6,7 +6,7 @@
main=fcl main=fcl
[target] [target]
units=sqlitedataset units=sqliteds
[require] [require]
packages=sqlite packages=sqlite