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

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

?? fr_adotable.pas

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

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

unit FR_ADOTable;

interface

{$I FR.inc}

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

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

  TfrADOTable = class(TfrADODataSet)
  private
    FTable: TADOTable;
    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: TADOTable read FTable;
  end;


implementation

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


{ TfrADODataSet }

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

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

  Flags := Flags or flDontUndo;
end;

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

procedure TfrADODataSet.DefineProperties;

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

procedure TfrADODataSet.SetPropValue(Index: String; Value: Variant);
var
  d : TADOConnection;
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
    FDataSet.Close;
    d := frFindComponent(FDataSet.Owner, Value) as TADOConnection;
    FDataSet.Connection := d;
  end
  else if Index = 'FILTER' then
  begin
    FDataSet.Filter := Value;
    FDataSet.Filtered := Trim(Value) <> '';
  end
  else if Index = 'ENABLEBCD' then
    FDataSet.EnableBCD := Value  
end;

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

  function GetDataBase(Owner: TComponent; d: TADOConnection): 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 := GetDataBase(FDataSet.Owner, FDataSet.Connection)
  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
  else if Index = 'ISEMPTY' then
    Result := FDataSet.IsEmpty
  else if Index = 'ENABLEBCD' then    
    Result := FDataSet.EnableBCD   
end;

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

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


{ TfrADOTable }

constructor TfrADOTable.Create;
begin
  inherited Create;
  FTable := TADOTable.Create(frDialogForm);
  FTable.EnableBCD := False; 
  FDataSet := TADODataSet(FTable);
  FDataSource.DataSet := FDataSet;

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

procedure TfrADOTable.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 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 := '';
    sl := TStringList.Create;
    if FTable.Connection <> nil then
      FTable.Connection.GetTableNames(sl);
    sl.Sort;
    for i := 0 to sl.Count - 1 do
      Result := Result + sl[i] + ';';
    sl.Free;
  end;

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

procedure TfrADOTable.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 = '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 TfrADOTable.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 = 'MASTERSOURCE' then
    Result := frGetDataSetName(FTable.Owner, FTable.MasterSource)
  else if Index = 'TABLENAME' then
    Result := FTable.TableName
end;

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

  if LVersion >= 2 then
    Prop['EnableBCD'] := frReadBoolean(Stream);

  ReadFields(Stream);
  try
    FTable.Active := FFixupList['Active'];
  except;
  end;
end;

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

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

procedure TfrADOTable.JoinEditor(Sender: TObject);
begin
  with TfrADOFieldsLinkForm.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_ADOTABLECONTROL');
  frRegisterControl(TfrADOTable, Bmp, IntToStr(SInsertTable));

finalization
  frUnRegisterObject(TfrADOTable);
  Bmp.Free;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美性感一区二区三区| 青青青爽久久午夜综合久久午夜| 国产福利精品一区二区| 久久综合精品国产一区二区三区 | 日日夜夜精品视频天天综合网| 91国产成人在线| 亚洲愉拍自拍另类高清精品| 色综合天天综合狠狠| 亚洲精品视频一区| 欧美色精品在线视频| 日韩电影免费在线看| 精品伦理精品一区| 国产91精品久久久久久久网曝门| 国产精品久久一卡二卡| 91福利国产精品| 人人精品人人爱| 国产亚洲精品中文字幕| 91老师国产黑色丝袜在线| 午夜精品久久久久久久久久久 | 美女视频网站久久| 国产亚洲美州欧州综合国| 91久久免费观看| 麻豆成人久久精品二区三区红| 中文字幕精品一区二区三区精品| 在线视频亚洲一区| 国产综合成人久久大片91| 亚洲区小说区图片区qvod| 日韩欧美国产wwwww| 成人免费精品视频| 午夜不卡av在线| 国产欧美一二三区| 欧美日韩国产美| 成人中文字幕合集| 亚洲第一搞黄网站| 国产色综合久久| 欧美精品粉嫩高潮一区二区| 国产成人av网站| 午夜精品久久一牛影视| 国产人成一区二区三区影院| 欧美日韩视频专区在线播放| 国产精品亚洲成人| 亚洲aaa精品| 国产精品乱码人人做人人爱| 777午夜精品视频在线播放| 成人免费黄色在线| 激情文学综合丁香| 亚洲第一搞黄网站| 日韩一区在线播放| 精品日韩欧美在线| 欧美日韩久久一区| 99久久精品国产导航| 激情伊人五月天久久综合| 亚洲一线二线三线视频| 国产人成亚洲第一网站在线播放| 欧美一区永久视频免费观看| 91同城在线观看| 国产成人鲁色资源国产91色综| 蜜桃一区二区三区在线观看| 夜夜揉揉日日人人青青一国产精品| 日本一区二区三区高清不卡| 日韩免费一区二区| 7777女厕盗摄久久久| 欧美午夜精品久久久久久超碰| 波多野结衣在线aⅴ中文字幕不卡| 麻豆91小视频| 日本免费在线视频不卡一不卡二| 亚洲欧洲av另类| 国产精品系列在线| 久久久精品免费网站| 337p日本欧洲亚洲大胆精品| 日韩三级精品电影久久久| 欧美日韩另类一区| 欧美精品乱码久久久久久| 色噜噜狠狠色综合欧洲selulu| a美女胸又www黄视频久久| 成人一级片在线观看| 国产福利精品导航| 国产盗摄女厕一区二区三区 | 国产精品美女久久久久aⅴ国产馆| 欧美va天堂va视频va在线| 3d成人动漫网站| 91 com成人网| 91麻豆精品国产自产在线| 欧美日韩不卡一区二区| 正在播放亚洲一区| 7777精品伊人久久久大香线蕉最新版| 欧美日韩免费视频| 欧美精品久久一区二区三区| 欧美一区二区二区| 日韩三级精品电影久久久| 2020国产精品自拍| 欧美国产日本视频| 亚洲精品一二三区| 亚洲福利视频导航| 麻豆精品视频在线| 国产激情一区二区三区| 99久久婷婷国产| 欧美性受极品xxxx喷水| 欧美日韩www| 精品国产乱码久久久久久图片| 欧美精品一区二区三| 国产欧美一区二区精品性色| 亚洲天堂av一区| 亚洲一区二区三区美女| 日韩成人一级大片| 国产美女视频一区| 91美女蜜桃在线| 91精品久久久久久蜜臀| 久久久不卡网国产精品二区| 国产精品成人免费精品自在线观看| 一色屋精品亚洲香蕉网站| 亚洲成人一区在线| 精品一区二区三区在线播放视频| 国产成人精品www牛牛影视| 91麻豆国产香蕉久久精品| 这里只有精品视频在线观看| 国产欧美一区二区精品忘忧草| 亚洲男同1069视频| 另类小说图片综合网| 不卡高清视频专区| 8v天堂国产在线一区二区| 国产女人18水真多18精品一级做 | 国产日韩欧美一区二区三区乱码| 亚洲欧美在线aaa| 精品一区二区三区在线播放| 不卡一区二区在线| 日韩三级中文字幕| 亚洲精品国产精品乱码不99 | 粉嫩av一区二区三区| 欧美日韩国产中文| 中文字幕不卡一区| 日本色综合中文字幕| 99视频在线精品| 欧美成人激情免费网| 亚洲精品视频在线看| 国产一区二区主播在线| 欧美性受xxxx| 国产精品久久久久久久岛一牛影视 | 91啪在线观看| 久久人人超碰精品| 日韩av一级片| 在线观看日韩高清av| 欧美国产精品v| 精品亚洲免费视频| 欧美裸体bbwbbwbbw| 亚洲日本va午夜在线电影| 国产精品自拍毛片| 日韩一区二区视频在线观看| 一区二区三区免费| 97久久精品人人澡人人爽| 国产亚洲一区二区三区| 日韩精品福利网| 欧洲人成人精品| 亚洲男人天堂一区| av一区二区三区四区| 久久精品亚洲精品国产欧美 | 有坂深雪av一区二区精品| 国产高清无密码一区二区三区| 91精品国产综合久久精品| 一区二区三区在线视频免费观看| 成人h版在线观看| 国产精品亲子伦对白| 国产丶欧美丶日本不卡视频| 久久视频一区二区| 国产一区二区在线观看视频| 精品国产免费视频| 久久电影国产免费久久电影| 欧美一级片在线| 免费在线视频一区| 51午夜精品国产| 毛片基地黄久久久久久天堂| 日韩一级二级三级精品视频| 日韩精品久久久久久| 日韩欧美激情一区| 久久97超碰色| 久久日韩粉嫩一区二区三区| 国产真实乱偷精品视频免| 国产亚洲综合在线| av不卡在线观看| 一区二区三区产品免费精品久久75| 91免费看视频| 亚洲成人一区在线| 日韩欧美一区二区久久婷婷| 麻豆传媒一区二区三区| 欧美精品一区男女天堂| 国产精品一区专区| 国产精品亲子乱子伦xxxx裸| 色综合网站在线| 亚洲一区二区黄色| 日韩一级片在线播放| 狠狠色丁香婷综合久久| 国产精品视频九色porn| 91蜜桃网址入口| 日韩成人av影视| 久久免费午夜影院| voyeur盗摄精品| 亚洲成av人综合在线观看| 日韩欧美中文字幕公布| a在线欧美一区| 日本欧美一区二区三区乱码 |