亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? fr_ibxtable.pas

?? 工廠進銷存系統(tǒng),包括權限管理
?? PAS
字號:

{******************************************}
{                                          }
{     FastReport v2.4 - IBX components     }
{             Table component              }
{                                          }
{        Copyright (c) 2000 by EMS         }
{ Copyright (c) 1998-2001 by Tzyganenko A. }
{                                          }
{******************************************}

unit FR_IBXTable;

interface

{$I FR.inc}

uses
  Windows, Messages, SysUtils, Classes, Graphics, FR_Class, StdCtrls,
  Controls, Forms, Menus, Dialogs, DB, FR_DBSet, IBDatabase,
  IBCustomDataSet, IBTable;

type
  TfrIBXDataset = class(TfrNonVisualControl)
  protected
    FDataSet: TIBCustomDataSet;
    FDataSource: TDataSource;
    FDBDataSet: TfrDBDataset;
    procedure FieldsEditor(Sender: TObject);
    procedure ReadFields(Stream: TStream);
    procedure WriteFields(Stream: TStream);
    procedure SetPropValue(Index: String; Value: Variant); override;
    function GetPropValue(Index: String): Variant; override;
    function DoMethod(MethodName: String; Par1, Par2, Par3: Variant): Variant; override;
  public
    constructor Create; override;
    destructor Destroy; override;
    procedure DefineProperties; override;
    procedure Loaded; override;
    procedure ShowEditor; override;
  end;

  TfrIBXTable = class(TfrIBXDataSet)
  private
    FTable: TIBTable;
    procedure JoinEditor(Sender: TObject);
  protected
    procedure SetPropValue(Index: String; Value: Variant); override;
    function GetPropValue(Index: String): Variant; override;
  public
    constructor Create; override;
    destructor Destroy; override;
    procedure LoadFromStream(Stream: TStream); override;
    procedure SaveToStream(Stream: TStream); override;
    procedure DefineProperties; override;
    procedure Loaded; override;
    property Table: TIBTable read FTable;
  end;


implementation

uses FR_DBUtils, FR_Utils, FR_Const, FR_LEdit, FR_DBFldEditor, FR_IBXMd
{$IFDEF Delphi6}
, Variants
{$ENDIF};


{ TfrIBXDataSet }

constructor TfrIBXDataSet.Create;
begin
  inherited Create;
  FDataSource := TDataSource.Create(frDialogForm);
  FDataSource.DataSet := nil;

  FDBDataSet := TfrDBDataSet.Create(frDialogForm);
  FDBDataSet.DataSource := FDataSource;

  Flags := Flags or flDontUndo;
end;

destructor TfrIBXDataSet.Destroy;
begin
  FDBDataset.Free;
  FDataSource.Free;
  FDataSet.Free;
  inherited Destroy;
end;

procedure TfrIBXDataSet.DefineProperties;

  function GetDatabases: String;
  var
    i: Integer;
    sl: TStringList;
  begin
    Result := '';
    sl := TStringList.Create;
    frGetComponents(frDialogForm, TIBDatabase, sl, nil);
    sl.Sort;
    for i := 0 to sl.Count - 1 do
      Result := Result + sl[i] + ';';
    sl.Free;
  end;

begin
  inherited DefineProperties;
  AddProperty('Active', [frdtBoolean], nil);
  AddEnumProperty('Database', GetDatabases, [Null]);
  AddProperty('Fields', [frdtHasEditor, frdtOneObject], FieldsEditor);
  AddProperty('FieldCount', [], nil);
  AddProperty('Filter', [frdtString], nil);
  AddProperty('EOF', [], nil);
  AddProperty('RecordCount', [], nil);
{$IFNDEF Delphi2}
  AddProperty('IsEmpty', [], nil);
{$ENDIF}
end;

procedure TfrIBXDataSet.SetPropValue(Index: String; Value: Variant);
var
  d : TIBDatabase;
begin
  inherited SetPropValue(Index, Value);
  Index := AnsiUpperCase(Index);
  if Index = 'NAME' then
  begin
    FDataSource.Name := 'S' + FDataSet.Name;
    FDBDataSet.Name := '_' + FDataSet.Name;
  end
  else if Index = 'ACTIVE' then
    FDataSet.Active := Value
  else if Index = 'DATABASE' then
  begin
    d := frFindComponent(FDataSet.Owner, Value) as TIBDatabase;
    FDataSet.Database := d;
  end
  else if Index = 'FILTER' then
  begin
    FDataSet.Filter := Value;
    FDataSet.Filtered := Trim(Value) <> '';
  end;
end;

function TfrIBXDataSet.GetPropValue(Index: String): Variant;

  function frGetDataBaseName(Owner: TComponent; d: TIBDatabase): String;
  begin
    Result := '';
    if d <> nil then
    begin
      Result := d.Name;
      if d.Owner <> Owner then
        Result := d.Owner.Name + '.' + Result;
    end;
  end;

begin
  Index := AnsiUpperCase(Index);
  Result := inherited GetPropValue(Index);
  if Result <> Null then Exit;
  if Index = 'ACTIVE' then
    Result := FDataSet.Active
  else if Index = 'DATABASE' then
    Result := frGetDataBaseName(FDataSet.Owner, FDataSet.Database)
  else if Index = 'FILTER' then
    Result := FDataSet.Filter
  else if Index = 'EOF' then
    Result := FDataSet.Eof
  else if Index = 'RECORDCOUNT' then
    Result := FDataSet.RecordCount
  else if Index = 'FIELDCOUNT' then
    Result := FDataSet.FieldCount
{$IFNDEF Delphi2}
  else if Index = 'ISEMPTY' then
    Result := FDataSet.IsEmpty
{$ENDIF}
end;

function TfrIBXDataSet.DoMethod(MethodName: String; Par1, Par2, Par3: Variant): Variant;
begin
  Result := inherited DoMethod(MethodName, Par1, Par2, Par3);
  if MethodName = 'GETINDEXPROPERTY' then
  begin
    if Par1 = 'FIELDS' then
      Result := FDataSet.FieldByName(Par2).AsVariant;
  end
  else if MethodName = 'OPEN' then
    FDataSet.Open
  else if MethodName = 'CLOSE' then
    FDataSet.Close
  else if MethodName = 'NEXT' then
    FDataSet.Next
  else if MethodName = 'PRIOR' then
    FDataSet.Prior
  else if MethodName = 'FIRST' then
    FDataSet.First
  else if MethodName = 'LAST' then
    FDataSet.Last
  else if MethodName = 'FETCHALL' then
    FDataSet.FetchAll
end;

procedure TfrIBXDataSet.ReadFields(Stream: TStream);
var
  i: Integer;
  n: Word;
  s: String;
  Field: TField;
  ds1: TDataset;
  fName: String;
  fType: TFieldType;
  fLookup: Boolean;
  fSize: Word;
  fDefs: TFieldDefs;
begin
  fDefs := FDataSet.FieldDefs;
  Stream.Read(n, 2);             // FieldCount
  for i := 0 to n - 1 do
  begin
    fType := TFieldType(frReadByte(Stream));                    // DataType
    fName := frReadString(Stream);                              // FieldName
    fLookup := frReadBoolean(Stream);                           // Lookup
    fSize := frReadWord(Stream);                                // Size

    fDefs.Add(fName, fType, fSize, False);
    Field := fDefs[fDefs.Count - 1].CreateField(FDataSet);
    if fLookup then
      with Field do
      begin
        Lookup := True;
        KeyFields := frReadString(Stream);                      // KeyFields
        s := frReadString(Stream);                              // LookupDataset
        ds1 := frFindComponent(FDataSet.Owner, s) as TDataSet;
        FFixupList['.' + FieldName] := s;
        LookupDataset := ds1;
        LookupKeyFields := frReadString(Stream);                // LookupKeyFields
        LookupResultField := frReadString(Stream);              // LookupResultField
      end;
  end;
end;

procedure TfrIBXDataSet.WriteFields(Stream: TStream);
var
  i: Integer;
  s: String;
  SaveActive: Boolean;
begin
  SaveActive := FDataSet.Active;
  FDataSet.Close;
  frWriteWord(Stream, FDataSet.FieldCount);  // FieldCount
  for i := 0 to FDataSet.FieldCount - 1 do
  with FDataSet.Fields[i] do
  begin
    frWriteByte(Stream, Byte(DataType));          // DataType
    frWriteString(Stream, FieldName);             // FieldName
    frWriteBoolean(Stream, Lookup);               // Lookup
    frWriteWord(Stream, Size);                    // Size

    if Lookup then
    begin
      frWriteString(Stream, KeyFields);           // KeyFields
      if LookupDataset <> nil then
      begin
        s := LookupDataset.Name;
        if LookupDataset.Owner <> FDataSet.Owner then
          s := LookupDataset.Owner.Name + '.' + s;
      end
      else
        s := '';
      frWriteString(Stream, s);                   // LookupDataset
      frWriteString(Stream, LookupKeyFields);     // LookupKeyFields
      frWriteString(Stream, LookupResultField);   // LookupResultField
    end;
  end;
  FDataSet.Active := SaveActive;
end;

procedure TfrIBXDataSet.Loaded;
var
  i: Integer;
  s: String;
  ds: TDataSet;
  f: TField;
begin
// fixup component references
  try
    Prop['DataBase'] := FFixupList['DataBase'];
    for i := 0 to FFixupList.Count - 1 do
    begin
      s := FFixupList.Name[i];
      if s[1] = '.' then // lookup field
      begin
        f := FDataSet.FindField(Copy(s, 2, 255));
        ds := frFindComponent(FDataSet.Owner, FFixupList.Value[i]) as TDataSet;
        f.LookupDataset := ds;
      end
    end;
    Prop['Active'] := FFixupList['Active'];
  except;
  end;
end;

procedure TfrIBXDataSet.ShowEditor;
begin
  FieldsEditor(nil);
end;

procedure TfrIBXDataSet.FieldsEditor(Sender: TObject);
var
  SaveActive: Boolean;
begin
  SaveActive := FDataSet.Active;
  FDataSet.Close;
  with TfrDBFieldsEditorForm.Create(nil) do
  begin
    DataSet := FDataSet;
    ShowModal;
    frDesigner.Modified := True;
    Free;
  end;
  FDataSet.Active := SaveActive;
end;


{ TfrIBXTable }

constructor TfrIBXTable.Create;
begin
  inherited Create;
  FTable := TIBTable.Create(frDialogForm);
  FDataSet := FTable;
  FDataSource.DataSet := FDataSet;

  Component := FTable;
  BaseName := 'Table';
  Bmp.LoadFromResourceName(hInstance, 'FR_IBXTABLE');
end;

destructor TfrIBXTable.Destroy;
begin
  FDataSet := nil;
  FTable.Free;
  inherited Destroy;
end;

procedure TfrIBXTable.DefineProperties;

  function GetIndexNames: String;
  var
    i: Integer;
  begin
    Result := '';
    try
      with FTable do
      if (TableName <> '') and (IndexDefs <> nil) then
      begin
        IndexDefs.Update;
        for i := 0 to IndexDefs.Count - 1 do
          if IndexDefs[i].Name <> '' then
            Result := Result + IndexDefs[i].Name + ';';
      end;
    except;
    end;
  end;

  function GetIndexFieldNames: String;
  begin
    Result := '';
    try
      with FTable do
      if (TableName <> '') then
      begin
        Result := IndexFieldNames;
      end;
    except
    end;
  end;

  function GetMasterSource: String;
  var
    i: Integer;
    sl: TStringList;
  begin
    Result := '';
    sl := TStringList.Create;
    frGetComponents(FTable.Owner, TDataSet, sl, FTable);
    sl.Sort;
    for i := 0 to sl.Count - 1 do
      Result := Result + sl[i] + ';';
    sl.Free;
  end;

  function GetTableNames: String;
  var
    i: Integer;
    sl: TStringList;
  begin
    Result := '';
    if FTable.Database <> nil then
    begin
      sl := TStringList.Create;
      FTable.DataBase.GetTableNames(sl, False);
      sl.Sort;
      for i := 0 to sl.Count - 1 do
        Result := Result + sl[i] + ';';
      sl.Free;
    end;
  end;

begin
  inherited DefineProperties;

  AddEnumProperty('IndexName', GetIndexNames, [Null]);
  AddEnumProperty('IndexFieldNames', GetIndexFieldNames, [Null]);
  AddProperty('MasterFields', [frdtHasEditor, frdtOneObject], JoinEditor);
  AddEnumProperty('MasterSource', GetMasterSource, [Null]);
  AddEnumProperty('TableName', GetTableNames, [Null]);
end;

procedure TfrIBXTable.SetPropValue(Index: String; Value: Variant);
var
  d: TDataset;
begin
  inherited SetPropValue(Index, Value);
  Index := AnsiUpperCase(Index);
  if Index = 'INDEXNAME' then
    FTable.IndexName := Value
  else if Index = 'INDEXFIELDNAMES' then
    FTable.IndexFieldNames := Value
  else if Index = 'MASTERSOURCE' then
  begin
    d := frFindComponent(FTable.Owner, Value) as TDataSet;
    FTable.MasterSource := frGetDataSource(FTable.Owner, d);
  end
  else if Index = 'TABLENAME' then
    FTable.TableName := Value
end;

function TfrIBXTable.GetPropValue(Index: String): Variant;
begin
  Index := AnsiUpperCase(Index);
  Result := inherited GetPropValue(Index);
  if Result <> Null then Exit;
  if Index = 'INDEXNAME' then
    Result := FTable.IndexName
  else if Index = 'INDEXFIELDNAMES' then
    Result := FTable.IndexFieldNames
  else if Index = 'MASTERSOURCE' then
    Result := frGetDataSetName(FTable.Owner, FTable.MasterSource)
  else if Index = 'TABLENAME' then
    Result := FTable.TableName
end;

procedure TfrIBXTable.LoadFromStream(Stream: TStream);
begin
  FFixupList.Clear;
  inherited LoadFromStream(Stream);
  FFixupList['DataBase'] := frReadString(Stream);
  Prop['DataBase'] := FFixupList['DataBase'];
  FTable.TableName := frReadString(Stream);
  FTable.Filter := frReadString(Stream);
  FTable.Filtered := Trim(FTable.Filter) <> '';
  FTable.IndexName := frReadString(Stream);
  FTable.IndexFieldNames := frReadString(Stream);
  FTable.MasterFields := frReadString(Stream);
  FFixupList['MasterSource'] := frReadString(Stream);
  Prop['MasterSource'] := FFixupList['MasterSource'];
  FFixupList['Active'] := frReadBoolean(Stream);
  ReadFields(Stream);
  try
    FTable.Active := FFixupList['Active'];
  except;
  end;
end;

procedure TfrIBXTable.SaveToStream(Stream: TStream);
begin
  inherited SaveToStream(Stream);
  frWriteString(Stream, Prop['DataBase']);
  frWriteString(Stream, FTable.TableName);
  frWriteString(Stream, FTable.Filter);
  frWriteString(Stream, FTable.IndexName);
  frWriteString(Stream, FTable.IndexFieldNames);
  frWriteString(Stream, FTable.MasterFields);
  frWriteString(Stream, Prop['MasterSource']);
  frWriteBoolean(Stream, FTable.Active);
  WriteFields(Stream);
end;

procedure TfrIBXTable.Loaded;
begin
  Prop['MasterSource'] := FFixupList['MasterSource'];
  inherited Loaded;
end;

procedure TfrIBXTable.JoinEditor(Sender: TObject);
begin
  with TfrIBXFieldsLinkForm.Create(nil) do
  begin
    MasterDS := frFindComponent(FTable.Owner, Prop['MasterSource']) as TDataSet;
    DetailDS := FTable;
    if MasterDS <> nil then
    begin
      ShowModal;
      frDesigner.Modified := True;
    end;
    Free;
  end;
end;


var
  Bmp: TBitmap;

initialization
  Bmp := TBitmap.Create;
  Bmp.LoadFromResourceName(hInstance, 'FR_IBXTABLECONTROL');
  frRegisterControl(TfrIBXTable, Bmp, IntToStr(SInsertTable));

finalization
  frUnRegisterObject(TfrIBXTable);
  Bmp.Free;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线播放日韩导航| 亚洲天堂网中文字| 在线视频中文字幕一区二区| 美女一区二区视频| 亚洲欧洲www| 久久久综合视频| 欧美日韩第一区日日骚| 成人中文字幕合集| 日本美女一区二区三区视频| 中文字幕亚洲区| 久久精品在这里| 欧美一级久久久| 欧美日韩激情在线| 欧美优质美女网站| 91在线porny国产在线看| 国内精品视频666| 日韩影院免费视频| 首页欧美精品中文字幕| 亚洲男同性视频| 综合电影一区二区三区 | 成人免费电影视频| 国产乱人伦精品一区二区在线观看| 日韩综合在线视频| 亚洲乱码一区二区三区在线观看| 欧美精品一区二区三区高清aⅴ | 69久久夜色精品国产69蝌蚪网| 色婷婷综合久久久久中文一区二区 | 欧美日韩一区 二区 三区 久久精品| av中文字幕一区| 97se亚洲国产综合在线| 99视频精品在线| 色综合久久综合网| 91麻豆.com| 欧美日韩一区二区在线视频| 欧美在线看片a免费观看| 欧美在线不卡一区| 欧美一区二区三区在线视频| 一本色道**综合亚洲精品蜜桃冫| 色嗨嗨av一区二区三区| 一本一本大道香蕉久在线精品| 91在线高清观看| 欧美日韩aaaaaa| 欧美tickling网站挠脚心| 日韩精品中文字幕一区| 2021国产精品久久精品| 91无套直看片红桃| 国产99一区视频免费| 成人国产在线观看| 色屁屁一区二区| 欧美tickling挠脚心丨vk| 精品国产亚洲一区二区三区在线观看| 精品日韩成人av| 中文字幕一区二区三区四区| 亚洲视频在线一区| 亚洲一区二区三区在线播放| 日本成人在线电影网| 国产精品77777| 欧美日韩综合不卡| 久久色在线视频| 亚洲国产日韩一区二区| 国产成人免费av在线| 在线观看日韩国产| 欧美国产日韩在线观看| 亚洲一区二区视频在线| 粉嫩aⅴ一区二区三区四区五区| 欧美做爰猛烈大尺度电影无法无天| 91精品国产乱| 中文字幕亚洲成人| 国产乱码一区二区三区| 欧美日韩日本视频| 亚洲色图制服诱惑| 国产乱国产乱300精品| 色噜噜夜夜夜综合网| 中文欧美字幕免费| 麻豆国产精品一区二区三区 | 在线亚洲免费视频| 国产精品丝袜91| 精品一区二区三区在线播放 | 国产精品系列在线播放| 在线播放91灌醉迷j高跟美女 | 久久国产精品免费| 欧美美女bb生活片| 亚洲在线视频网站| 91成人免费在线视频| 日本一区二区不卡视频| 国产综合久久久久久鬼色| 欧美精品丝袜中出| 三级欧美在线一区| 欧美片网站yy| 亚洲成av人片| 欧美色图激情小说| 亚洲福利视频一区| 91精品久久久久久久久99蜜臂| 亚洲综合999| 91女人视频在线观看| 国产精品福利一区| 色综合久久久久久久| 一区二区三区毛片| 欧美日韩国产经典色站一区二区三区 | 成人小视频免费在线观看| 久久久久久久久久久电影| 高清在线成人网| 亚洲色图视频网| 欧美久久一二区| 毛片不卡一区二区| 亚洲国产高清aⅴ视频| 一本大道综合伊人精品热热| 一区二区在线电影| 在线不卡中文字幕| 国产一区二区三区在线观看免费 | 欧美一级黄色录像| 国产精品99久久久久久似苏梦涵| 中日韩av电影| 欧美日韩国产综合一区二区 | 中文字幕在线观看一区二区| 色婷婷激情一区二区三区| 亚洲成人资源在线| 精品国产三级电影在线观看| 成人动漫在线一区| 91视频一区二区三区| 久久综合久久99| 成人性色生活片| 青青国产91久久久久久| 亚洲精品一线二线三线无人区| 国产成人免费在线| 亚洲在线视频免费观看| 久久人人爽爽爽人久久久| 色国产精品一区在线观看| 韩国三级电影一区二区| 亚洲一区在线观看视频| 欧美成人三级在线| 欧洲生活片亚洲生活在线观看| 热久久久久久久| 伊人婷婷欧美激情| 欧美国产精品一区二区| 日韩欧美在线网站| 色综合久久精品| 国产成人小视频| 奇米四色…亚洲| 亚洲成人www| 亚洲精品欧美激情| 国产精品不卡一区| 久久久久久久久99精品| 日韩精品一区二区三区视频在线观看 | a在线欧美一区| 国产精品1024久久| 国产剧情av麻豆香蕉精品| 视频一区视频二区在线观看| 亚洲乱码国产乱码精品精小说| 国产精品盗摄一区二区三区| 337p日本欧洲亚洲大胆精品 | 美女视频黄 久久| 亚洲人成在线播放网站岛国| 国产午夜亚洲精品不卡| 欧美精品一区二区三区久久久| 欧美精品久久久久久久多人混战| 色吧成人激情小说| 欧美制服丝袜第一页| 欧美色偷偷大香| 欧美精品九九99久久| 日韩视频免费直播| 精品久久久久香蕉网| 亚洲精品一区二区三区精华液| 欧美成人精品高清在线播放| 日韩免费观看2025年上映的电影 | 欧美精品在线观看播放| 欧美一区二区视频网站| 精品国产乱码久久久久久夜甘婷婷| 欧美一区二区视频观看视频 | 亚洲国产精品一区二区久久| 午夜精品视频一区| 激情av综合网| 99久久99久久精品免费看蜜桃| 色综合天天狠狠| 在线不卡欧美精品一区二区三区| 欧美精品乱码久久久久久按摩| 91精品久久久久久久久99蜜臂| 欧美一区二区三区系列电影| 欧美大度的电影原声| 欧美高清在线精品一区| 亚洲一区二区精品3399| 午夜a成v人精品| 风间由美一区二区三区在线观看| 色哟哟精品一区| 日韩一级片网址| 中文字幕日本不卡| 九九久久精品视频| 99国产精品久久久久久久久久| 在线不卡一区二区| 一区二区三区四区在线播放 | 高清不卡在线观看| 色噜噜狠狠色综合中国| 欧美精品一区在线观看| 国产精品高清亚洲| 久久国产精品99久久久久久老狼| 国产麻豆午夜三级精品| 欧美日韩日本视频| 一区二区视频在线看| k8久久久一区二区三区| 精品久久久久久久久久久久久久久 |