做了个简单的人事表,通过窗体查询,查询内容是通过填写几个edit的内容查询,查询的内容有姓名,性别,部门,学历,职称,职务,年龄(多少岁之多少岁,通过俩个edit添写),然后通过一个查询按钮在gbgrid1中显示查询的内容。有时只查姓名,或有时查部门和学历,有是全部查,查完时用一个label显示查到记录的个数,代码什么写呀。要是我给的分不够,我再加。

解决方案 »

  1.   

    var
    s:string;
    st1:tstringlist;
    st2:tstringlist;
    i:integer;
    begin
    St1:=TStringlist.create;
    St2:=TStringlist.create;
       st1.Add('姓名 Like '+''''+'%'+cxtj1.Text+'%'+'''');
       st1.Add('性别 Like '+''''+'%'+cxtj2.Text+'%'+'''');
    ......你能想到的若干条件,但条件不能是空,自己判断一下。
        if st1.Count=1 then//如果只有一个条件
            st2.add(st1.text) else
                    begin
                    for i:=0 to st1.count-1 do//多个条件
                    begin
                            st2.Add(st1[i]);
                           if i+1<>st1.count then   st2.Add(' and ');//与的条件
                    end;
                    end;Query1.sql.add('select * from 查询表 where ');
    Query1.sql.AddStrings(st2);
    Query1.Open;<-查询
    label1.caption:=inttostr(query1.recordcount);st1.free;
    st2.free;
    end;
      

  2.   

    给你提供个思路吧!
    with adoquery1 DO
    begin
    Close;
    sql.Clear;
    sql.add(' SELECT * FROM table1 where 1=1');//没有查询条件的时候显示所有的数据
    if edit1.Text<>''then
    sql.add(' and where ....');
    if .......
    最后open
    End;
      

  3.   

    我想问一下,因为我现在也遇到了类似问题,这句话
    '姓名 Like '+''''+'%'+cxtj1.Text+'%'+''''用到查询语句中能返回结果嘛,我每次只能加一边‘%’语句才能返回结果
      

  4.   

    select * from xxx where abc like '%aaa%'
    这是sql的基本语法,自己去查吧。
      

  5.   

    有个朋友写的是
    比方说你一个表Employee,  有一个字为EmployeeName;你要查SELECT * FROM Employee 
    那就用简单一点吧
    var
      SQL: string;
    begin
      SQL := 'SELECT * FROM Employee WHERE 1 = 1';
      if Trim(edtEmployeeName.Text) <> '' then
        SQL := SQL + ' AND EmpoyeeName = ' + QuotedStr(Edit1.Text);
      if ............有点看不懂。能帮我说明一下吗?
      

  6.   

    其实只是使用了一个技巧,如果Trim(edtEmployeeName.Text) <>‘’的话,sql语句就是'SELECT * FROM Employee WHERE 1 = 1 AND EmpoyeeName = QuotedStr(Edit1.Text);
    1永远等于1,所以这句话可以理解为SELECT * FROM Employee WHERE 1 = 1 AND EmpoyeeName = QuotedStr(Edit1.Text)
    如果Trim(edtEmployeeName.Text) =‘’的话,sql语句就是SELECT * FROM Employee WHERE 1 = 1,等价于select * from employee;
    也就是说,1=1是为了语法上的正确,避免出现这种情况:'SELECT * FROM Employee WHERE
      

  7.   

    有别的方法吗?用SQL写很容易凡逻辑错误。
      

  8.   

    <a href='http://www.163.com'>www.163.com<a/>
      

  9.   

    不写SQL语句还可以用Table做,设置Filter := (字段1的条件) AND (字段2的条件) AND...
    Filtered := False;
    Filter := '';
    if Edit1 <> '' then
      Filter := Filter + '(' + Trim(Edit1.Text) + ')';
    if Edit2 <> '' then
      Filter := Filter + 'AND' + '(' + Trim(Edit1.Text) + ')';
    ...
    Filtered := True;