home *** CD-ROM | disk | FTP | other *** search
- unit Memtable;
-
- interface
-
- uses Classes, SysUtils, DBTables, DB, DBiTypes, DbiProcs;
-
- type
-
- TInMemoryTable = class( TTable )
- private
- FieldDescs: PFLDDesc;
- NumberOfFields: Integer;
- InMemoryTableName:array[0..79] of char;
- protected
- function CreateHandle: HDBICur; override;
- public
- Constructor CreateLike(
- GivenTable: TTable;
- NewName: String;
- AOwner: TComponent
- );
- destructor Destroy; override;
- end;
-
- implementation
-
- Constructor TInMemoryTable.CreateLike(
- GivenTable: TTable;
- NewName: String;
- AOwner: TComponent
- );
- var
- CursorProperties: CURProps;
- begin
- inherited Create( AOwner);
- StrPCopy( InMemoryTableName, NewName );
- check( DbiGetCursorProps(GivenTable.Handle, CursorProperties));
- NumberOfFields := CursorProperties.iFields;
- FieldDescs := Nil;
- try
- FieldDescs := AllocMem( NumberOfFields * SizeOf( FLDDesc ));
- except
- raise Exception.Create( 'Not enough memory.' )
- end;
- check( DbiGetFieldDescs( GivenTable.handle, FieldDescs ));
- end;
-
- Destructor TInMemoryTable.Destroy;
- begin
- if FieldDescs <> nil then
- FreeMem( FieldDescs, NumberOfFields * SizeOf( FLDDesc ));
- inherited Destroy;
- end;
-
- function TInMemoryTable.CreateHandle: HDBICur;
- begin
- check(
- DbiCreateInMemTable( { Create a temporary table }
- DBHandle, { Database handle }
- InMemoryTableName, { Logical Name }
- NumberOfFields, { No of fields }
- FieldDescs, { Array of field descriptors }
- Result { Returned cursor handle }
- )
- );
- end;
-
- end.
-