8
Classes, SysUtils, toolsunit,
10
sqldb, ibconnection, mysql40conn, mysql41conn, mysql50conn, pqconnection,odbcconn,oracleconnection;
12
type TSQLDBTypes = (mysql40,mysql41,mysql50,postgresql,interbase,odbc,oracle);
14
const MySQLdbTypes = [mysql40,mysql41,mysql50];
15
DBTypesNames : Array [TSQLDBTypes] of String[19] =
16
('MYSQL40','MYSQL41','MYSQL50','POSTGRESQL','INTERBASE','ODBC','ORACLE');
20
TSQLDBConnector = class(TDBConnector)
21
FConnection : TSQLConnection;
22
FTransaction : TSQLTransaction;
25
procedure CreateFConnection;
26
procedure CreateFTransaction;
27
Function CreateQuery : TSQLQuery;
29
procedure CreateNDatasets; override;
30
procedure CreateFieldDataset; override;
31
procedure DropNDatasets; override;
32
procedure DropFieldDataset; override;
33
Function InternalGetNDataset(n : integer) : TDataset; override;
34
Function InternalGetFieldDataset : TDataSet; override;
36
destructor Destroy; override;
37
constructor Create; override;
38
property Connection : TSQLConnection read FConnection;
39
property Transaction : TSQLTransaction read FTransaction;
40
property Query : TSQLQuery read FQuery;
43
var SQLDbType : TSQLDBTypes;
49
procedure TSQLDBConnector.CreateFConnection;
52
for i := low(DBTypesNames) to high(DBTypesNames) do
53
if UpperCase(dbconnectorparams) = DBTypesNames[i] then sqldbtype := i;
55
if SQLDbType = MYSQL40 then Fconnection := tMySQL40Connection.Create(nil);
56
if SQLDbType = MYSQL41 then Fconnection := tMySQL41Connection.Create(nil);
57
if SQLDbType = MYSQL50 then Fconnection := tMySQL50Connection.Create(nil);
58
if SQLDbType = POSTGRESQL then Fconnection := tpqConnection.Create(nil);
59
if SQLDbType = INTERBASE then Fconnection := tIBConnection.Create(nil);
60
if SQLDbType = ODBC then Fconnection := tODBCConnection.Create(nil);
61
if SQLDbType = ORACLE then Fconnection := TOracleConnection.Create(nil);
63
if not assigned(Fconnection) then writeln('Invalid database-type, check if a valid database-type was provided in the file ''database.ini''');
67
DatabaseName := dbname;
69
Password := dbpassword;
70
HostName := dbhostname;
75
procedure TSQLDBConnector.CreateFTransaction;
78
Ftransaction := tsqltransaction.create(nil);
80
database := Fconnection;
83
Function TSQLDBConnector.CreateQuery : TSQLQuery;
86
Result := TSQLQuery.create(nil);
89
database := Fconnection;
90
transaction := Ftransaction;
94
procedure TSQLDBConnector.CreateNDatasets;
95
var CountID : Integer;
98
Ftransaction.StartTransaction;
99
Fconnection.ExecuteDirect('create table FPDEV ( ' +
100
' ID INT NOT NULL, ' +
101
' NAME VARCHAR(50), ' +
102
' PRIMARY KEY (ID) ' +
105
FTransaction.CommitRetaining;
107
for countID := 1 to MaxDataSet do
108
Fconnection.ExecuteDirect('insert into FPDEV (ID,NAME)' +
109
'values ('+inttostr(countID)+',''TestName'+inttostr(countID)+''')');
113
if Ftransaction.Active then Ftransaction.Rollback
117
procedure TSQLDBConnector.CreateFieldDataset;
118
var CountID : Integer;
121
Ftransaction.StartTransaction;
122
Fconnection.ExecuteDirect('create table FPDEV_FIELD ( ' +
123
' ID INT NOT NULL, ' +
124
' FSTRING VARCHAR(10), ' +
127
' FDATETIME TIMESTAMP, ' +
128
' PRIMARY KEY (ID) ' +
131
FTransaction.CommitRetaining;
133
for countID := 0 to testValuesCount-1 do
134
Fconnection.ExecuteDirect('insert into FPDEV_FIELD (ID,FSTRING,FINTEGER,FDATE,FDATETIME)' +
135
'values ('+inttostr(countID)+','''+testStringValues[CountID]+''','''+inttostr(testIntValues[CountID])+''','''+testDateValues[CountID]+''','''+testDateValues[CountID]+''')');
139
if Ftransaction.Active then Ftransaction.Rollback
143
procedure TSQLDBConnector.DropNDatasets;
146
if Ftransaction.Active then Ftransaction.Rollback;
147
Ftransaction.StartTransaction;
148
Fconnection.ExecuteDirect('DROP TABLE FPDEV');
151
if Ftransaction.Active then Ftransaction.Rollback
155
procedure TSQLDBConnector.DropFieldDataset;
158
if Ftransaction.Active then Ftransaction.Rollback;
159
Ftransaction.StartTransaction;
160
Fconnection.ExecuteDirect('DROP TABLE FPDEV_FIELD');
163
if Ftransaction.Active then Ftransaction.Rollback
167
function TSQLDBConnector.InternalGetNDataset(n: integer): TDataset;
169
Result := CreateQuery;
170
with (Result as TSQLQuery) do
173
sql.add('SELECT * FROM FPDEV WHERE ID < '+inttostr(n+1));
177
function TSQLDBConnector.InternalGetFieldDataset: TDataSet;
179
Result := CreateQuery;
180
with (Result as TSQLQuery) do
183
sql.add('SELECT * FROM FPDEV_FIELD');
187
destructor TSQLDBConnector.Destroy;
190
if Ftransaction.Active then Ftransaction.Rollback;
191
Ftransaction.StartTransaction;
192
Fconnection.ExecuteDirect('DROP TABLE FPDEV2');
195
if Ftransaction.Active then Ftransaction.Rollback
200
FreeAndNil(FTransaction);
201
FreeAndNil(FConnection);
204
constructor TSQLDBConnector.Create;
209
FQuery := CreateQuery;
210
FConnection.Transaction := FTransaction;
215
RegisterClass(TSQLDBConnector);