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

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

?? fr_dbxtable.pas

?? 工廠進銷存系統,包括權限管理
?? PAS
字號:

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

unit FR_DBXTable;

interface

{$I FR.inc}

uses
  Windows, Messages, SysUtils, Classes, Graphics, FR_Class, StdCtrls,
  Controls, Forms, Menus, Dialogs, DB, DBXpress, SqlExpr, FR_DBSet;

type
  TfrDBXDataset = class(TfrNonVisualControl)
  protected
    FDataSet: TSQLDataSet;
    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;

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


implementation

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


{ TfrDBXDataSet }

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

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

  Flags := Flags or flDontUndo;
end;

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

procedure TfrDBXDataSet.DefineProperties;

  function GetDatabases: String;
  var
    i: Integer;
    sl: TStringList;
  begin
    Result := '';
    sl := TStringList.Create;
    frGetComponents(frDialogForm, TSQLConnection, 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('EOF', [], nil);
  AddProperty('RecordCount', [], nil);
  AddProperty('IsEmpty', [], nil);
end;

procedure TfrDBXDataSet.SetPropValue(Index: String; Value: Variant);
var
  d : TSQLConnection;
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 TSQLConnection;
    FDataSet.SQLConnection := d;
  end
end;

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

  function frGetDataBaseName(Owner: TComponent; d: TSQLConnection): 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.SQLConnection)
  else if Index = 'EOF' then
    Result := FDataSet.Eof
  else if Index = 'RECORDCOUNT' then
    Result := FDataSet.RecordCount
  else if Index = 'FIELDCOUNT' then
    Result := FDataSet.FieldCount
  else if Index = 'ISEMPTY' then
    Result := FDataSet.IsEmpty
end;

function TfrDBXDataSet.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
end;

procedure TfrDBXDataSet.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 TfrDBXDataSet.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 TfrDBXDataSet.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 TfrDBXDataSet.ShowEditor;
begin
  FieldsEditor(nil);
end;

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


{ TfrDBXTable }

constructor TfrDBXTable.Create;
begin
  inherited Create;
  FTable := TSQLTable.Create(frDialogForm);
  FDataSet := TSQLDataSet(FTable);
  FDataSource.DataSet := FDataSet;

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

procedure TfrDBXTable.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.SQLConnection <> nil then
    begin
      sl := TStringList.Create;
      FTable.SQLConnection.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 TfrDBXTable.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 TfrDBXTable.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 TfrDBXTable.LoadFromStream(Stream: TStream);
begin
  FFixupList.Clear;
  inherited LoadFromStream(Stream);
  FFixupList['DataBase'] := frReadString(Stream);
  Prop['DataBase'] := FFixupList['DataBase'];
  FTable.TableName := frReadString(Stream);
  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 TfrDBXTable.SaveToStream(Stream: TStream);
begin
  inherited SaveToStream(Stream);
  frWriteString(Stream, Prop['DataBase']);
  frWriteString(Stream, FTable.TableName);
  frWriteString(Stream, FTable.IndexName);
  frWriteString(Stream, FTable.IndexFieldNames);
  frWriteString(Stream, FTable.MasterFields);
  frWriteString(Stream, Prop['MasterSource']);
  frWriteBoolean(Stream, FTable.Active);
  WriteFields(Stream);
end;

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

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


var
  Bmp: TBitmap;

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

finalization
  frUnRegisterObject(TfrDBXTable);
  Bmp.Free;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美色综合影院| 色综合一区二区三区| 亚洲国产成人自拍| 91成人在线精品| 久久精品国产**网站演员| 久久精品亚洲精品国产欧美kt∨| 91首页免费视频| 日本亚洲天堂网| 久久综合色鬼综合色| 91色视频在线| 久久99精品久久久久久动态图| 国产精品久久久久久妇女6080 | 国产成人av电影在线| 亚洲品质自拍视频网站| 日韩欧美一区二区久久婷婷| 国产精品一区三区| 亚洲国产中文字幕在线视频综合| 精品99一区二区三区| 91美女福利视频| 国产乱码精品一区二区三区五月婷| 亚洲自拍偷拍麻豆| 国产拍揄自揄精品视频麻豆| 欧美美女网站色| 成人午夜av影视| 老司机精品视频线观看86| 亚洲日本免费电影| 久久免费国产精品| 51精品久久久久久久蜜臀| 成人高清视频在线| 日韩—二三区免费观看av| 国产精品久久久久久久久晋中| 欧美伦理视频网站| 91玉足脚交白嫩脚丫在线播放| 国产伦理精品不卡| 蜜臀久久99精品久久久久宅男| 亚洲情趣在线观看| 国产精品毛片大码女人| 久久免费精品国产久精品久久久久| 91精品国产综合久久婷婷香蕉 | 91色|porny| 国产不卡在线一区| 亚洲精品你懂的| 精品视频在线免费看| 日韩精品一区二区三区四区视频| 亚洲图片激情小说| 国产精品女同一区二区三区| 欧美mv日韩mv国产网站| 91精品国模一区二区三区| 欧美三级韩国三级日本一级| 91麻豆国产在线观看| 懂色av一区二区夜夜嗨| 激情都市一区二区| 国产酒店精品激情| 蜜臀久久99精品久久久久宅男| 婷婷夜色潮精品综合在线| 亚洲韩国一区二区三区| 亚洲精品国产成人久久av盗摄| 国产精品国产三级国产普通话三级 | 亚洲美女精品一区| 国产精品视频麻豆| 国产精品人成在线观看免费| 国产视频911| 国产精品网站在线| 亚洲视频在线一区| 亚洲精品ww久久久久久p站| 国产免费观看久久| 国产精品国产三级国产普通话蜜臀| 国产精品网曝门| 亚洲婷婷综合久久一本伊一区| 国产精品毛片大码女人| 亚洲欧美韩国综合色| 亚洲麻豆国产自偷在线| 亚洲综合一区二区三区| 亚洲成av人综合在线观看| 天天操天天干天天综合网| 轻轻草成人在线| 激情小说欧美图片| av电影在线观看一区| 久久电影网电视剧免费观看| 国产综合色视频| 99精品一区二区三区| 一本久道久久综合中文字幕 | 蜜桃一区二区三区在线观看| 韩国v欧美v亚洲v日本v| 风间由美性色一区二区三区| 一本一道久久a久久精品| 欧美性猛交xxxxxxxx| 在线观看日韩毛片| 欧美不卡视频一区| 欧美国产日韩a欧美在线观看| 中文字幕在线不卡视频| 亚洲日本韩国一区| 日韩在线一二三区| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 亚洲综合色噜噜狠狠| 日韩黄色免费网站| 成人综合在线网站| 欧美日韩免费观看一区二区三区| 日韩欧美亚洲国产另类| 亚洲视频你懂的| 免费看黄色91| 91色综合久久久久婷婷| 911精品产国品一二三产区| 一区二区三区四区在线免费观看 | 国产精品免费视频观看| 亚洲五码中文字幕| 国产成人精品综合在线观看 | 9色porny自拍视频一区二区| 欧美日韩一级二级| 欧美激情一区二区三区不卡 | 国产精品一二三四区| 在线观看av不卡| 国产欧美一区二区三区网站| 亚洲高清免费观看| 色婷婷久久久亚洲一区二区三区 | 国产精品伦理在线| 国产在线一区观看| 欧美一区二区日韩一区二区| 亚洲午夜免费视频| 91国产免费看| 国产精品免费aⅴ片在线观看| 国产乱妇无码大片在线观看| 日韩免费视频一区二区| 日本欧美肥老太交大片| 欧美日韩国产首页在线观看| 亚洲一区二区三区不卡国产欧美| fc2成人免费人成在线观看播放 | 欧美一区二区视频网站| 天堂av在线一区| 91精品国产一区二区三区| 午夜视频在线观看一区二区三区| 在线免费观看视频一区| 亚洲一线二线三线视频| 在线视频国产一区| 亚洲国产精品久久艾草纯爱| 欧美日韩国产一区二区三区地区| 亚洲成人精品一区| 制服丝袜一区二区三区| 日本欧美久久久久免费播放网| 91精品国产综合久久久久久久久久| 亚洲五月六月丁香激情| 欧美人牲a欧美精品| 日韩中文字幕一区二区三区| 日韩限制级电影在线观看| 毛片av中文字幕一区二区| 亚洲精品一区二区在线观看| 国产毛片精品一区| 国产精品女同一区二区三区| 色婷婷综合在线| 亚洲成a人片综合在线| 欧美电影精品一区二区| 国产成人av电影在线| 亚洲欧美日韩国产综合在线| 欧美专区亚洲专区| 视频在线观看91| 亚洲电影激情视频网站| 91精品国产手机| 国产精品系列在线观看| 亚洲欧美电影院| 欧美一区二区观看视频| 精品一区二区三区免费| 国产精品久久久久一区二区三区 | 日韩国产欧美在线视频| 日韩视频不卡中文| 国产黄人亚洲片| 一区二区三区免费网站| 91麻豆精品91久久久久同性| 经典三级视频一区| 日韩理论片在线| 欧美一级xxx| 不卡的av电影| 日韩国产欧美在线视频| 国产精品午夜春色av| 欧美精品在线观看播放| 粉嫩嫩av羞羞动漫久久久| 亚洲va欧美va人人爽午夜| 精品久久久久久久人人人人传媒| 99久久精品国产一区二区三区 | 另类调教123区| 亚洲天堂成人在线观看| 6080日韩午夜伦伦午夜伦| 国产白丝精品91爽爽久久| 亚洲精品国产精品乱码不99| 欧美一级久久久久久久大片| 成人性视频免费网站| 青青草精品视频| 亚洲色图清纯唯美| 精品日韩一区二区三区| 色婷婷综合激情| 国产精品自拍三区| 石原莉奈在线亚洲二区| 中文字幕在线一区免费| 精品国产乱码久久久久久夜甘婷婷 | 蜜臀91精品一区二区三区 | 亚洲免费视频成人| 久久久精品人体av艺术| 在线综合视频播放| 色哟哟一区二区| 国产凹凸在线观看一区二区| 日韩黄色一级片|