fpc/packages/fcl-db/tests/sdfdstoolsunit.pas

142 lines
3.5 KiB
ObjectPascal

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;
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';
// Make sure the directory exists so we can write
ForceDirectories(dbname);
DeleteFile(FileName);
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;
Free;
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);
TrimSpace := False;
end;
end;
initialization
RegisterClass(TSdfDSDBConnector);
end.