|
@@ -72,10 +72,8 @@ type
|
|
procedure FreeFldBuffers(cursor : TSQLHandle); virtual; abstract;
|
|
procedure FreeFldBuffers(cursor : TSQLHandle); virtual; abstract;
|
|
procedure Execute(cursor: TSQLHandle;atransaction:tSQLtransaction); virtual; abstract;
|
|
procedure Execute(cursor: TSQLHandle;atransaction:tSQLtransaction); virtual; abstract;
|
|
procedure AddFieldDefs(cursor: TSQLHandle; FieldDefs : TfieldDefs); virtual; abstract;
|
|
procedure AddFieldDefs(cursor: TSQLHandle; FieldDefs : TfieldDefs); virtual; abstract;
|
|
- function GetFieldSizes(cursor : TSQLHandle) : integer; virtual; abstract;
|
|
|
|
function Fetch(cursor : TSQLHandle) : boolean; virtual; abstract;
|
|
function Fetch(cursor : TSQLHandle) : boolean; virtual; abstract;
|
|
- procedure LoadFieldsFromBuffer(cursor : TSQLHandle;buffer : pchar); virtual; abstract;
|
|
|
|
- function GetFieldData(Cursor : TSQLHandle;Field: TField; FieldDefs : TfieldDefs; Buffer: Pointer;currbuff : pchar): Boolean; virtual;
|
|
|
|
|
|
+ function LoadField(cursor : TSQLHandle;FieldDef : TfieldDef;buffer : pointer) : boolean; virtual; abstract;
|
|
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;
|
|
@@ -103,7 +101,6 @@ type
|
|
|
|
|
|
{ TSQLTransaction }
|
|
{ TSQLTransaction }
|
|
|
|
|
|
-
|
|
|
|
TCommitRollbackAction = (caNone, caCommit, caCommitRetaining, caRollback,
|
|
TCommitRollbackAction = (caNone, caCommit, caCommitRetaining, caRollback,
|
|
caRollbackRetaining);
|
|
caRollbackRetaining);
|
|
|
|
|
|
@@ -137,31 +134,24 @@ type
|
|
FSQL : TStrings;
|
|
FSQL : TStrings;
|
|
FIsEOF : boolean;
|
|
FIsEOF : boolean;
|
|
FLoadingFieldDefs : boolean;
|
|
FLoadingFieldDefs : boolean;
|
|
- FRecordSize : Integer;
|
|
|
|
|
|
|
|
procedure FreeStatement;
|
|
procedure FreeStatement;
|
|
procedure PrepareStatement;
|
|
procedure PrepareStatement;
|
|
procedure FreeFldBuffers;
|
|
procedure FreeFldBuffers;
|
|
- procedure Fetch;
|
|
|
|
- function LoadBuffer(Buffer : PChar): TGetResult;
|
|
|
|
- procedure SetFieldSizes;
|
|
|
|
|
|
|
|
procedure Execute;
|
|
procedure Execute;
|
|
|
|
|
|
protected
|
|
protected
|
|
|
|
+ // abstract & virual methods of TBufDataset
|
|
|
|
+ function Fetch : boolean; override;
|
|
|
|
+ function LoadField(FieldDef : TFieldDef;buffer : pointer) : boolean; override;
|
|
// abstract & virual methods of TDataset
|
|
// abstract & virual methods of TDataset
|
|
procedure SetDatabase(Value : TDatabase); override;
|
|
procedure SetDatabase(Value : TDatabase); override;
|
|
- function AllocRecord(ExtraSize : integer): PChar; override;
|
|
|
|
- procedure FreeRecord(var Buffer: PChar); override;
|
|
|
|
- function GetFieldData(Field: TField; Buffer: Pointer): Boolean; override;
|
|
|
|
- function GetNextRecord(Buffer : pchar) : TGetResult; override;
|
|
|
|
- function GetRecordSize: Word; override;
|
|
|
|
procedure InternalAddRecord(Buffer: Pointer; AAppend: Boolean); override;
|
|
procedure InternalAddRecord(Buffer: Pointer; AAppend: Boolean); override;
|
|
procedure InternalClose; override;
|
|
procedure InternalClose; override;
|
|
procedure InternalDelete; override;
|
|
procedure InternalDelete; override;
|
|
procedure InternalHandleException; override;
|
|
procedure InternalHandleException; override;
|
|
procedure InternalInitFieldDefs; override;
|
|
procedure InternalInitFieldDefs; override;
|
|
- procedure InternalInitRecord(Buffer: PChar); override;
|
|
|
|
procedure InternalOpen; override;
|
|
procedure InternalOpen; override;
|
|
procedure InternalPost; override;
|
|
procedure InternalPost; override;
|
|
function IsCursorOpen: Boolean; override;
|
|
function IsCursorOpen: Boolean; override;
|
|
@@ -174,10 +164,9 @@ type
|
|
published
|
|
published
|
|
// redeclared data set properties
|
|
// redeclared data set properties
|
|
property Active;
|
|
property Active;
|
|
-// property FieldDefs stored FieldDefsStored;
|
|
|
|
- property Filter;
|
|
|
|
- property Filtered;
|
|
|
|
- property FilterOptions;
|
|
|
|
|
|
+// property Filter;
|
|
|
|
+// property Filtered;
|
|
|
|
+// property FilterOptions;
|
|
property BeforeOpen;
|
|
property BeforeOpen;
|
|
property AfterOpen;
|
|
property AfterOpen;
|
|
property BeforeClose;
|
|
property BeforeClose;
|
|
@@ -204,7 +193,7 @@ type
|
|
property Database;
|
|
property Database;
|
|
|
|
|
|
property Transaction;
|
|
property Transaction;
|
|
- property SQL : TStrings read FSQL write FSQL;
|
|
|
|
|
|
+ property SQL : TStrings read FSQL write FSQL;
|
|
end;
|
|
end;
|
|
|
|
|
|
implementation
|
|
implementation
|
|
@@ -249,25 +238,6 @@ begin
|
|
inherited Destroy;
|
|
inherited Destroy;
|
|
end;
|
|
end;
|
|
|
|
|
|
-function TSQLConnection.GetFieldData(Cursor : TSQLHandle;Field: TField; FieldDefs : TfieldDefs; Buffer: Pointer;currbuff : pchar): Boolean;
|
|
|
|
-
|
|
|
|
-var
|
|
|
|
- x : longint;
|
|
|
|
-
|
|
|
|
-begin
|
|
|
|
- Result := False;
|
|
|
|
- for x := 0 to FieldDefs.count-1 do
|
|
|
|
- begin
|
|
|
|
- if (Field.FieldName = FieldDefs[x].Name) then
|
|
|
|
- begin
|
|
|
|
- Move(CurrBuff^, Buffer^, Field.Size);
|
|
|
|
- Result := True;
|
|
|
|
- Break;
|
|
|
|
- end
|
|
|
|
- else Inc(CurrBuff, FieldDefs[x].Size);
|
|
|
|
- end;
|
|
|
|
-end;
|
|
|
|
-
|
|
|
|
{ TSQLTransaction }
|
|
{ TSQLTransaction }
|
|
procedure TSQLTransaction.EndTransaction;
|
|
procedure TSQLTransaction.EndTransaction;
|
|
|
|
|
|
@@ -282,36 +252,40 @@ end;
|
|
|
|
|
|
procedure TSQLTransaction.Commit;
|
|
procedure TSQLTransaction.Commit;
|
|
begin
|
|
begin
|
|
- checkactive;
|
|
|
|
- closedatasets;
|
|
|
|
- if (Database as tsqlconnection).commit(FTrans) then
|
|
|
|
|
|
+ if active then
|
|
begin
|
|
begin
|
|
- closeTrans;
|
|
|
|
- FreeAndNil(FTrans);
|
|
|
|
|
|
+ closedatasets;
|
|
|
|
+ if (Database as tsqlconnection).commit(FTrans) then
|
|
|
|
+ begin
|
|
|
|
+ closeTrans;
|
|
|
|
+ FreeAndNil(FTrans);
|
|
|
|
+ end;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TSQLTransaction.CommitRetaining;
|
|
procedure TSQLTransaction.CommitRetaining;
|
|
begin
|
|
begin
|
|
- CheckActive;
|
|
|
|
- (Database as tsqlconnection).commitRetaining(FTrans);
|
|
|
|
|
|
+ if active then
|
|
|
|
+ (Database as tsqlconnection).commitRetaining(FTrans);
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TSQLTransaction.Rollback;
|
|
procedure TSQLTransaction.Rollback;
|
|
begin
|
|
begin
|
|
- CheckActive;
|
|
|
|
- closedatasets;
|
|
|
|
- if (Database as tsqlconnection).RollBack(FTrans) then
|
|
|
|
|
|
+ if active then
|
|
begin
|
|
begin
|
|
- CloseTrans;
|
|
|
|
- FreeAndNil(FTrans);
|
|
|
|
|
|
+ closedatasets;
|
|
|
|
+ if (Database as tsqlconnection).RollBack(FTrans) then
|
|
|
|
+ begin
|
|
|
|
+ CloseTrans;
|
|
|
|
+ FreeAndNil(FTrans);
|
|
|
|
+ end;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TSQLTransaction.RollbackRetaining;
|
|
procedure TSQLTransaction.RollbackRetaining;
|
|
begin
|
|
begin
|
|
- CheckActive;
|
|
|
|
- (Database as tsqlconnection).RollBackRetaining(FTrans);
|
|
|
|
|
|
+ if active then
|
|
|
|
+ (Database as tsqlconnection).RollBackRetaining(FTrans);
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TSQLTransaction.StartTransaction;
|
|
procedure TSQLTransaction.StartTransaction;
|
|
@@ -390,6 +364,7 @@ begin
|
|
if assigned(fcursor) then FreeAndNil(fcursor);
|
|
if assigned(fcursor) then FreeAndNil(fcursor);
|
|
FCursor := Db.AllocateCursorHandle;
|
|
FCursor := Db.AllocateCursorHandle;
|
|
|
|
|
|
|
|
+ Buf := '';
|
|
for x := 0 to FSQL.Count - 1 do
|
|
for x := 0 to FSQL.Count - 1 do
|
|
Buf := Buf + FSQL[x] + ' ';
|
|
Buf := Buf + FSQL[x] + ' ';
|
|
|
|
|
|
@@ -407,29 +382,13 @@ begin
|
|
if assigned(FCursor) then (Database as tsqlconnection).FreeFldBuffers(FCursor);
|
|
if assigned(FCursor) then (Database as tsqlconnection).FreeFldBuffers(FCursor);
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TSQLQuery.Fetch;
|
|
|
|
|
|
+function TSQLQuery.Fetch : boolean;
|
|
begin
|
|
begin
|
|
if not (Fcursor.StatementType in [stSelect]) then
|
|
if not (Fcursor.StatementType in [stSelect]) then
|
|
Exit;
|
|
Exit;
|
|
|
|
|
|
- FIsEof := not (Database as tsqlconnection).Fetch(Fcursor);
|
|
|
|
-end;
|
|
|
|
-
|
|
|
|
-function TSQLQuery.LoadBuffer(Buffer : PChar): TGetResult;
|
|
|
|
-begin
|
|
|
|
- Fetch;
|
|
|
|
- if FIsEOF then
|
|
|
|
- begin
|
|
|
|
- Result := grEOF;
|
|
|
|
- Exit;
|
|
|
|
- end;
|
|
|
|
- (Database as tsqlconnection).LoadFieldsFromBuffer(FCursor,buffer);
|
|
|
|
- Result := grOK;
|
|
|
|
-end;
|
|
|
|
-
|
|
|
|
-procedure TSQLQuery.SetFieldSizes;
|
|
|
|
-begin
|
|
|
|
- FRecordSize := (Database as tsqlconnection).GetfieldSizes(Fcursor);
|
|
|
|
|
|
+ if not FIsEof then FIsEOF := not (Database as tsqlconnection).Fetch(Fcursor);
|
|
|
|
+ Result := not FIsEOF;
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TSQLQuery.Execute;
|
|
procedure TSQLQuery.Execute;
|
|
@@ -437,28 +396,10 @@ begin
|
|
(Database as tsqlconnection).execute(Fcursor,Transaction as tsqltransaction);
|
|
(Database as tsqlconnection).execute(Fcursor,Transaction as tsqltransaction);
|
|
end;
|
|
end;
|
|
|
|
|
|
-function TSQLQuery.AllocRecord(ExtraSize : integer): PChar;
|
|
|
|
-begin
|
|
|
|
- Result := AllocMem(FRecordSize+ExtraSize);
|
|
|
|
-end;
|
|
|
|
-
|
|
|
|
-procedure TSQLQuery.FreeRecord(var Buffer: PChar);
|
|
|
|
-begin
|
|
|
|
- if Assigned(@Buffer) then
|
|
|
|
- FreeMem(Buffer);
|
|
|
|
-end;
|
|
|
|
-
|
|
|
|
-function TSQLQuery.GetFieldData(Field: TField; Buffer: Pointer): Boolean;
|
|
|
|
-begin
|
|
|
|
- result := (Database as tsqlconnection).GetFieldData(Fcursor,Field,FieldDefs,buffer,activebuffer);
|
|
|
|
-end;
|
|
|
|
|
|
+function TSQLQuery.LoadField(FieldDef : TFieldDef;buffer : pointer) : boolean;
|
|
|
|
|
|
-function TSQLQuery.GetNextRecord(Buffer: PChar): TGetResult;
|
|
|
|
begin
|
|
begin
|
|
- if FIsEOF then
|
|
|
|
- Result := grEof
|
|
|
|
- else
|
|
|
|
- Result := LoadBuffer(Buffer);
|
|
|
|
|
|
+ result := (Database as tSQLConnection).LoadField(FCursor,FieldDef,buffer)
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TSQLQuery.InternalAddRecord(Buffer: Pointer; AAppend: Boolean);
|
|
procedure TSQLQuery.InternalAddRecord(Buffer: Pointer; AAppend: Boolean);
|
|
@@ -496,18 +437,13 @@ begin
|
|
|
|
|
|
try
|
|
try
|
|
FieldDefs.Clear;
|
|
FieldDefs.Clear;
|
|
-
|
|
|
|
|
|
+
|
|
(Database as tsqlconnection).AddFieldDefs(fcursor,FieldDefs);
|
|
(Database as tsqlconnection).AddFieldDefs(fcursor,FieldDefs);
|
|
finally
|
|
finally
|
|
FLoadingFieldDefs := False;
|
|
FLoadingFieldDefs := False;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TSQLQuery.InternalInitRecord(Buffer: PChar);
|
|
|
|
-begin
|
|
|
|
- FillChar(Buffer^, FRecordSize, #0);
|
|
|
|
-end;
|
|
|
|
-
|
|
|
|
procedure TSQLQuery.InternalOpen;
|
|
procedure TSQLQuery.InternalOpen;
|
|
begin
|
|
begin
|
|
try
|
|
try
|
|
@@ -519,8 +455,6 @@ begin
|
|
InternalInitFieldDefs;
|
|
InternalInitFieldDefs;
|
|
if DefaultFields then
|
|
if DefaultFields then
|
|
CreateFields;
|
|
CreateFields;
|
|
- SetFieldSizes;
|
|
|
|
- BindFields(True);
|
|
|
|
end
|
|
end
|
|
else
|
|
else
|
|
DatabaseError(SErrNoSelectStatement,Self);
|
|
DatabaseError(SErrNoSelectStatement,Self);
|
|
@@ -620,17 +554,17 @@ begin
|
|
Exit(t);
|
|
Exit(t);
|
|
end;
|
|
end;
|
|
|
|
|
|
-function TSQLQuery.getrecordsize : Word;
|
|
|
|
-
|
|
|
|
-begin
|
|
|
|
- result := FRecordSize;
|
|
|
|
-end;
|
|
|
|
-
|
|
|
|
end.
|
|
end.
|
|
|
|
|
|
{
|
|
{
|
|
$Log$
|
|
$Log$
|
|
- Revision 1.7 2004-11-05 08:32:02 michael
|
|
|
|
|
|
+ Revision 1.8 2004-12-04 22:43:38 michael
|
|
|
|
+ * Patch from Joost van der Sluis
|
|
|
|
+ - replaced checkactive in commit and rollback for 'if active'
|
|
|
|
+ - fixed a warning
|
|
|
|
+ - adapted for the changes in TBuffDataset
|
|
|
|
+
|
|
|
|
+ Revision 1.7 2004/11/05 08:32:02 michael
|
|
TBufDataset.inc:
|
|
TBufDataset.inc:
|
|
- replaced Freemem by Reallocmem, Free by FreeAndNil
|
|
- replaced Freemem by Reallocmem, Free by FreeAndNil
|
|
|
|
|