网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Delphi
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.用API函数在DELPHI中实现“非典型.
.在Dephi中使用TStream读写数据的.
.Delphi实现Singleton模式.
.Delphi控件的使用经验.
.delphi制作的托盘程序.
.有的程序不能运行于win98的原因.
.Delphi数据库编程教程(八).
.从实作标题栏按钮开始浅谈组件的.
.从获取DBGrid行号想到的.
.屏蔽“任务管理器”.
.DELPHI中图像的显示效果.
.怎样在自己的进销存里导入速达、.
.ADO方式下判断数据表是否存在.
.如何在程序中实现XP模式.
.DBGrid使用全书(四).
.公历到农历的转换法.
.Delphi中布尔类型辨析.
.Delphi中MIDAS线程模型种类(MIDA.
.编程打开特殊的系统窗口(如控制面.
.创建不规则形状的Control.

通用查询组件设计(续)

发表日期:2006-2-4


 

通用查询组件设计(续)

作者: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;

 

上一篇:获得远程或本地机器的网卡的MAC 人气:3890
下一篇:区分保留字跟关键字 人气:4456
浏览全部Delphi的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐