blob: 6632a4621eccbf8502a6a373ee5af18fde1c9d0a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
unit SdfDSToolsUnit;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, toolsunit,
db,
SdfData;
type
{ TSdfDSDBConnector }
TSdfDSDBConnector = class(TDBConnector)
procedure SetNDatasetSchema(Schema : TStringList);
procedure SetFieldDatasetSchema(Schema : TStringList);
protected
procedure CreateNDatasets; override;
procedure CreateFieldDataset; override;
procedure DropNDatasets; override;
procedure DropFieldDataset; override;
Function InternalGetNDataset(n : integer) : TDataset; override;
Function InternalGetFieldDataset : TDataSet; override;
end;
implementation
{ TSdfDSDBConnector }
procedure TSdfDSDBConnector.SetNDatasetSchema(Schema: TStringList);
begin
Schema.Clear;
Schema.Add('ID=5');
Schema.Add('NAME=50');
end;
procedure TSdfDSDBConnector.SetFieldDatasetSchema(Schema: TStringList);
begin
Schema.Clear;
Schema.Add('ID=5');
Schema.Add('FSTRING=10');
end;
procedure TSdfDSDBConnector.CreateNDatasets;
var countID,n : integer;
begin
if dbname='' then raise Exception.Create('dbname variable not specified. You must specify name= in database.ini');
for n := 0 to MaxDataSet do
begin
with TSdfDataSet.Create(nil) do
begin
FileName := dbname+PathDelim+'fpdev_'+inttostr(n)+'.dat';
// Make sure the directory exists so we can write
ForceDirectories(dbname);
DeleteFile(FileName);
FileMustExist:=False;
SetNDatasetSchema(Schema);
Open;
if n > 0 then for countId := 1 to n do
begin
Append;
FieldByName('ID').AsInteger := countID;
FieldByName('NAME').AsString := 'TestName'+inttostr(countID);
// Explicitly call .post, since there could be a bug which disturbs
// the automatic call to post. (example: when TDataset.DataEvent doesn't
// work properly)
Post;
end;
if state = dsinsert then
Post;
Close;
Free;
end;
end;
end;
procedure TSdfDSDBConnector.CreateFieldDataset;
var i : integer;
begin
if dbname='' then raise Exception.Create('dbname variable not specified. You must specify name= in database.ini');
with TSdfDataSet.Create(nil) do
begin
FileName := dbname+PathDelim+'fpdev_field.dat';
DeleteFile(FileName);
// Make sure the directory exists so we can write
ForceDirectories(dbname);
FileMustExist:=False;
SetFieldDatasetSchema(Schema);
Open;
for i := 0 to testValuesCount-1 do
begin
Append;
FieldByName('ID').AsInteger := i;
FieldByName('FSTRING').AsString := testStringValues[i];
Post;
end;
Close;
end;
end;
procedure TSdfDSDBConnector.DropNDatasets;
var n : integer;
begin
for n := 0 to MaxDataSet do
DeleteFile(ExtractFilePath(dbname)+PathDelim+'fpdev_'+inttostr(n)+'.dat');
end;
procedure TSdfDSDBConnector.DropFieldDataset;
begin
DeleteFile(ExtractFilePath(dbname)+PathDelim+'fpdev_field.dat');
end;
function TSdfDSDBConnector.InternalGetNDataset(n: integer): TDataset;
begin
Result := TSdfDataSet.Create(nil);
with (result as TSdfDataSet) do
begin
FileName := dbname+PathDelim+'fpdev_'+inttostr(n)+'.dat';
SetNDatasetSchema(Schema);
end;
end;
function TSdfDSDBConnector.InternalGetFieldDataset : TDataSet;
begin
Result := TSdfDataSet.Create(nil);
with (result as TSdfDataSet) do
begin
FileName := dbname+PathDelim+'fpdev_field.dat';
SetFieldDatasetSchema(Schema);
end;
end;
initialization
RegisterClass(TSdfDSDBConnector);
end.
|