通用查询组件设计(续)

原创 2004年03月02日 10:25:00

 

通用查询组件设计(续)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

作者:nxyc_twz@163.com

 

 

  前段时间由于工作较忙,无暇整理本组件的相关文档,请大家谅解!以后我会陆续整理公布该组件的所有相关文档及源码!

 

设置默认的匹配类型

procedure TDBFilterDialog.SetDefaultMatchType(const Value: TDBFilterMatchType);

begin

//设置默认的匹配类型

  FDefaultMatchType := Value;

  if Assigned(FDialog) and not (csDesigning in ComponentState) then

    case FDefaultMatchType of

      fdMatchNone :

      begin

        FDialog.grpSearchType.ItemIndex := 0;

        FDialog.cbxNonMatching.Checked := true;

      end;

      fdMatchRange:

        FDialog.pgeCriteria.ActivePage := FDialog.tabByRange;

      else

        FDialog.grpSearchType.ItemIndex := Integer(FDefaultMatchType);

    end;

end;

 

设置字段

procedure TDBFilterDialog.SetFields;

var

  i, j, p : Integer;

  field, display : String;

begin

//设置字段

  FDialog.lstAllFields.Clear;//清除所有字段

  if FFields.Count = 0 then

  begin

    for i := 0 to FDataSet.FieldList.Count - 1 do

     if FDataSet.Fields[i].Visible then //定义查询字段

       FDialog.lstAllFields.Items.AddObject(FDataSet.Fields[i].DisplayName,FDataSet.FieldList.Fields[i]);

  end

  else

    for j := 0 to FFields.Count - 1 do

    begin

      p := Pos(';', FFields.Strings[j]);

      field := Copy(FFields.Strings[j], 1, p - 1);

      if p = Length(FFields.Strings[j]) then

        display := field

      else

        display := Copy(FFields.Strings[j], p+1, Length(FFields.Strings[j]));

      for i := 0 to FDataSet.FieldList.Count - 1 do

        if FDataSet.FieldList.Fields[i].FieldName = field then

        FDialog.lstAllFields.Items.AddObject(display, FDataSet.FieldList.Fields[i]);

    end;

  if FDialog.lstAllFields.Items.Count > 0 then

  begin

    FDialog.lstAllFields.ItemIndex := 0;

    FDialog.FieldsListBoxClick(nil);//单击字段列表框

  end;

end;

 

设置字段列表

procedure TDBFilterDialog.SetFieldsList(const Value: TStringList);

begin

//设置字段列表

  FFields.Assign(Value);

end;

 

设置SQL

procedure TDBFilterDialog.SetOriginalSQL(const Value: TStrings);

var

  i : Integer;

begin

//设置SQL语句

  if FOriginalSQL.Text <> Value.Text then

  begin

    FOriginalSQL.Clear;

    FOriginalSQL.AddStrings(Value);

    if not (csLoading in ComponentState) then

      FFields.Clear;

    FDialog.NewSQL;//新建SQL查询

  end;

  for i := 0 to FOriginalVariables.Count - 1 do

    TDBVariable(FOriginalVariables[i]).Free;//定义参数数据变量类

  FOriginalVariables.Clear;

  if TStrings(GetOrdProp(FDataSet, SQLProp)).Text = '' then

    exit;

 

for i := 0 to TQuery(FDataSet).Params.Count - 1 do

FOriginalVariables.Add(TDBVariable.Create(TQuery(FDataSet).Params[i].Name, TQuery(FDataSet).Params[i].Value)); //定义参数数据变量类

  SetFields;//设置字段

end;

 

恢复SQL

procedure TDBFilterDialog.RestoreSQL;

var

  i : Integer;

begin

//恢复SQL语句

  // Disable the controls while we are working

  FDataSet.DisableControls;

  FDataSet.Close;

  // clear the existing SQL and variable declarations

  // restore the original SQL and variables

  SetOrdProp(FDataSet, SQLProp, Integer(FOriginalSQL));

  if FDataSet is TDataSet then

    for i := 0 to FOriginalVariables.Count - 1 do

      TQuery(FDataSet).ParamByName(TDBVariable(FOriginalVariables[i]).VariableName).Value :=

         TDBVariable(FOriginalVariables[i]).VariableValue

  else

    for i := 0 to FOriginalVariables.Count - 1 do

      TQuery(FDataSet).ParamByName(TdBVariable(FOriginalVariables[i]).VariableName).Value :=

         TDBVariable(FOriginalVariables[i]).VariableValue;

  FDataSet.Open;

  SetFields;

  FDataSet.EnableControls;

  FModifiedSQL.Assign(TStrings(GetOrdProp(FDataSet, SQLProp)));

end;

 

保存参数值

procedure TDBFilterDialog.SaveParamValues;

var

  i : Integer;

begin

//保存参数值

   if FDataSet is TDataSet then

    for i := 0 to FOriginalVariables.Count - 1 do

      TDBVariable(FOriginalVariables[i]).VariableValue :=

        TQuery(FDataSet).ParamByName(TDBVariable(FOriginalVariables[i]).VariableName).Value

  else

    for i := 0 to FOriginalVariables.Count - 1 do

      TDBVariable(FOriginalVariables[i]).VariableValue :=

        TQuery(FDataSet).ParamByName(TDBVariable(FOriginalVariables[i]).VariableName).Value;

end;

 

装载过滤对话框

procedure TDBFilterDialog.Loaded;

var

  i : Integer;

begin

  inherited;

  if Assigned(FDataSet) and not (csDesigning in ComponentState) then

  begin

    SetFields;

    OriginalSQL.Assign(TStrings(GetOrdProp(FDataSet, SQLProp)));

    for i := 0 to TQuery(FDataSet).Params.Count - 1 do

        FOriginalVariables.Add(TDBVariable.Create(TQuery(FDataSet).Params[i].Name,

          TQuery(FDataSet).Params[i].Value));

  end;

end;

 

传送消息

procedure TDBFilterDialog.Notification(AComponent: TComponent;

  Operation: TOperation);

begin

  inherited;

  if (AComponent = FDataset) and (Operation = opRemove) then

    FDataset := nil;

end;

 

构造函数

constructor TDBFilterDialog.Create(AOwner: TComponent);

begin

//构造函数

  inherited Create(AOwner);

  FDialog := TMyDBFilterDialog.Create(self);

  FOptions := [fdShowCaseSensitive, fdShowNonMatching];

  FDefaultMatchType := fdMatchStart;

  Caption := SDBFilterCaption;

  FFields := TStringList.Create;

  FOriginalSQL := TStringList.Create;

  FModifiedSQL := TStringList.Create;

  FOriginalVariables := TList.Create;

end;

析构函数

destructor TDBFilterDialog.Destroy;

var

  i : Integer;

begin

  FDialog.Free;

  FFields.Free;

  FOriginalSQL.Free;

  FModifiedSQL.Free;

  for i := 0 to FOriginalVariables.Count - 1 do

    TDBVariable(FOriginalVariables[i]).Free;

  FOriginalVariables.Free;

  inherited Destroy;

end;

 

执行查询

function TDBFilterDialog.Execute : Boolean;

var

  CurrentSQL : TStrings;

begin

//执行数据查询

  CurrentSQL := TStrings(GetOrdProp(FDataSet, SQLProp));

  // 检查SQL语句是否已经改变了

  if not FModifiedSQL.Equals(CurrentSQL) then

    OriginalSQL := CurrentSQL;

  if FDialog.lstAllFields.Items.Count = 0 then

    SetFields;

  FDialog.grpSearchType.ItemIndex := Integer(FDefaultMatchType);

  if fdShowCaseSensitive in Options then

    FDialog.cbxCaseSensitive.Visible := true

  else

    FDialog.cbxCaseSensitive.Visible := false;

  if fdShowNonMatching in Options then

    FDialog.cbxNonMatching.Visible := true

  else

    FDialog.cbxNonMatching.Visible := false;

  if fdCaseSensitive in Options then

    FDialog.cbxCaseSensitive.Checked := true

  else

    FDialog.cbxCaseSensitive.Checked := false;

  SaveParamValues;//保存参数值

  Result := FDialog.ShowModal = mrOK; //点击确定按钮

  if Result then

    ReBuildSQL;//重建SQL语句

end;

 

js的通用组件

/**  */ var PublicUtil = {     //提示框类型     alertType: {         warnType: 0,         okType: 1...
  • mengxiangzhou
  • mengxiangzhou
  • 2014年09月22日 10:09
  • 555

JQuery插件——通用分页组件

在实际项目开发中,通用的分页组件是必不可少的。下面描述的是关于JavaScript版的分页组件。该组件是基于jquery之上开发的。        该组件包括        jquery-...
  • hsany330
  • hsany330
  • 2016年01月14日 20:53
  • 1322

Apache Commons:功能齐全的通用Java组件

http://hao.jobbole.com/apache-commons/ Apache Commons是一个Apache项目,提供了功能齐全的通用Java组件。 http:...
  • achuo
  • achuo
  • 2017年07月26日 19:13
  • 383

SQL 通用递归查询

在数据库的存储中我们经常会碰到这样的树形数据结构: 最常用就是菜单:   问题的产生:在一个系统的设计中,经常会遇到如上图的表,它由一个id与pid进行层级关系的控制。菜单、角色、部门....都会用...
  • luoyehanfei
  • luoyehanfei
  • 2014年12月08日 13:38
  • 2231

通用SQL数据库查询语句大全

一、 简单查询    简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的表或视图、以及搜索条件等。   例如,下面的语句查询tes...
  • jinyeweiyang
  • jinyeweiyang
  • 2014年09月19日 10:18
  • 491

JDBC(六) 编写通用的更新和查询方法

对于C(创建),U(更新),D(删除)都属于更新操作,对于R(读取查询)属于查询操作。这里编写两个通用的更新和查询方法。更新更新简单,只需要传入对应的sql和sql的占位符,然后执行更新就可以了。/*...
  • qq_25201665
  • qq_25201665
  • 2016年08月23日 13:37
  • 2067

关于软件架构设计的一些思考--通用架构设计模式

最近在着手设计一个服务发布,治理的框架,参考了几个主流框架的代码,比如阿里的Dubbo,传输层的Netty,容器层的Tomcat等等,有一些体会。 经典的《面向对象分析与设计》一书中阐述了为...
  • ITer_ZC
  • ITer_ZC
  • 2014年09月16日 11:44
  • 2513

如何通过 Vue+Webpack 来做通用的前端组件化架构设计

目前如果要说比较流行的前端架构哪家强,屈指可数:reactjs、angularjs、emberjs、avalonjs、vuejs。 我个人接触使用过:avalonjs、angularjs、vue...
  • qq_36648555
  • qq_36648555
  • 2017年11月11日 13:11
  • 385

通用权限管理设计篇(二)——数据库设计

让我们接着来进行数据库的设计。在数据库建模时,对于N对N的关系,一般需要加入一个关联表来表示关联的两者的关系。初步估计一下,本系统至少需要十张表,分别为:权限表、用户表、角色表、组表、用户权限关联表、...
  • Su_tianbiao
  • Su_tianbiao
  • 2015年05月14日 17:54
  • 2155

oracle表设计

oltp: 1按常访问的列(主键等),顺序排列,把允许null的字段放后面 2一个维度一个表,数据值最好是1:1或1:n的关系 3注释的习惯,和索引列表 4表数据和索引数据放不同的表空间 5power...
  • hanbowu
  • hanbowu
  • 2015年06月14日 16:10
  • 994
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:通用查询组件设计(续)
举报原因:
原因补充:

(最多只允许输入30个字)