⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 memorydataset.pas

📁 delphi通过OCI访问ORACLE
💻 PAS
字号:
unit MemoryDataSet;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Db, VirtualDataSet, DataSetQuery, DynamicArrays, ADataSet;

type
  TMemoryDataSet = class(TDataSetQuery)
  private
    { Private declarations }
  protected
    { Protected declarations }
  public
   constructor Create(AOwner:TComponent);override;
   procedure OpenWithData(Fields:THArrayPointer);
    // opens MemoryDataSet and fills it with data from parameter Fields
    // Fields - array of pointers on the set of TAField classes
    // each TAField contain a column with data 
    // Fields.Count - will be a count of fields in filling table
    // TAField(Fields[i]).Count - count of records in table (all fields in Fields count must be the same)
   function GetNormalCurrent : integer;
   function VPost(RecordNum:integer):TUpdateAction;override;
   function VInsert(RecordNum:integer):TUpdateAction;override;
   function VDeleteRecord (RecordNum:integer):TUpdateAction; override;
  published
    { Published declarations }
  end;

implementation

constructor TMemoryDataSet.Create(AOwner: TComponent);
begin
 inherited CreateSet(AOwner,qtMemory);
end;

function TMemoryDataSet.GetNormalCurrent : integer;
begin
  if Self.CurrentRecord < 0 then Result := 0
  else  if Self.CurrentRecord > Self.RecordCount-1 then Result := Self.RecordCount-1
  else Result := Self.CurrentRecord;
end;

procedure TMemoryDataSet.OpenWithData(Fields: THArrayPointer);
var i:integer;
begin
 Query.ClearFields;
 FieldDefs.Clear;
 for i:=0 to Fields.Count-1 do
  FieldDefs.Add(TAField(Fields[i]).Name,TypeAToDelphi(TAField(Fields[i]).FieldType),
  TAField(Fields[i]).FieldSize,TAField(Fields[i]).Required);

 Open;
 Query.Open(Fields);
 SyncBookm;
 Refresh;
end;

function TMemoryDataSet.VDeleteRecord(RecordNum: integer): TUpdateAction;
begin
 Result:=uaApplied;
 Query.DeleteRecord(RecordNum);
end;

function TMemoryDataSet.VInsert(RecordNum: integer): TUpdateAction;
begin
 Result:=uaApplied;
 Query.InsertRecord(RecordNum);
end;

function TMemoryDataSet.VPost(RecordNum: integer): TUpdateAction;
begin
 Result:=uaApplied;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -