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

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

?? dbqbe.pas

?? RX Library contains a large number of components, objects and routines for Borland Delphi with full
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
{*******************************************************}
{                                                       }
{         Delphi VCL Extensions (RX)                    }
{                                                       }
{         Copyright (c) 1995, 1996 AO ROSNO             }
{         Copyright (c) 1997, 1998 Master-Bank          }
{                                                       }
{*******************************************************}

unit DBQBE;

{*************************************************************************}
{ The Delphi TQBEQuery component.                                         }
{ This component derives from TDBDataSet and is much like TQuery except   }
{ the language used for Query is QBE (Query by example).                  }
{ You can create the QBE queries from Paradox or DatabaseDesktop and then }
{ load or paste the query strings in the QBE property of TQBEQuery.       }
{*************************************************************************}

{$I RX.INC}
{$N+,P+,S-}

interface

uses SysUtils, {$IFDEF WIN32} Windows, Bde, {$ELSE} WinTypes, WinProcs,
  DbiErrs, DbiTypes, DbiProcs, {$ENDIF} Classes, Controls, DB, DBTables;

const
  DefQBEStartParam = '#';

type
  TCheckType = (ctNone, ctCheck, ctCheckPlus, ctCheckDesc, ctCheckGroup);

{ TQBEQuery }

  TQBEQuery = class(TDBDataSet)
  private
    FStmtHandle: HDBIStmt;
    FQBE: TStrings;
    FPrepared: Boolean;
    FParams: TParams;
    FStartParam: Char;
    FAuxiliaryTables: Boolean;
{$IFDEF WIN32}
    FText: string;
    FRowsAffected: Integer;
{$ELSE}
    FText: PChar;
{$ENDIF}
{$IFDEF RX_D3}
    FConstrained: Boolean;
{$ENDIF}
    FLocal: Boolean;
    FRequestLive: Boolean;
    FBlankAsZero: Boolean;
    FParamCheck: Boolean;
    function CreateCursor(GenHandle: Boolean): HDBICur;
    procedure ReplaceParams(QBEText: TStrings);
    procedure CreateParams(List: TParams; const Value: PChar);
    procedure FreeStatement;
    function GetQueryCursor(GenHandle: Boolean): HDBICur;
    procedure GetStatementHandle(QBEText: PChar);
    procedure PrepareQBE(Value: PChar);
    procedure QueryChanged(Sender: TObject);
    procedure SetQuery(Value: TStrings);
    procedure SetParamsList(Value: TParams);
    procedure SetPrepared(Value: Boolean);
    procedure SetPrepare(Value: Boolean);
    procedure SetStartParam(Value: Char);
{$IFDEF RX_D4}
    procedure ReadParamData(Reader: TReader);
    procedure WriteParamData(Writer: TWriter);
{$ENDIF}
{$IFDEF WIN32}
    function GetRowsAffected: Integer;
{$ENDIF}
{$IFDEF RX_D5}
  protected
    { IProviderSupport }
    procedure PSExecute; override;
    function PSGetParams: TParams; override;
    procedure PSSetCommandText(const CommandText: string); override;
    procedure PSSetParams(AParams: TParams); override;
{$ENDIF}
  protected
    function CreateHandle: HDBICur; override;
    procedure Disconnect; override;
    function GetParamsCount: Word;
{$IFDEF RX_D4}
    procedure DefineProperties(Filer: TFiler); override;
{$ENDIF}
{$IFDEF RX_V110}
    function SetDBFlag(Flag: Integer; Value: Boolean): Boolean; override;
{$ELSE}
    procedure SetDBFlag(Flag: Integer; Value: Boolean); override;
{$ENDIF}
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    function GetQBEText: PChar;
    procedure ExecQBE;
    function ParamByName(const Value: string): TParam;
    procedure Prepare;
    procedure RefreshQuery;
    procedure UnPrepare;
{$IFNDEF RX_D3}
    function IsEmpty: Boolean;
{$ENDIF}
    property Local: Boolean read FLocal;
    property ParamCount: Word read GetParamsCount;
    property Prepared: Boolean read FPrepared write SetPrepare;
    property StmtHandle: HDBIStmt read FStmtHandle;
{$IFDEF WIN32}
    property Text: string read FText;
    property RowsAffected: Integer read GetRowsAffected;
{$ELSE}
    property Text: PChar read FText;
{$ENDIF}
  published
{$IFDEF RX_D5}
    property AutoRefresh;
{$ENDIF}
    property AuxiliaryTables: Boolean read FAuxiliaryTables write FAuxiliaryTables default True;
    property ParamCheck: Boolean read FParamCheck write FParamCheck default True;
    property StartParam: Char read FStartParam write SetStartParam default DefQBEStartParam;
    { Ensure StartParam is declared before QBE }
    property QBE: TStrings read FQBE write SetQuery;
    { Ensure QBE is declared before Params }
    property BlankAsZero: Boolean read FBlankAsZero write FBlankAsZero default False;
    property Params: TParams read FParams write SetParamsList {$IFDEF RX_D4} stored False {$ENDIF};
    property RequestLive: Boolean read FRequestLive write FRequestLive default False;
    property UpdateMode;
{$IFDEF WIN32}
    property UpdateObject;
  {$IFDEF RX_D3}
    property Constrained: Boolean read FConstrained write FConstrained default False;
    property Constraints stored ConstraintsStored;
  {$ENDIF}
{$ENDIF}
  end;

implementation

uses DBConsts, {$IFDEF RX_D3} BDEConst, {$ENDIF} DBUtils, BdeUtils;

function NameDelimiter(C: Char): Boolean;
begin
  Result := C in [' ', ',', ';', ')', '.', #13, #10];
end;

function IsLiteral(C: Char): Boolean;
begin
  Result := C in ['''', '"'];
end;

{ TQBEQuery }

constructor TQBEQuery.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FQBE := TStringList.Create;
  TStringList(QBE).OnChange := QueryChanged;
  FParams := TParams.Create{$IFDEF RX_D4}(Self){$ENDIF};
  FStartParam := DefQBEStartParam;
  FParamCheck := True;
  FAuxiliaryTables:= True;
{$IFNDEF WIN32}
  FText := nil;
{$ELSE}
  FRowsAffected := -1;
{$ENDIF}
  FRequestLive := False;
end;

destructor TQBEQuery.Destroy;
begin
  Destroying;
  Disconnect;
  QBE.Free;
{$IFNDEF WIN32}
  StrDispose(FText);
{$ENDIF}
  FParams.Free;
  inherited Destroy;
end;

procedure TQBEQuery.Disconnect;
begin
  Close;
  UnPrepare;
end;

procedure TQBEQuery.RefreshQuery;
var
  Bookmark: TBookmark;
begin
  DisableControls;
  Bookmark := GetBookmark;
  try
    Close;
    Open;
    try
      GotoBookmark(Bookmark);
    except
      { ignore exceptions }
    end;
  finally
    FreeBookmark(Bookmark);
    EnableControls;
  end;
end;

procedure TQBEQuery.SetPrepare(Value: Boolean);
begin
  if Value then Prepare
  else UnPrepare;
end;

procedure TQBEQuery.Prepare;
begin
  SetDBFlag(dbfPrepared, True);
  SetPrepared(True);
end;

procedure TQBEQuery.UnPrepare;
begin
  SetPrepared(False);
  SetDBFlag(dbfPrepared, False);
end;

procedure TQBEQuery.SetStartParam(Value: Char);
begin
  if Value <> FStartParam then begin
    FStartParam := Value;
    QueryChanged(nil);
  end;
end;

procedure TQBEQuery.SetQuery(Value: TStrings);
begin
{$IFDEF WIN32}
  if QBE.Text <> Value.Text then begin
{$ENDIF}
    Disconnect;
    TStringList(QBE).OnChange := nil;
    QBE.Assign(Value);
    TStringList(QBE).OnChange := QueryChanged;
    QueryChanged(nil);
{$IFDEF WIN32}
  end;
{$ENDIF}
end;

procedure TQBEQuery.QueryChanged(Sender: TObject);
var
  List: TParams;
begin
{$IFDEF RX_D4}
  if not (csReading in ComponentState) then begin
{$ENDIF RX_D4}
    Disconnect;
  {$IFDEF WIN32}
    FText := QBE.Text;
  {$ELSE}
    StrDispose(FText);
    FText := QBE.GetText;
  {$ENDIF WIN32}
    if ParamCheck or (csDesigning in ComponentState) then begin
      List := TParams.Create{$IFDEF RX_D4}(Self){$ENDIF};
      try
        CreateParams(List, PChar(Text));
        List.AssignValues(FParams);
    {$IFDEF RX_D4}
        FParams.Clear;
        FParams.Assign(List);
      finally
    {$ELSE}
        FParams.Free;
        FParams := List;
      except
    {$ENDIF RX_D4}
        List.Free;
      end;
    end;
{$IFDEF RX_D4}
    DataEvent(dePropertyChange, 0);
  end
  else begin
    FText := QBE.Text;
    FParams.Clear;
    CreateParams(FParams, PChar(Text));
  end;
{$ENDIF RX_D4}
end;

procedure TQBEQuery.SetParamsList(Value: TParams);
begin
  FParams.AssignValues(Value);
end;

{$IFDEF RX_D4}
procedure TQBEQuery.DefineProperties(Filer: TFiler);
begin
  inherited DefineProperties(Filer);
  Filer.DefineProperty('ParamData', ReadParamData, WriteParamData, True);
end;

procedure TQBEQuery.ReadParamData(Reader: TReader);
begin
  Reader.ReadValue;
  Reader.ReadCollection(FParams);
end;

procedure TQBEQuery.WriteParamData(Writer: TWriter);
begin
  Writer.WriteCollection(Params);
end;
{$ENDIF}

function TQBEQuery.GetParamsCount: Word;
begin
  Result := FParams.Count;
end;

procedure TQBEQuery.ReplaceParams(QBEText: TStrings);

  function ReplaceString(const S: string): string;
  var
    I, J, P, LiteralChars: Integer;
    Param: TParam;
    Temp: string;
    Found: Boolean;
  begin
    Result := S;
    for I := Params.Count - 1 downto 0 do begin
      Param := Params[I];
      if Param.DataType = ftUnknown then
        Continue; { ignore undefined params }
      repeat
        P := Pos(StartParam + Param.Name, Result);
        Found := (P > 0) and ((Length(Result) = P + Length(Param.Name)) or
          NameDelimiter(Result[P + Length(Param.Name) + 1]));
        if Found then begin
          LiteralChars := 0;
          for J := 1 to P - 1 do

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产露脸精彩对白| 欧美日韩aaaaa| 日本一区免费视频| 高清beeg欧美| 日韩伦理av电影| 色综合久久中文字幕| 国产精品高潮久久久久无| 国产一区二区在线观看免费| 精品国产凹凸成av人导航| 国产一区二区视频在线| 国产丝袜在线精品| 日本韩国欧美在线| 免费看欧美女人艹b| 国产人成亚洲第一网站在线播放 | 丝袜美腿一区二区三区| 欧美一区二区黄| 国产成a人无v码亚洲福利| 国产精品国产三级国产普通话三级 | 国产精品一区在线观看乱码| 欧美激情一区二区三区不卡| 51午夜精品国产| 国产精品自拍三区| 亚洲色图清纯唯美| 717成人午夜免费福利电影| 国产乱对白刺激视频不卡| 亚洲美女一区二区三区| 91麻豆精品国产| 成人av在线资源网| 丝袜诱惑制服诱惑色一区在线观看 | 久久这里只有精品首页| 一本一道久久a久久精品 | 亚洲一区二区高清| 精品日韩欧美一区二区| 久久不见久久见免费视频7| 亚洲v日本v欧美v久久精品| 美女视频网站黄色亚洲| 国产亚洲婷婷免费| 色丁香久综合在线久综合在线观看| 五月天激情综合网| 中文一区一区三区高中清不卡| 欧美日韩高清在线| 99久久免费精品高清特色大片| 蜜臀国产一区二区三区在线播放| 中文字幕亚洲视频| 2021国产精品久久精品| 欧美日韩国产综合久久| 成人av在线一区二区三区| 久久精品国产澳门| 五月婷婷综合网| 亚洲欧美视频在线观看视频| 久久久久久久电影| 日韩视频永久免费| 欧美精品国产精品| 91色九色蝌蚪| 不卡欧美aaaaa| 国产精品一区二区视频| 老色鬼精品视频在线观看播放| 一区二区三区在线视频观看| 中文字幕第一区| 久久久亚洲精品一区二区三区| 欧美一区永久视频免费观看| 欧美性猛交xxxxxxxx| 91看片淫黄大片一级在线观看| 国产成人日日夜夜| 国产一区高清在线| 激情综合色播激情啊| 蜜乳av一区二区| 另类综合日韩欧美亚洲| 日本在线播放一区二区三区| 亚洲国产你懂的| 亚洲国产精品久久人人爱| 亚洲欧美日韩久久| 亚洲精品亚洲人成人网在线播放| 国产精品久久综合| 欧美国产日韩在线观看| 国产精品久久久久久久久果冻传媒 | 国产精品成人网| 国产欧美精品一区二区色综合朱莉| 亚洲精品在线电影| 欧美精品一区视频| 久久综合久久99| 欧美国产欧美综合| 国产日产欧美一区| 国产精品久久久久久久岛一牛影视 | 久久嫩草精品久久久精品| 精品1区2区在线观看| 久久久午夜精品| 国产精品久久免费看| 亚洲欧美综合在线精品| 一区二区三区日韩精品| 亚洲最新在线观看| 视频在线观看一区二区三区| 人人狠狠综合久久亚洲| 国产一区二区女| 成人aa视频在线观看| 日本精品一级二级| 欧美视频一区在线观看| 3d动漫精品啪啪1区2区免费| 精品福利在线导航| 国产精品色一区二区三区| 一区av在线播放| 日韩精品视频网| 黄色日韩三级电影| 99久久精品久久久久久清纯| 欧美日韩色综合| 精品久久一二三区| 国产精品国产自产拍高清av| 午夜激情一区二区| 国产高清在线观看免费不卡| 色综合色狠狠综合色| 91精品国产福利在线观看| 国产女人18毛片水真多成人如厕| 亚洲蜜臀av乱码久久精品蜜桃| 日韩国产一二三区| 成人自拍视频在线| 欧美日韩激情在线| 国产欧美综合在线观看第十页| 夜夜精品视频一区二区| 精品一区二区三区的国产在线播放| 成人av资源站| 欧美一区二区福利视频| 欧美国产视频在线| 美日韩黄色大片| 色诱视频网站一区| 精品久久人人做人人爱| 一区二区三区成人| 国产激情一区二区三区| 欧美日韩免费高清一区色橹橹| 国产欧美一区二区三区沐欲| 午夜久久久久久久久久一区二区| 国产成人8x视频一区二区| 欧美亚洲综合色| 欧美国产精品专区| 免费在线观看一区二区三区| 91视视频在线直接观看在线看网页在线看| 91精品国产黑色紧身裤美女| 亚洲在线视频免费观看| 国产91精品一区二区| 91精品国产综合久久久久久 | 国产亚洲综合性久久久影院| 亚洲成人精品在线观看| 成人精品在线视频观看| 亚洲精品一区二区三区影院| 丝袜亚洲精品中文字幕一区| 91极品美女在线| 中文一区在线播放| 国产精品一区二区男女羞羞无遮挡| 91精品国产综合久久福利软件| 亚洲欧美国产三级| 丁香一区二区三区| 久久综合国产精品| 蜜桃av一区二区在线观看| 在线不卡一区二区| 亚洲综合清纯丝袜自拍| av中文字幕在线不卡| 国产亚洲精品免费| 国产一区二区伦理片| 日韩精品中文字幕一区二区三区| 日韩中文字幕亚洲一区二区va在线| 在线观看日韩毛片| 亚洲男人的天堂在线观看| 99久久久精品| 亚洲私人影院在线观看| 91免费视频网| 亚洲乱码中文字幕| 色综合久久中文综合久久牛| 亚洲日本成人在线观看| 91亚洲精品一区二区乱码| 1024成人网| 91免费观看在线| 玉足女爽爽91| 欧美日韩一级视频| 日韩一区精品视频| 欧美一级片免费看| 日韩va欧美va亚洲va久久| 欧美一区二区三区播放老司机| 秋霞午夜av一区二区三区| 日韩精品资源二区在线| 国产精品一区二区你懂的| 国产视频911| 成人毛片老司机大片| 亚洲欧美综合网| 欧美性色黄大片| 日韩在线卡一卡二| 欧美大片日本大片免费观看| 国产曰批免费观看久久久| 国产日韩精品一区二区浪潮av| 成人综合婷婷国产精品久久| 亚洲免费在线观看视频| 欧美美女网站色| 精品影视av免费| 国产精品免费视频网站| 欧美在线视频日韩| 秋霞国产午夜精品免费视频| 国产亚洲一区二区三区四区| 色婷婷av一区二区三区gif| 秋霞国产午夜精品免费视频| 欧美国产日韩在线观看| 欧美视频一区在线| 国产在线播放一区三区四|