大家好,我想用Delphi编一个程序,请大家帮我看看下面这段代码哪里出错了。  我用的是Delphi7,操作系统是XP,分别使用:TADOTable、TDataSource、TEdit、TRichEdit、TComboBox、TLabel、TButton,DataControls标签页下的组件只有一个:TDBGrid。  数据库名:HDDB.mdb(Access数据库);表名:“Record”。字段有:隐患编号、检查日期、被检单位、负责人、隐患内容、整改措施、检查人、检查日期、整改期限、复查人、复查日期、整改情况。(以上字段:编号、整改期限为Integer类型;检查日期、复查日期为TDateTime类型,其余全部为String类型)。  目的是这样:
  每月月底单击“统计”按钮(按钮名字:fmCOBtnCollect20)时:①分别统计各队组隐患数量 ②本月所有隐患总数。  
  但我不会用TADOTable进行统计,网上有人说要用TADOQuery,所以用TADOQuery来实现这个目的,代码如下: IF fmCOdsRecord.DataSet.State = dsInsert Then
  begin
  MessageDlg('对不起,新建隐患时,不能统计数据!' + #13#10 + #13#10 +
  ' 本次操作将被取消!', mtWarning, [mbOK], 0);
  end
 ELSE IF fmCOdsRecord.DataSet.State = dsEdit Then
  begin
  MessageDlg('对不起,修改隐患时,不能统计数据!' + #13#10 + #13#10 +
  ' 本次操作将被取消!', mtWarning, [mbOK], 0);
  end
 ELSE
  begin
  fmCOStartDates := fmCOCBoxCSStartYear13.Text + '年' + fmCOCBoxCSStartMonth14.Text + '月' + fmCOCBoxCSStartDay15.Text + '日';
  fmCOEndDates := fmCOCBoxCSEndYear16.Text + '年' + fmCOCBoxCSEndMonth17.Text + '月' + fmCOCBoxCSEndDay18.Text + '日';
  With fmCOADOqyRecord Do
  begin
  Active := False;
  ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;' +
  ' Data Source=F:\井东通风工作\2012\井东煤业通风队隐患排查记录系统\DataBase\HDDB.mdb;' +
  'Persist Security Info=False';
  Close;
  SQL.Clear;
  SQL.Add('Select Count (*) From Record Where 检查日期 Between #fmCOStartDates# And #fmCOEndDates# GroupBy 被检单位');
  Open;
  end;
  end;  按F9后,单击“统计”按钮,出现:“语法错误(操作符丢失)”在查询表达式‘检查日期 Between #fmCOStartDates# And #fmCOEndDates# Group By 被检单位'中。  这是为什么?  本人Delphi水平属于没入门水平,平时由于工作繁忙也没时间去系统的学习。由于工作需要,这是我的第一个程序,可能数据库表的建立、组件命名、代码编写规则等存在一些问题,请各位高手帮我检查、指教,本人不胜感激。 
 
 

解决方案 »

  1.   

    SQL.Add('Select Count (*) From Record Where 检查日期 Between #fmCOStartDates# And #fmCOEndDates# GroupBy 被检单位');
    红色字体那地方错了,没空格。应是:Group By 
      

  2.   

    SQL.Add('Select Count (*) as cnt From Record Where 检查日期 Between #'+fmCOStartDates+'# And #'+fmCOEndDates+'# Group By 被检单位');
      

  3.   

     as cnt 是什么意思?
      

  4.   

    你这样也不对,出现错误信息:
     
      日期的语法错误 在查询表达式'检查日期 Between #2012年4月1日# And # 2012年4月30#'中。
      

  5.   

    统计完后,怎么将各队统计结果和所有隐患统计分别显示到对应的TLabel组件上?
      

  6.   

    你把fmCOStartDates和fmCOEndDates变成这样的格式yyyy-mm-dd,不能有中文用group by,查询的结果可能有多笔数据,取值显示,下面这一句默认是第一笔
    fmCOADOqyRecord.first;
    label1.caption:=IntToStr(fmCOADOqyRecord.fields[0].AsInteger);
      

  7.   


    我的Record数据表中,检查日期这个字段设置的格式是:长格式,yyyy年mm月dd,在程序中设为yyyy-mm-dd,有影响吗?真诚谢谢你!!!你的QQ是多少,能告诉我吗?
      

  8.   

    另外,统计完后,怎样将本月各队的隐患数量、以及不分队组的本月所有隐患总数分别显示在相应的TLabel组件上?(如:综采一队:XXX条,综采二队:XXX条,写在XXX上。)
      

  9.   

    日期格式设置成为 : yyyy-MM-dd这样保险.数据库中的日期你可以不用管它.
      

  10.   

    再次注明一下,建议将 系统日期和数据库中的日期统一一下的
    设置为:yyyy-MM-dd
      

  11.   

    统计数据功能已经实现,现在还剩如下两个小问题:as cnt 是什么意思?统计完后,怎样将本月各队的隐患数量、以及不分队组的本月所有隐患总数分别显示在相应的TLabel组件上?(如:综采一队:XXX条,综采二队:XXX条,X月共有隐患XXX条。XXX是TLabel组件。)
      

  12.   

    sql语句串错了。直接把串成的sql语句show出来,在数据运行