是这样的,我想做一个比较通用查询,其中我想定义一个记录结构来保存用户所设置的查询条件,结构如下:
type
  Tsql = record
    FieldN: string; //字段名
    Condition: string; //条件
    FieldV: string; //字段值
    Login: string; //逻辑 or and
  end;
  IndexSql = ^Tsql;
每选择一个条件我就这样
  var
    myrecord:=indexsql;
  begin
  new(myrecord);
  with myrecord^ do
  begin
    FieldN := '用户名称';
    Condition := '=';
    FieldV := '''梦妹''';
    Login := 'or';
  end; 
  end; 
如果可以无限的增加的话(可惜不行,我正想找到解决方法).我就可以按如下生成sql语句
mysql :=myrecord.FieldN + myrecord.Condition + myrecord.FieldV;问题就是这个myrecord只能存一条当前的记录,请大家出下高见,有什么更好的解决方法.

解决方案 »

  1.   

    用字符串就可以了,点击查询的时候一起生成sql语句
      

  2.   

    To newYj 能不能具体些?
      

  3.   

    用StringList来存可能要好一点,把这些字段用若干个分隔符连成一个串,把这个串存到StringList中,然后一一解析出来就可以了
      

  4.   

    可建个Tsql类型的数组
    array of Tsql用StringList也挺好
      

  5.   

    TO:hahafan(度过伤心九月)

    可建个Tsql类型的数组
    array of Tsql
    的话,当增加另一条件时用new()时会不允许
      

  6.   

    加个STRINGLIST
    然后没添加一个RECORD的时候
    在STIRNGGRID中ADD一个RCORD啊
      

  7.   

    我也 一般 用string 
    只是  相关的代码 不能被其他模块重复使用,你要是做成一个通用的类
    就更好了,到时候别忘了给我们一份。
      

  8.   

    还是分析SQl语句是条正路.因为SQL语句中的句法格式都是定义好了的.
    而通用查询多半是变动WHERE条件表达式.比较灵活方便.分析起来是很快的.
    像你这样的情况,用TSTRINGLIST的addobject方法加入,以后用  IndexSql (TStringList.data??//or object??)就可以取得.
      

  9.   

    其实很简单,就是要动态生成SQL串吗,把每个条件用逻辑运算符连起
      

  10.   

    用字符串是比较好的,SQL语句本来就是字符串型的,这样省去了转换,字符串其实也很方便、灵活的: 
      MySql_1:='Select * from 表名 Where'
      MySql_2:=MySql+字段名+条件+字段值+条件
      查询时将MySql_2的最后一个条件删除
      MySql:=MySql_1+MySql_2  
    要不把你方法中的各结点存放到TREEVIEW中,这样可以充分体现多条件查询时括号的作用域