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

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

?? fr_dbxquery.pas

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

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

unit FR_DBXQuery;

interface

{$I FR.inc}

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

type
  TfrDBXQuery = class(TfrDBXDataSet)
  private
    FQuery: TSQLQuery;
    FParams: TfrVariables;
    procedure SQLEditor(Sender: TObject);
    procedure ParamsEditor(Sender: TObject);
    procedure ReadParams(Stream: TStream);
    procedure WriteParams(Stream: TStream);
    function GetParamKind(Index: Integer): TfrParamKind;
    procedure SetParamKind(Index: Integer; Value: TfrParamKind);
    function GetParamText(Index: Integer): String;
    procedure SetParamText(Index: Integer; Value: String);
    procedure BeforeOpenQuery(DataSet: TDataSet);
  protected
    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 LoadFromStream(Stream: TStream); override;
    procedure SaveToStream(Stream: TStream); override;
    procedure DefineProperties; override;
    procedure Loaded; override;
    property Query: TSQLQuery read FQuery;
    property ParamKind[Index: Integer]: TfrParamKind read GetParamKind write SetParamKind;
    property ParamText[Index: Integer]: String read GetParamText write SetParamText;
  end;


implementation

uses
  FR_Utils, FR_Const, FR_DBSQLEdit, FR_DBXQueryParam
{$IFDEF QBUILDER}
, FR_DBXQB, QBuilder
{$ENDIF}
{$IFDEF Delphi6}
, Variants
{$ENDIF};


{ TfrDBXQuery }

constructor TfrDBXQuery.Create;
begin
  inherited Create;
  FQuery := TSQLQuery.Create(frDialogForm);
  FQuery.BeforeOpen := BeforeOpenQuery;
  FDataSet := TSQLDataSet(FQuery);
  FDataSource.DataSet := FDataSet;

  FParams := TfrVariables.Create;

  Component := FQuery;
  BaseName := 'Query';
  Bmp.LoadFromResourceName(hInstance, 'FR_DBXQUERY');
end;

destructor TfrDBXQuery.Destroy;
begin
  FParams.Free;
  inherited Destroy;
end;

procedure TfrDBXQuery.DefineProperties;

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

begin
  inherited DefineProperties;
  AddEnumProperty('DataSource', GetMasterSource, [Null]);
  AddProperty('Params', [frdtHasEditor], ParamsEditor);
  AddProperty('SQL', [frdtHasEditor], SQLEditor);
  AddProperty('SQL.Count', [], nil);
end;

procedure TfrDBXQuery.SetPropValue(Index: String; Value: Variant);
var
  d: TDataset;
begin
  inherited SetPropValue(Index, Value);
  Index := AnsiUpperCase(Index);
  if Index = 'DATASOURCE' then
  begin
    d := frFindComponent(FQuery.Owner, Value) as TDataSet;
    FQuery.DataSource := frGetDataSource(FQuery.Owner, d);
  end
  else if Index = 'SQL' then
    FQuery.SQL.Text := Value
end;

function TfrDBXQuery.GetPropValue(Index: String): Variant;
begin
  Index := AnsiUpperCase(Index);
  Result := inherited GetPropValue(Index);
  if Result <> Null then Exit;
  if Index = 'DATASOURCE' then
    Result := frGetDataSetName(FQuery.Owner, FQuery.DataSource)
  else if Index = 'SQL' then
    Result := FQuery.SQL.Text
  else if Index = 'SQL.COUNT' then
    Result := FQuery.SQL.Count;
end;

function TfrDBXQuery.DoMethod(MethodName: String; Par1, Par2, Par3: Variant): Variant;
begin
  Result := inherited DoMethod(MethodName, Par1, Par2, Par3);
  if Result = Null then
    Result := LinesMethod(FQuery.SQL, MethodName, 'SQL', Par1, Par2, Par3);
  if MethodName = 'EXECSQL' then
  begin
    BeforeOpenQuery(FQuery);
    FQuery.ExecSQL
  end;
end;

procedure TfrDBXQuery.LoadFromStream(Stream: TStream);
var
  s: String;
begin
  FFixupList.Clear;
  inherited LoadFromStream(Stream);
  FFixupList['DataBase'] := frReadString(Stream);
  Prop['DataBase'] := FFixupList['DataBase'];
  s := frReadString(Stream);
  FFixupList['DataSource'] := s;
  Prop['DataSource'] := FFixupList['DataSource'];
  frReadMemo(Stream, FQuery.SQL);

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

procedure TfrDBXQuery.SaveToStream(Stream: TStream);
begin
  inherited SaveToStream(Stream);
  frWriteString(Stream, Prop['DataBase']);
  frWriteString(Stream, Prop['DataSource']);
  frWriteMemo(Stream, FQuery.SQL);
  frWriteBoolean(Stream, FQuery.Active);
  WriteFields(Stream);
  WriteParams(Stream);
end;

procedure TfrDBXQuery.Loaded;
begin
  Prop['DataSource'] := FFixupList['DataSource'];
  inherited Loaded;
end;

procedure TfrDBXQuery.SQLEditor(Sender: TObject);
begin
  with TfrDBSQLEditorForm.Create(nil) do
  begin
    Query := FQuery;
    M1.Lines.Assign(FQuery.SQL);
{$IFDEF QBUILDER}
    QBEngine := TfrQBDBXEngine.Create(nil);
    TfrQBDBXEngine(QBEngine).Query := FQuery;
    QBEngine.DatabaseName := Prop['Database'];
{$ENDIF}
    if (ShowModal = mrOk) and ((Restrictions and frrfDontModify) = 0) then
    begin
      FQuery.SQL := M1.Lines;
      frDesigner.Modified := True;
    end;
{$IFDEF QBUILDER}
    QBEngine.Free;
{$ENDIF}
    Free;
  end;
end;

procedure TfrDBXQuery.ParamsEditor(Sender: TObject);
var
  Params: TParams;
  ParamValues: TfrVariables;
begin
  if FQuery.Params.Count > 0 then
  begin
    Params := TParams.Create;
    Params.Assign(FQuery.Params);
    ParamValues := TfrVariables.Create;
    ParamValues.Assign(FParams);
    with TfrDBXParamsForm.Create(nil) do
    begin
      QueryComp := Self;
      Query := FQuery;
      Caption := Self.Name + ' ' + frLoadStr(SParams);
      if ShowModal = mrOk then
        frDesigner.Modified := True
      else
      begin
        FQuery.Params.Assign(Params);
        FParams.Assign(ParamValues);
      end;
      Free;
    end;
    Params.Free;
    ParamValues.Free;
  end;
end;

function TfrDBXQuery.GetParamKind(Index: Integer): TfrParamKind;
begin
  Result := pkValue;
  if not FQuery.Params[Index].Bound then
    Result := pkAssignFromMaster;
end;

procedure TfrDBXQuery.SetParamKind(Index: Integer; Value: TfrParamKind);
begin
  if Value = pkAssignFromMaster then
  begin
    FQuery.Params[Index].Bound := False;
    FParams.Delete(FParams.IndexOf(FQuery.Params[Index].Name));
  end
  else
  begin
    FQuery.Params[Index].Clear;
    FQuery.Params[Index].Bound := True;
    FParams[FQuery.Params[Index].Name] := '';
  end;
end;

function TfrDBXQuery.GetParamText(Index: Integer): String;
begin
  Result := '';
  if ParamKind[Index] = pkValue then
    Result := FParams[FQuery.Params[Index].Name];
end;

procedure TfrDBXQuery.SetParamText(Index: Integer; Value: String);
begin
  if ParamKind[Index] = pkValue then
    FParams[FQuery.Params[Index].Name] := Value;
end;

procedure TfrDBXQuery.ReadParams(Stream: TStream);
var
  i: Integer;
  w, n: Word;
begin
  Stream.Read(n, 2);
  for i := 0 to n - 1 do
  with FQuery.Params[i] do
  begin
    Stream.Read(w, 2);
    DataType := ParamTypes[w];
    Stream.Read(w, 2);
    ParamKind[i] := TfrParamKind(w);
    ParamText[i] := frReadString(Stream);
  end;
end;

procedure TfrDBXQuery.WriteParams(Stream: TStream);
var
  i: Integer;
  w: Word;
begin
  w := FQuery.Params.Count;
  Stream.Write(w, 2);
  for i := 0 to FQuery.Params.Count - 1 do
  with FQuery.Params[i] do
  begin
    for w := 0 to 10 do
      if DataType = ParamTypes[w] then
        break;
    Stream.Write(w, 2);
    w := Word(ParamKind[i]);
    Stream.Write(w, 2);
    frWriteString(Stream, ParamText[i]);
  end;
end;

procedure TfrDBXQuery.BeforeOpenQuery(DataSet: TDataSet);
var
  i: Integer;
  SaveView: TfrView;
  SavePage: TfrPage;
  SaveBand: TfrBand;

  function DefParamValue(Param: TParam): String;
  begin
    if Param.DataType in [ftDate, ftDateTime] then
      Result := '01.01.00'
    else if Param.DataType = ftTime then
      Result := '00:00'
    else
      Result := '0';
  end;

begin
  SaveView := CurView;
  CurView := nil;
  SavePage := CurPage;
  CurPage := ParentPage;
  SaveBand := CurBand;
  CurBand := nil;
  i := 0;
  try
    while i < FQuery.Params.Count do
    begin
      if ParamKind[i] = pkValue then
        if DocMode = dmPrinting then
          FQuery.Params[i].Text := frParser.Calc(ParamText[i]) else
          FQuery.Params[i].Text := DefParamValue(FQuery.Params[i]);
      Inc(i);
    end;
  except
    Memo.Clear;
    Memo.Add(ParamText[i]);
    CurView := Self;
    raise;
  end;
  CurView := SaveView;
  CurPage := SavePage;
  CurBand := SaveBand;
end;


var
  Bmp: TBitmap;

initialization
  Bmp := TBitmap.Create;
  Bmp.LoadFromResourceName(hInstance, 'FR_DBXQUERYCONTROL');
  frRegisterControl(TfrDBXQuery, Bmp, IntToStr(SInsertQuery));

finalization
  frUnRegisterObject(TfrDBXQuery);
  Bmp.Free;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲图片有声小说| 成人禁用看黄a在线| 国产精品456| 欧美一区二区三区的| 亚洲成人www| 欧美午夜理伦三级在线观看| 亚洲三级免费电影| 91在线免费看| 亚洲五码中文字幕| 7777精品伊人久久久大香线蕉超级流畅| 一区二区激情小说| 日韩一级视频免费观看在线| 国产在线播放一区三区四| 国产精品久久久久久久午夜片| 色综合久久精品| 日韩精品一卡二卡三卡四卡无卡 | 国产成人av一区二区| 欧美国产一区在线| 欧美在线观看你懂的| 美女一区二区久久| 专区另类欧美日韩| 69av一区二区三区| 福利一区二区在线| 午夜精品爽啪视频| 国产色婷婷亚洲99精品小说| 色综合咪咪久久| 青青草国产精品97视觉盛宴| 中国色在线观看另类| 欧美在线小视频| 国产精品资源在线| 亚洲国产日韩a在线播放性色| 精品国产一区二区精华| 色综合天天综合网国产成人综合天 | 国产精品资源在线看| 亚洲日本在线视频观看| 精品国产123| 欧美三电影在线| 成人午夜在线播放| 蜜臀精品久久久久久蜜臀| 日韩美女啊v在线免费观看| 日韩精品一区二区三区中文不卡 | 国产一区不卡视频| 日本丶国产丶欧美色综合| 午夜精品久久久久久久| www国产精品av| 欧美亚洲尤物久久| 成人国产精品免费观看动漫| 青青草原综合久久大伊人精品| 亚洲欧洲另类国产综合| www激情久久| 欧美一区二区在线免费观看| 在线观看视频一区二区欧美日韩| 国产99久久久久久免费看农村| 午夜精品一区二区三区免费视频| 最新成人av在线| 国产精品久久久一区麻豆最新章节| 欧美日韩一区高清| 成人a区在线观看| 精品在线免费观看| 偷拍一区二区三区四区| 一个色在线综合| 1区2区3区欧美| 国产欧美一区二区精品仙草咪 | 久久 天天综合| 亚洲影院久久精品| 一区二区在线免费| 国产精品国产精品国产专区不片| 久久久精品蜜桃| 久久综合国产精品| 精品国精品国产| 日韩一区国产二区欧美三区| 欧美日韩国产高清一区| 欧美日本一区二区在线观看| 欧美日韩精品系列| 欧美三级韩国三级日本三斤 | 91精品国产综合久久香蕉麻豆| 色婷婷亚洲婷婷| 欧美在线不卡视频| 欧美裸体bbwbbwbbw| 91精品免费在线观看| 69久久夜色精品国产69蝌蚪网| 在线播放一区二区三区| 51久久夜色精品国产麻豆| 5月丁香婷婷综合| 日韩亚洲欧美在线| 2024国产精品视频| 久久久影院官网| 免费成人你懂的| 精品午夜久久福利影院| 国产精品911| 99这里只有久久精品视频| 91麻豆国产香蕉久久精品| 99国产精品国产精品久久| 日本道精品一区二区三区| 欧美乱妇23p| 精品国产制服丝袜高跟| 国产精品嫩草影院av蜜臀| 一区二区三区在线播| 午夜欧美2019年伦理| 国内国产精品久久| 波多野结衣亚洲| 欧美体内she精高潮| 精品国产网站在线观看| 中文字幕av在线一区二区三区| 亚洲女女做受ⅹxx高潮| 蜜臀av一区二区| 成人18精品视频| 欧美日韩精品是欧美日韩精品| 精品日韩一区二区三区免费视频| 国产精品久久久久久久久久免费看| 一级精品视频在线观看宜春院| 蜜臀av性久久久久蜜臀aⅴ流畅 | 亚欧色一区w666天堂| 久久精品国产澳门| www.亚洲精品| 欧美日本乱大交xxxxx| 国产亚洲一本大道中文在线| 亚洲综合色网站| 国产在线视频精品一区| 欧洲精品在线观看| 国产清纯白嫩初高生在线观看91| 夜夜嗨av一区二区三区网页| 激情图区综合网| 欧美三片在线视频观看| 欧美国产日本视频| 日韩精品乱码免费| av亚洲精华国产精华精| 日韩色在线观看| 一区二区三区国产精华| 国产福利91精品一区二区三区| 欧美日韩国产高清一区二区| 国产精品的网站| 国产一区二区三区av电影| 欧美日本乱大交xxxxx| 国产精品久久久久久久午夜片| 麻豆国产欧美日韩综合精品二区| 91网站最新网址| 国产午夜精品久久| 老司机精品视频线观看86 | 日本aⅴ免费视频一区二区三区| 国产99一区视频免费| 欧美成人精品3d动漫h| 亚洲国产欧美一区二区三区丁香婷| 国产精品一卡二卡在线观看| 日韩手机在线导航| 亚洲尤物视频在线| 91丨porny丨蝌蚪视频| 国产肉丝袜一区二区| 久久精品国内一区二区三区| 欧美日韩国产美女| 一区二区三区四区中文字幕| 波多野结衣欧美| 欧美激情在线观看视频免费| 久久精品免费看| 日韩一区二区三区在线视频| 性做久久久久久免费观看欧美| 在线观看欧美黄色| 亚洲精品菠萝久久久久久久| 成人黄色a**站在线观看| 久久九九全国免费| 国产精品亚洲专一区二区三区| xnxx国产精品| 国产做a爰片久久毛片| 久久久精品蜜桃| 国产91露脸合集magnet| 中文字幕av一区二区三区高| 成人午夜免费av| 亚洲国产高清在线| www.视频一区| 亚洲天堂久久久久久久| 色老汉一区二区三区| 一级做a爱片久久| 欧美网站一区二区| 日韩有码一区二区三区| 欧美一区欧美二区| 国产一区二区视频在线播放| 国产视频一区在线播放| www.日韩av| 亚洲自拍欧美精品| 91精品国产欧美一区二区| 久久国产精品72免费观看| 久久久久九九视频| 成人精品小蝌蚪| 亚洲一区在线免费观看| 欧美巨大另类极品videosbest| 久久国产精品区| 欧美激情一区二区三区在线| 99久久精品免费看| 天堂va蜜桃一区二区三区 | 欧美在线观看禁18| 日本中文在线一区| 久久久久国产成人精品亚洲午夜 | 国产一区二区毛片| 国产精品久久久久久久久快鸭 | 91在线观看免费视频| 伊人婷婷欧美激情| 欧美一区二区三区喷汁尤物| 国产91丝袜在线播放| 一区二区三区四区视频精品免费 | 欧美挠脚心视频网站|