起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 161|回复: 7

【搞定】在使用X3自带的导航工具的过滤的一些小问题。(续)感谢lisb**

[复制链接]
发表于 2007-5-22 10:15:17 | 显示全部楼层 |阅读模式
旧贴
http://bbs.justep.com/forum.php?mod=viewthread&tid=15231

又出现新的问题,就是客户不想看到“LIKE”,想改成“好像”或者“包含”,这样比较看的懂。

怎么让列出的时候是“好像”,组合SQL语句的时候又变“LIKE”了?

再请帮帮忙,谢谢
回复

使用道具 举报

发表于 2007-5-22 11:51:37 | 显示全部楼层
要修改这几个地方
procedure TSimpleSQLFilterEditor.Init(ADataSet: TBizDataSet;
  AExprItem: TSimpleSQLFilterExprItem);
begin
  FBooleanOpr.Items.Clear;
  FBooleanOpr.Items.Add('');
  FBooleanOpr.Items.Add('AND');
  FBooleanOpr.Items.Add('OR');
  FBooleanOpr.ItemIndex := 0;

  FRelationOpr.Items.Clear;
  FRelationOpr.Items.Add('=');
  FRelationOpr.Items.Add('>');
  FRelationOpr.Items.Add('<');
  FRelationOpr.Items.Add('>=');
  FRelationOpr.Items.Add('<=');
  FRelationOpr.Items.Add('<>');
  FRelationOpr.Items.Add('好像');          //这里
  FRelationOpr.Items.Add('NOT LIKE');
  FRelationOpr.Items.Add('IN');
  FRelationOpr.Items.Add('NOT IN');
  FRelationOpr.Items.Add('BETWEEN');
  FRelationOpr.Items.Add('NOT BETWEEN');
  FRelationOpr.Items.Add('IS NULL');
  FRelationOpr.Items.Add('IS NOT NULL');
  FRelationOpr.ItemIndex := 0;

  if Builder <> nil then
    FLeftEdit.Items.Assign(Builder.BizFields);

  ExprItemToEditor(ADataSet, AExprItem);
end;

procedure TSimpleSQLFilterEditor.ExprItemToEditor(ADataSet: TBizDataSet;
  AExprItem: TSimpleSQLFilterExprItem);
begin
  if AExprItem <> nil then
  begin
    if AExprItem.RelationOpr = 'LIKE' THEN AExprItem.RelationOpr := '好像';  //这里
    FLeftEdit.ItemIndex := FLeftEdit.Items.IndexOf(
      FieldToDisplayName(ADataSet, AExprItem.FieldName));
    FBooleanOpr.ItemIndex := FBooleanOpr.Items.IndexOf(AExprItem.BooleanOpr);
    FRelationOpr.ItemIndex := FRelationOpr.Items.IndexOf(AExprItem.RelationOpr);

    UpdateRelation;
    LoadFieldValues(CurBizField, False);

    FRightEdit.Text := ValueToText(CurBizField.DataType, FIsINOpr,
      AExprItem.FieldValueA);
    FBetweenEdit.Text :=
      ValueToText(CurBizField.DataType, FIsINOpr, AExprItem.FieldValueB);
  end;
end;


procedure TSimpleSQLFilterEditor.EditorToText(var AText: string);
const
  cBinaryText = '%s %s %s';
  cUnaryText = '%s %s';
  cBetweenText = '%s %s %s AND %s';
var
  lBizField: TBizField;
  lRelationOpr: string;   //这里新定义的变量
begin
  AText := '';
  if FLeftEdit.ItemIndex = -1 then Exit;
  lBizField := CurBizField;

  lRelationOpr := FRelationOpr.Text;                        //加这一句
  if lRelationOpr = '好像' then lRelationOpr := 'LIKE';  //加这一句

  case OprKind of
    TOprKind.okBinary:
      AText := Format(cBinaryText, [lBizField.Origin.FullID, lRelationOpr,       //修改FRelationOpr.Text为lRelationOpr
        TextToValue(lBizField.DataType, FIsINOpr, FRightEdit.Text)]);
    TOprKind.okUnary:
      AText := Format(cUnaryText, [lBizField.Origin.FullID, lRelationOpr]);     //同上
    TOprKind.okBetween:
      AText := Format(cBetweenText, [lBizField.Origin.FullID, lRelationOpr,  //同上
        TextToValue(lBizField.DataType, FIsINOpr, FRightEdit.Text),
        TextToValue(lBizField.DataType, FIsINOpr, FBetweenEdit.Text)]);
  else
    OprKindError;
  end;
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-22 14:09:04 | 显示全部楼层
太感激了,再试试先
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-22 14:23:56 | 显示全部楼层
顾此失彼啊。
变成又得加两个%%才能搜索到了。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-22 14:58:23 | 显示全部楼层
还有个问题,就是用“好像”这个来检索时,检索到记录以后,再按过滤,就会弹出窗体,提示出错
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-22 15:02:35 | 显示全部楼层
OK~
原来是我刚刚少改了个东西,解决了。
非常感谢,可以结贴了
回复 支持 反对

使用道具 举报

发表于 2007-5-22 15:10:59 | 显示全部楼层
改了这个后就需要把前一个贴子中改的地方改成这样了
if FRelationOpr.text = '好像' then            //修改此处
  Result := QuotedStr('%' + lText + '%')
else
      Result := QuotedStr(lText);
回复 支持 反对

使用道具 举报

发表于 2007-5-22 15:11:34 | 显示全部楼层
ok,结贴了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-1-10 20:57 , Processed in 0.039790 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表