|
@@ -29,23 +29,32 @@ type
|
|
TSQLTransaction = class;
|
|
TSQLTransaction = class;
|
|
TSQLQuery = class;
|
|
TSQLQuery = class;
|
|
|
|
|
|
- ESQLdbError = class(Exception);
|
|
|
|
-
|
|
|
|
TStatementType = (stNone, stSelect, stInsert, stUpdate, stDelete,
|
|
TStatementType = (stNone, stSelect, stInsert, stUpdate, stDelete,
|
|
stDDL, stGetSegment, stPutSegment, stExecProcedure,
|
|
stDDL, stGetSegment, stPutSegment, stExecProcedure,
|
|
stStartTrans, stCommit, stRollback, stSelectForUpd);
|
|
stStartTrans, stCommit, stRollback, stSelectForUpd);
|
|
|
|
|
|
TSQLHandle = Class(TObject)
|
|
TSQLHandle = Class(TObject)
|
|
-// Procedure FreeHandle ; Virtual; Abstract;
|
|
|
|
|
|
+ protected
|
|
|
|
+ StatementType : TStatementType;
|
|
end;
|
|
end;
|
|
|
|
|
|
-{ TSQLConnection }
|
|
|
|
|
|
|
|
|
|
+const
|
|
|
|
+ StatementTokens : Array[TStatementType] of string = ('(none)', 'select',
|
|
|
|
+ 'insert', 'update', 'delete',
|
|
|
|
+ 'create', 'get', 'put', 'execute',
|
|
|
|
+ 'start','commit','rollback', '?'
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+{ TSQLConnection }
|
|
|
|
+type
|
|
TSQLConnection = class (TDatabase)
|
|
TSQLConnection = class (TDatabase)
|
|
private
|
|
private
|
|
FPassword : string;
|
|
FPassword : string;
|
|
FTransaction : TSQLTransaction;
|
|
FTransaction : TSQLTransaction;
|
|
FUserName : string;
|
|
FUserName : string;
|
|
|
|
+ FHostName : string;
|
|
FCharSet : string;
|
|
FCharSet : string;
|
|
FRole : String;
|
|
FRole : String;
|
|
|
|
|
|
@@ -58,22 +67,15 @@ type
|
|
Function AllocateCursorHandle : TSQLHandle; virtual; abstract;
|
|
Function AllocateCursorHandle : TSQLHandle; virtual; abstract;
|
|
Function AllocateTransactionHandle : TSQLHandle; virtual; abstract;
|
|
Function AllocateTransactionHandle : TSQLHandle; virtual; abstract;
|
|
|
|
|
|
-{ function GetCursor : pointer; virtual; abstract;
|
|
|
|
- procedure FreeCursor(cursor : pointer); virtual; abstract;
|
|
|
|
- function GetTrans : pointer; virtual; abstract;
|
|
|
|
- procedure FreeTrans(trans : pointer); virtual; abstract;}
|
|
|
|
procedure FreeStatement(cursor : TSQLHandle); virtual; abstract;
|
|
procedure FreeStatement(cursor : TSQLHandle); virtual; abstract;
|
|
- procedure FreeSelect(cursor : TSQLHandle); virtual; abstract;
|
|
|
|
procedure PrepareStatement(cursor: TSQLHandle;ATransaction : TSQLTransaction;buf : string); virtual; abstract;
|
|
procedure PrepareStatement(cursor: TSQLHandle;ATransaction : TSQLTransaction;buf : string); virtual; abstract;
|
|
- procedure PrepareSelect(cursor : TSQLHandle); virtual; abstract;
|
|
|
|
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 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;
|
|
procedure LoadFieldsFromBuffer(cursor : TSQLHandle;buffer : pchar); virtual; abstract;
|
|
- function GetFieldData(cursor : TSQLHandle; Field: TField; Buffer: Pointer;currbuff : pchar): Boolean; virtual; abstract;
|
|
|
|
- function GetStatementType(cursor : TSQLHandle) : tStatementType; virtual; abstract;
|
|
|
|
|
|
+ function GetFieldData(Cursor : TSQLHandle;Field: TField; FieldDefs : TfieldDefs; Buffer: Pointer;currbuff : pchar): Boolean; virtual;
|
|
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;
|
|
@@ -88,6 +90,7 @@ type
|
|
property Transaction : TSQLTransaction read FTransaction write SetTransaction;
|
|
property Transaction : TSQLTransaction read FTransaction write SetTransaction;
|
|
property UserName : string read FUserName write FUserName;
|
|
property UserName : string read FUserName write FUserName;
|
|
property CharSet : string read FCharSet write FCharSet;
|
|
property CharSet : string read FCharSet write FCharSet;
|
|
|
|
+ property HostName : string Read FHostName Write FHostName;
|
|
|
|
|
|
property Connected;
|
|
property Connected;
|
|
Property Role : String read FRole write FRole;
|
|
Property Role : String read FRole write FRole;
|
|
@@ -109,7 +112,6 @@ type
|
|
FTrans : TSQLHandle;
|
|
FTrans : TSQLHandle;
|
|
FAction : TCommitRollbackAction;
|
|
FAction : TCommitRollbackAction;
|
|
FActive : boolean;
|
|
FActive : boolean;
|
|
-// FDatabase : TSQLConnection;
|
|
|
|
|
|
|
|
procedure SetActive(Value : boolean);
|
|
procedure SetActive(Value : boolean);
|
|
protected
|
|
protected
|
|
@@ -127,7 +129,6 @@ type
|
|
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 : TSQLConnection read FDatabase write FDatabase;
|
|
|
|
property Database;
|
|
property Database;
|
|
end;
|
|
end;
|
|
|
|
|
|
@@ -138,32 +139,25 @@ type
|
|
FCursor : TSQLHandle;
|
|
FCursor : TSQLHandle;
|
|
FOpen : Boolean;
|
|
FOpen : Boolean;
|
|
FTransaction : TSQLTransaction;
|
|
FTransaction : TSQLTransaction;
|
|
-// FDatabase : TSQLConnection;
|
|
|
|
FSQL : TStrings;
|
|
FSQL : TStrings;
|
|
FIsEOF : boolean;
|
|
FIsEOF : boolean;
|
|
- FStatementType : TStatementType;
|
|
|
|
FLoadingFieldDefs : boolean;
|
|
FLoadingFieldDefs : boolean;
|
|
FRecordSize : Integer;
|
|
FRecordSize : Integer;
|
|
|
|
|
|
procedure SetTransaction(Value : TSQLTransaction);
|
|
procedure SetTransaction(Value : TSQLTransaction);
|
|
procedure FreeStatement;
|
|
procedure FreeStatement;
|
|
- procedure FreeSelect;
|
|
|
|
procedure PrepareStatement;
|
|
procedure PrepareStatement;
|
|
- procedure PrepareSelect;
|
|
|
|
procedure FreeFldBuffers;
|
|
procedure FreeFldBuffers;
|
|
procedure Fetch;
|
|
procedure Fetch;
|
|
function LoadBuffer(Buffer : PChar): TGetResult;
|
|
function LoadBuffer(Buffer : PChar): TGetResult;
|
|
- procedure GetStatementType;
|
|
|
|
procedure SetFieldSizes;
|
|
procedure SetFieldSizes;
|
|
|
|
|
|
- procedure ExecuteImmediate;
|
|
|
|
- procedure ExecuteParams;
|
|
|
|
procedure Execute;
|
|
procedure Execute;
|
|
|
|
|
|
protected
|
|
protected
|
|
// abstract & virual methods of TDataset
|
|
// abstract & virual methods of TDataset
|
|
procedure SetDatabase(Value : TDatabase); override;
|
|
procedure SetDatabase(Value : TDatabase); override;
|
|
- function AllocRecord: PChar; override;
|
|
|
|
|
|
+ function AllocRecord(ExtraSize : integer): PChar; override;
|
|
procedure FreeRecord(var Buffer: PChar); override;
|
|
procedure FreeRecord(var Buffer: PChar); override;
|
|
function GetFieldData(Field: TField; Buffer: Pointer): Boolean; override;
|
|
function GetFieldData(Field: TField; Buffer: Pointer): Boolean; override;
|
|
function GetNextRecord(Buffer : pchar) : TGetResult; override;
|
|
function GetNextRecord(Buffer : pchar) : TGetResult; override;
|
|
@@ -178,12 +172,11 @@ type
|
|
procedure InternalPost; override;
|
|
procedure InternalPost; override;
|
|
function IsCursorOpen: Boolean; override;
|
|
function IsCursorOpen: Boolean; override;
|
|
procedure SetFieldData(Field: TField; Buffer: Pointer); override;
|
|
procedure SetFieldData(Field: TField; Buffer: Pointer); override;
|
|
|
|
+ Function GetSQLStatementType(SQL : String) : TStatementType; virtual;
|
|
public
|
|
public
|
|
procedure ExecSQL; virtual;
|
|
procedure ExecSQL; virtual;
|
|
constructor Create(AOwner : TComponent); override;
|
|
constructor Create(AOwner : TComponent); override;
|
|
destructor Destroy; override;
|
|
destructor Destroy; override;
|
|
-
|
|
|
|
-
|
|
|
|
published
|
|
published
|
|
// redeclared data set properties
|
|
// redeclared data set properties
|
|
property Active;
|
|
property Active;
|
|
@@ -216,9 +209,7 @@ type
|
|
property AutoCalcFields;
|
|
property AutoCalcFields;
|
|
property Database;
|
|
property Database;
|
|
|
|
|
|
-
|
|
|
|
property Transaction : TSQLTransaction read FTransaction write SetTransaction;
|
|
property Transaction : TSQLTransaction read FTransaction write SetTransaction;
|
|
-// property Database : TSQLConnection read FDatabase write SetDatabase;
|
|
|
|
property SQL : TStrings read FSQL write FSQL;
|
|
property SQL : TStrings read FSQL write FSQL;
|
|
end;
|
|
end;
|
|
|
|
|
|
@@ -259,11 +250,6 @@ begin
|
|
Close;
|
|
Close;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TSQLQuery.GetStatementType;
|
|
|
|
-begin
|
|
|
|
- FStatementType := (Database as tsqlconnection).GetStatementType(Fcursor);
|
|
|
|
-end;
|
|
|
|
-
|
|
|
|
procedure TSQLConnection.DoInternalDisconnect;
|
|
procedure TSQLConnection.DoInternalDisconnect;
|
|
begin
|
|
begin
|
|
end;
|
|
end;
|
|
@@ -278,6 +264,25 @@ 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.SetActive(Value : boolean);
|
|
procedure TSQLTransaction.SetActive(Value : boolean);
|
|
@@ -318,7 +323,6 @@ begin
|
|
Rollback;
|
|
Rollback;
|
|
end;
|
|
end;
|
|
|
|
|
|
-
|
|
|
|
procedure TSQLTransaction.RollbackRetaining;
|
|
procedure TSQLTransaction.RollbackRetaining;
|
|
begin
|
|
begin
|
|
if not FActive then Exit;
|
|
if not FActive then Exit;
|
|
@@ -379,8 +383,6 @@ begin
|
|
inherited setdatabase(value);
|
|
inherited setdatabase(value);
|
|
if (FTransaction = nil) and (Assigned(Db.Transaction)) then
|
|
if (FTransaction = nil) and (Assigned(Db.Transaction)) then
|
|
SetTransaction(Db.Transaction);
|
|
SetTransaction(Db.Transaction);
|
|
-{ if assigned(fcursor) then freemem(FCursor);
|
|
|
|
- FCursor := Db.AllocateCursorHandle;}
|
|
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
@@ -389,11 +391,6 @@ begin
|
|
(Database as tsqlconnection).FreeStatement(FCursor);
|
|
(Database as tsqlconnection).FreeStatement(FCursor);
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TSQLQuery.FreeSelect;
|
|
|
|
-begin
|
|
|
|
- (Database as tsqlconnection).FreeSelect(FCursor);
|
|
|
|
-end;
|
|
|
|
-
|
|
|
|
procedure TSQLQuery.PrepareStatement;
|
|
procedure TSQLQuery.PrepareStatement;
|
|
var
|
|
var
|
|
Buf : string;
|
|
Buf : string;
|
|
@@ -422,12 +419,10 @@ begin
|
|
DatabaseError(SErrNoStatement);
|
|
DatabaseError(SErrNoStatement);
|
|
exit;
|
|
exit;
|
|
end;
|
|
end;
|
|
- Db.PrepareStatement(Fcursor,FTransaction,buf);
|
|
|
|
-end;
|
|
|
|
|
|
|
|
-procedure TSQLQuery.PrepareSelect;
|
|
|
|
-begin
|
|
|
|
- (Database as tsqlconnection).PrepareSelect(FCursor);
|
|
|
|
|
|
+ FCursor.StatementType := GetSQLStatementType(buf);
|
|
|
|
+
|
|
|
|
+ Db.PrepareStatement(Fcursor,FTransaction,buf);
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TSQLQuery.FreeFldBuffers;
|
|
procedure TSQLQuery.FreeFldBuffers;
|
|
@@ -437,10 +432,10 @@ end;
|
|
|
|
|
|
procedure TSQLQuery.Fetch;
|
|
procedure TSQLQuery.Fetch;
|
|
begin
|
|
begin
|
|
- if not (FStatementType in [stSelect]) then
|
|
|
|
|
|
+ if not (Fcursor.StatementType in [stSelect]) then
|
|
Exit;
|
|
Exit;
|
|
|
|
|
|
- FIsEof := (Database as tsqlconnection).Fetch(Fcursor);
|
|
|
|
|
|
+ FIsEof := not (Database as tsqlconnection).Fetch(Fcursor);
|
|
end;
|
|
end;
|
|
|
|
|
|
function TSQLQuery.LoadBuffer(Buffer : PChar): TGetResult;
|
|
function TSQLQuery.LoadBuffer(Buffer : PChar): TGetResult;
|
|
@@ -460,27 +455,14 @@ begin
|
|
FRecordSize := (Database as tsqlconnection).GetfieldSizes(Fcursor);
|
|
FRecordSize := (Database as tsqlconnection).GetfieldSizes(Fcursor);
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TSQLQuery.ExecuteImmediate;
|
|
|
|
-begin
|
|
|
|
-end;
|
|
|
|
-
|
|
|
|
-procedure TSQLQuery.ExecuteParams;
|
|
|
|
-begin
|
|
|
|
- //!! to be implemented
|
|
|
|
-end;
|
|
|
|
-
|
|
|
|
procedure TSQLQuery.Execute;
|
|
procedure TSQLQuery.Execute;
|
|
begin
|
|
begin
|
|
- if FTransaction = nil then
|
|
|
|
- DatabaseError(SErrTransactionnSet);
|
|
|
|
- if not FTransaction.Active then
|
|
|
|
- FTransaction.StartTransaction;
|
|
|
|
(Database as tsqlconnection).execute(Fcursor,FTransaction);
|
|
(Database as tsqlconnection).execute(Fcursor,FTransaction);
|
|
end;
|
|
end;
|
|
|
|
|
|
-function TSQLQuery.AllocRecord: PChar;
|
|
|
|
|
|
+function TSQLQuery.AllocRecord(ExtraSize : integer): PChar;
|
|
begin
|
|
begin
|
|
- Result := AllocMem(FRecordSize);
|
|
|
|
|
|
+ Result := AllocMem(FRecordSize+ExtraSize);
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TSQLQuery.FreeRecord(var Buffer: PChar);
|
|
procedure TSQLQuery.FreeRecord(var Buffer: PChar);
|
|
@@ -491,7 +473,7 @@ end;
|
|
|
|
|
|
function TSQLQuery.GetFieldData(Field: TField; Buffer: Pointer): Boolean;
|
|
function TSQLQuery.GetFieldData(Field: TField; Buffer: Pointer): Boolean;
|
|
begin
|
|
begin
|
|
- result := (Database as tsqlconnection).GetFieldData(Fcursor,Field,buffer,activebuffer);
|
|
|
|
|
|
+ result := (Database as tsqlconnection).GetFieldData(Fcursor,Field,FieldDefs,buffer,activebuffer);
|
|
end;
|
|
end;
|
|
|
|
|
|
function TSQLQuery.GetNextRecord(Buffer: PChar): TGetResult;
|
|
function TSQLQuery.GetNextRecord(Buffer: PChar): TGetResult;
|
|
@@ -509,11 +491,7 @@ end;
|
|
|
|
|
|
procedure TSQLQuery.InternalClose;
|
|
procedure TSQLQuery.InternalClose;
|
|
begin
|
|
begin
|
|
- if FStatementType in [stSelect] then
|
|
|
|
- begin
|
|
|
|
- FreeFldBuffers;
|
|
|
|
- FreeSelect;
|
|
|
|
- end;
|
|
|
|
|
|
+ FreeFldBuffers;
|
|
FreeStatement;
|
|
FreeStatement;
|
|
if DefaultFields then
|
|
if DefaultFields then
|
|
DestroyFields;
|
|
DestroyFields;
|
|
@@ -558,10 +536,8 @@ procedure TSQLQuery.InternalOpen;
|
|
begin
|
|
begin
|
|
try
|
|
try
|
|
PrepareStatement;
|
|
PrepareStatement;
|
|
- GetStatementType;
|
|
|
|
- if FStatementType in [stSelect] then
|
|
|
|
|
|
+ if Fcursor.StatementType in [stSelect] then
|
|
begin
|
|
begin
|
|
- PrepareSelect;
|
|
|
|
Execute;
|
|
Execute;
|
|
FOpen:=True;
|
|
FOpen:=True;
|
|
InternalInitFieldDefs;
|
|
InternalInitFieldDefs;
|
|
@@ -599,7 +575,6 @@ procedure TSQLQuery.ExecSQL;
|
|
begin
|
|
begin
|
|
try
|
|
try
|
|
PrepareStatement;
|
|
PrepareStatement;
|
|
- GetStatementType;
|
|
|
|
Execute;
|
|
Execute;
|
|
finally
|
|
finally
|
|
FreeStatement;
|
|
FreeStatement;
|
|
@@ -620,6 +595,55 @@ begin
|
|
inherited Destroy;
|
|
inherited Destroy;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+Function TSQLQuery.GetSQLStatementType(SQL : String) : TStatementType;
|
|
|
|
+
|
|
|
|
+Var
|
|
|
|
+ L : Integer;
|
|
|
|
+ cmt : boolean;
|
|
|
|
+ P,PE,PP : PChar;
|
|
|
|
+ S : string;
|
|
|
|
+ T : TStatementType;
|
|
|
|
+
|
|
|
|
+begin
|
|
|
|
+ Result:=stNone;
|
|
|
|
+ L:=Length(SQL);
|
|
|
|
+ If (L=0) then
|
|
|
|
+ Exit;
|
|
|
|
+ P:=Pchar(SQL);
|
|
|
|
+ PP:=P;
|
|
|
|
+ Cmt:=False;
|
|
|
|
+ While ((P-PP)<L) do
|
|
|
|
+ begin
|
|
|
|
+ if not (P^ in [' ',#13,#10,#9]) then
|
|
|
|
+ begin
|
|
|
|
+ if not Cmt then
|
|
|
|
+ begin
|
|
|
|
+ // Check for comment.
|
|
|
|
+ Cmt:=(P^='/') and (((P-PP)<=L) and (P[1]='*'));
|
|
|
|
+ if not (cmt) then
|
|
|
|
+ Break;
|
|
|
|
+ end
|
|
|
|
+ else
|
|
|
|
+ begin
|
|
|
|
+ // Check for end of comment.
|
|
|
|
+ Cmt:=Not( (P^='*') and (((P-PP)<=L) and (P[1]='/')) );
|
|
|
|
+ If not cmt then
|
|
|
|
+ Inc(p);
|
|
|
|
+ end;
|
|
|
|
+ end;
|
|
|
|
+ inc(P);
|
|
|
|
+ end;
|
|
|
|
+ PE:=P+1;
|
|
|
|
+ While ((PE-PP)<L) and (PE^ in ['0'..'9','a'..'z','A'..'Z','_']) do
|
|
|
|
+ Inc(PE);
|
|
|
|
+ Setlength(S,PE-P);
|
|
|
|
+ Move(P^,S[1],(PE-P));
|
|
|
|
+ S:=Lowercase(s);
|
|
|
|
+ For t:=stselect to strollback do
|
|
|
|
+ if (S=StatementTokens[t]) then
|
|
|
|
+ Exit(t);
|
|
|
|
+end;
|
|
|
|
+
|
|
function TSQLQuery.getrecordsize : Word;
|
|
function TSQLQuery.getrecordsize : Word;
|
|
|
|
|
|
begin
|
|
begin
|
|
@@ -630,7 +654,18 @@ end.
|
|
|
|
|
|
{
|
|
{
|
|
$Log$
|
|
$Log$
|
|
- Revision 1.3 2004-10-02 14:52:25 michael
|
|
|
|
|
|
+ Revision 1.4 2004-10-10 14:24:22 michael
|
|
|
|
+ * Large patch from Joost Van der Sluis.
|
|
|
|
+ * Float fix in interbase
|
|
|
|
+ + Commit and commitretaining for pqconnection
|
|
|
|
+ + Preparestatement and prepareselect joined.
|
|
|
|
+ + Freestatement and FreeSelect joined
|
|
|
|
+ + TSQLQuery.GetSQLStatementType implemented
|
|
|
|
+ + TBufDataset.AllocBuffer now no longer does a realloc
|
|
|
|
+ + Fetch=True means succesfully got data. False means end of data.
|
|
|
|
+ + Default implementation of GetFieldData implemented/
|
|
|
|
+
|
|
|
|
+ Revision 1.3 2004/10/02 14:52:25 michael
|
|
+ Added mysql connection
|
|
+ Added mysql connection
|
|
|
|
|
|
Revision 1.2 2004/09/26 16:56:32 michael
|
|
Revision 1.2 2004/09/26 16:56:32 michael
|