国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

通用查詢組件設(shè)計(jì)

2019-11-18 18:26:04
字體:
供稿:網(wǎng)友
通用查詢組件設(shè)計(jì)
 
在當(dāng)前的MIS系統(tǒng)中,數(shù)據(jù)維護(hù)與數(shù)據(jù)查詢是其兩個核心功能。如何設(shè)計(jì)一個通用的查詢組件,使開發(fā)的MIS系統(tǒng)中具備統(tǒng)一的查詢界面,是MIS系統(tǒng)開發(fā)人員一直在償試解決的問題。筆者在多年的MIS系統(tǒng)的開發(fā)設(shè)計(jì)過程中,經(jīng)過不斷的摸索與實(shí)踐,終于設(shè)計(jì)完成了這套相對比較完善、通用的查詢組件。
 
該組件繼承自Tcomponet組件,主要包括一個查詢窗體及一個顯示查詢摘要的窗體。主要設(shè)計(jì)思路是通過設(shè)置Tquery組件的Params(參數(shù))以達(dá)到通用查詢的目的。關(guān)于如何設(shè)計(jì)自定義組件,請參考:創(chuàng)建定制組件
現(xiàn)將其設(shè)計(jì)思路與技巧公布出來,與廣大編程愛好者共勉。定義通用查詢類
 
function WordPos(const AWord, AString: string): Integer;
//在指定字符串中查找字符串
var s: string;
    i, p: Integer;
begin
  s := ' ' + AnsiUpperCase(AString) + ' ';  //忽略大小寫
  for i := 1 to Length(s) do if not (s[i] in Identifiers) then s[i] := ' '; //常量定義
  p := Pos(' ' + AnsiUpperCase(AWord) + ' ', s);  
  Result := p;
end;
 
type
  TDBFilterDialog = class(TComponent)
  PRivate
    FDialog : TMyDBFilterDialog;//查詢窗體類
    FOriginalSQL : TStrings;//原來的SQL語句
    FModifiedSQL : TStrings;//修改后的SQL語句
    FDataSet : TQuery;//數(shù)據(jù)集
    FDefaultMatchType : TDBFilterMatchType;//過濾類型
    FOptions : TDBOptions;//過濾選項(xiàng)
    FCaption: String;//窗體標(biāo)題
    FFields: TStringList;//字段列表
    FOriginalVariables : TList;//變量列表
    SQLProp : String;//SQL屬性
    procedure SetDataSet(const Value: TQuery);//設(shè)置數(shù)據(jù)集
    procedure SetOptions(const Value: TDBOptions);//設(shè)置選項(xiàng)
    procedure SetCaption(const Value: String);//設(shè)置標(biāo)題
    procedure SetDefaultMatchType(const Value: TDBFilterMatchType);//設(shè)置默認(rèn)的匹配類型
    procedure SetFields;//設(shè)置字段
    procedure SetFieldsList(const Value: TStringList);//設(shè)置字段列表
    procedure SetOriginalSQL(const Value: TStrings);//設(shè)置SQL
    procedure RestoreSQL;//恢復(fù)SQL
    procedure SaveParamValues;//保存參數(shù)值
    { Private declarations }
  protected
    { Protected declarations }
    procedure Loaded; override;//裝載過濾對話框
    procedure Notification(AComponent: TComponent;
      Operation: TOperation); override;//傳送消息
    property OriginalSQL : TStrings read FOriginalSQL write SetOriginalSQL;
  public
    { Public declarations }
    constructor Create(AOwner : TComponent); override;//構(gòu)造函數(shù)
    destructor Destroy; override;//析構(gòu)函數(shù)
    function Execute : Boolean;//執(zhí)行查詢
    procedure ReBuildSQL;//重建SQL語句
    property ModifiedSQL : TStrings read FModifiedSQL;
  published
    { Published declarations }
    property Caption : String read FCaption write SetCaption;//設(shè)置標(biāo)題
    property DataSet : TQuery read FDataSet write SetDataSet;//設(shè)置數(shù)據(jù)集
    property DefaultMatchType : TDBFilterMatchType read FDefaultMatchType write SetDefaultMatchType
       default fdMatchStart;//過濾類型
    property Options : TDBOptions read FOptions write SetOptions default
      [fdShowCaseSensitive, fdShowNonMatching];//過濾選項(xiàng)
    property Fields : TStringList read FFields write SetFieldsList;
  end;
 
TDBVariable = class  //參數(shù)數(shù)據(jù)變量
  public
    VariableName : String;  //變量名 
    VariableValue : Variant;  //變量值
    constructor Create(name : String; value : Variant); //構(gòu)造函數(shù),設(shè)置變量名及變量值
  end;
 
constructor TDBVariable.Create(name: String; value : Variant);
begin
//構(gòu)造函數(shù),設(shè)置變量名及變量值
  VariableName := name;
  VariableValue := value;
end;
 
const
  Identifiers = ['a'..'z', 'A'..'Z', '0'..'9', '_', '#', '$', '.', '"', '@'];
procedure Register;//注冊組件
 
procedure Register;
//注冊組件
begin
  RegisterComponents('我的數(shù)據(jù)庫組件', [TDBFilterDialog]);
end; {of Register}
 
//過濾的匹配類型:完全匹配、起始處匹配、結(jié)束處匹配、任意位置匹配、范圍匹配、不匹配
  TDBFilterMatchType = (fdMatchExact, fdMatchStart, fdMatchEnd,
fdMatchAny, fdMatchRange, fdMatchNone);
 
//過濾選項(xiàng):大小寫敏感  顯示大小寫敏感  顯示不匹配記錄
  TDBOption = (fdCaseSensitive, fdShowCaseSensitive, fdShowNonMatching);
  TDBOptions = Set of TDBOption;
 
procedure TDBFilterDialog.SetDataSet(const Value: TQuery);
begin
//設(shè)置數(shù)據(jù)集
  if not ((Value is TQuery) or (Value = nil)) then//如果未指定數(shù)據(jù)集或指定的數(shù)據(jù)集不是Tquery,則發(fā)出異常
    Raise Exception.Create(SDBFilterNonDBError);
//否則 
FDataSet := Value;
SQLProp := 'SQL';   
  if ([csDesigning, csLoading] * ComponentState) = [] then
  begin
    SetFields;//設(shè)置字段
    OriginalSQL := TStrings(GetOrdProp(FDataSet, SQLProp));//
  end;
end;
 
procedure TDBFilterDialog.SetOptions(const Value: TDBOptions);
begin
//設(shè)置選項(xiàng)
  FOptions := Value;
end;
 
procedure TDBFilterDialog.SetCaption(const Value: String);
begin
//設(shè)置標(biāo)題
  FCaption := Value;
  FDialog.Caption := FCaption;
end;
(未完待續(xù))

上一篇:隱藏我的電腦中驅(qū)動器

下一篇:屏蔽“任務(wù)管理器”

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點(diǎn)

疑難解答

圖片精選

網(wǎng)友關(guān)注

主站蜘蛛池模板: 张家港市| 醴陵市| 仙居县| 嘉善县| 江油市| 乌拉特前旗| 张家界市| 墨脱县| 宁阳县| 诸暨市| 嘉定区| 工布江达县| 新蔡县| 阳朔县| 英超| 开江县| 济源市| 华阴市| 白水县| 封开县| 淳化县| 武邑县| 桃江县| 盘锦市| 岳阳市| 嘉善县| 沙田区| 全南县| 花垣县| 天长市| 诸暨市| 泊头市| 英吉沙县| 营山县| 山东省| 泸定县| 和平县| 金乡县| 淄博市| 漳浦县| 信丰县|