procedure TfrmSalaStat.Button1Click(Sender: TObject);
begin
  try
    ADOQuery1.Close;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add('select * from salaryInfo where xm like "%'+Edit1.Text+'%" ');
    if trim(ComboBox1.Text)<>'' then
       ADOQuery1.SQL.Add(' and  yf ="'+trim(ComboBox1.Text)+'"');
    ADOQuery1.Open;
  except
  end;
  try
    ADOQuery2.Close;
    ADOQuery2.SQL.Clear;
    ADOQuery2.SQL.Add('select sum(yfgz),sum(sfgz) from salaryInfo where xm like "%'+Edit1.Text+'%" ');
    if trim(ComboBox1.Text)<>'' then
       ADOQuery2.SQL.Add(' and  yf ="'+trim(ComboBox1.Text)+'"');
    ADOQuery2.Open;
    Edit2.Text:=ADOQuery2.Fields[0].AsString;
    Edit3.Text:=ADOQuery2.Fields[1].AsString;
  except
  end;
end;end.这个过程对SALARYIBFO查询,然后作简单的计算,但是不知道为什么,界面上却没有结果

解决方案 »

  1.   

    一问1,
    if trim(ComboBox1.Text)<>'' then
       ADOQuery1.SQL.Add(' and  yf ="'+trim(ComboBox1.Text)+'"');
    是用来做什么的?
    一问2,
    检查一下
    Edit2.Text:=ADOQuery2.Fields[0].AsString;
    Edit3.Text:=ADOQuery2.Fields[1].AsString;
    第一个Edit2.Text:=ADOQuery2.Fields[0].AsString;是不是应该为Edit2.Text:=ADOQuery1.Fields[0].AsString;
      

  2.   

    先说一下表salaryinfo
    xm就是姓名,yf就是月份
    Edit1.Text得到姓名ComboBox1.Text得到月份我只知道这个功能就是查询某人某月的总的应发工资和实发工资(包括各种工资奖金和扣去的钱,也就是salaryinfo表中其他字段),如果没有指定月份,那就返回所有月份的结果还有,在调试状态下。在Edit1.text中输入“张三”(表中有此人)时,程序抛出异常,具体输出如下:
    project salary.exe raised exception class E01Exception with message '列名'%张三%无效。'.process stoped.Use Step or Run to continue
    另外,在accsee上运行正常,在sql server下就这样
      

  3.   

    ADOQuery2.Close;
        ADOQuery2.SQL.Clear;
        ADOQuery2.SQL.Add('select sum(yfgz) as yfgz,sum(sfgz) as sfgz from salaryInfo where xm like "%'+Edit1.Text+'%" ');
        if trim(ComboBox1.Text)<>'' then
           ADOQuery2.SQL.Add(' and  yf ="'+trim(ComboBox1.Text)+'"');
        try
        ADOQuery2.Open;
        except
            showmessage('打开出错');
        end;
        adoquery2.first;
        if  adoQuery1.recordCount>0 then
        begin
        while not adoQuery1.eof do
        begin
        Edit2.Text:=ADOQuery2.Fields[0].AsString;
        Edit3.Text:=ADOQuery2.Fields[1].AsString;
        adoQuery1.next;
        end;
        end;
      

  4.   

    我对delphi基本上不通,不知道提供的信息能帮大家理解么
    楼上的代码能够实现所有的功能么?
      

  5.   

    你的adoquery1 and adoquery2连接到dbgrid等数据显示控件了吗?,如果确定连接,那么单步跟踪执行,看看的你aqoquery1.sql.text在open前是什么内容,以及adoquery2的。
      

  6.   

    不知道这里adoquery1在这里有什么作用
      

  7.   

    仔细检查你的SQL语句,看是不是漏了单引号什么的
      

  8.   

    ADOQUERY1.SQL.TEXT 'select * from salaryInfo where xm like "%张三%" '#$D#$A
    adOQUERY2.SQL.TEXT: 'select sum(yfgz),sum(sfgz) from salaryInfo where xm like "%张三%" '#$D#$Aadoquery1有什么作用,我也不知道,这些代码我基本上看不懂
    你也可以给一段原码,只要能完成功能就好,感激
      

  9.   

    要强调的是在ACCESS上正常,是不是我表的问题呢?
      

  10.   

    引号问题,sql server里面字符串用单引号表示,你用的双引号,所以有问题ADOQuery1.SQL.Add('select * from salaryInfo where xm like "%'+Edit1.Text+'%" ');
    改成
    ADOQuery1.SQL.Add('select * from salaryInfo where xm like ' + QuotedStr('%'+Edit1.Text+'%'));ADOQuery1.SQL.Add(' and  yf ="'+trim(ComboBox1.Text)+'"');
    改成
    ADOQuery1.SQL.Add(' and  yf ='+QuotedStr(trim(ComboBox1.Text)));ADOQuery2.SQL.Add('select sum(yfgz),sum(sfgz) from salaryInfo where xm like "%'+Edit1.Text+'%" ');
    改成
    ADOQuery2.SQL.Add('select sum(yfgz),sum(sfgz) from salaryInfo where xm like ' + QuotedStr('%'+Edit1.Text+'%'));
      

  11.   

    在ADOQUERY1.SQL.open和adOQUERY2.SQL.open的时候出现异常
      

  12.   

    按照ithinkthereforeiam的改了
    调试时出了下面的异常:sum or average aggregate运算不能以nvar char数据类型作为参数
    是不是要转换一下?怎么做?
      

  13.   

    数据库里面是nvarchar
    应该怎么转?
      

  14.   

    那就是yfgz字段还是sfgz字段是字符类型,不能用于sum函数,可以用cast函数转换一下
      

  15.   

    sum(cast(yfgz as decimal(10,4)))
      

  16.   

    赫赫, Tranquillo(影子)你是不是才作开发阿
      

  17.   

    呵呵,我一点都不懂delphi,这两天给别人做个小作业。
    终于搞定了
    谢谢大家!!