123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- 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.
|