本人正设计一个简单的学生信息管理系统,其中利用SQL SERVER建立了一个表,表中的字段为:stu_ID,stu_name,cou_ID,cou_name,credit.score.
SQL SERVER已经和系统建立好了连接.
我想实现的功能是通过选择统计方式,即:通过stu_ID和stu_name两种方式实现统计,为此加入了一个combobox1控件.接下来是建立一个EDIT1控件,用来输入stu_ID或者stu_name值.
再就是一个EDIT2,用来显示统计结果,结果为该学生所修每门课程的学分的总和,注意有个限制条件是该门课程的score必须大于等于60,既要及格.
自己写的代码如下:procedure TForm1.Button1Click(Sender: TObject);
var
f,f1,f2:string;
begin
f1:=combobox1.text;
f2:=edit2.text;
if f2='' then
begin
showmessage('请输入统计值!');
end
else
begin
f:='select sum(credit) from score where'+f1+'='+#39+f2+#39+'and score>=60';
form1.adoquery1.close;
form1.adoquery1.SQL.clear;
form1.adoquery1.SQL.add(f);
form1.adoquery1.open;
if adoquery1.recordcount=0 then
showmessage('该学生已修学分为0!')
else
.......
else后面的代码就不清楚怎么写了,请高人帮我写完,要简易可行。如果本人前面写的代码有不对的地方,可以指出并帮助修改。分不够的话可以再接,只要能帮我做出来。谢了!

解决方案 »

  1.   

    我决的啊.你就不该这么做.这样虽然看起来很好,但是容易乱的.我建议你自己用一个变量自己做加和eg:
    while not eod then 
    begin
     count+=adoquery1.fields(credit);
     adoqruery1.next;
    end;
    这样作和不是很好吗.至于你有什么要求都可以在中间加的吗.
      

  2.   

    我的理解:
    表名:score
    stu_ID,stu_name,cou_ID,cou_name(varchar类型)
    credit(int类型)代码(通过,没问题。可再添加一些错误处理代码):
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, DB, ADODB;type
      TForm1 = class(TForm)
        ADOQuery1: TADOQuery;
        ComboBox1: TComboBox;
        Edit1: TEdit;
        Edit2: TEdit;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
    f,f1,f2:string;
    begin
      f1:=combobox1.text;
      f2:=trim(edit1.text);     //edit2不是用来显示统计结果的吗
      if f2='' then
      begin
        showmessage('请输入统计值!');
      end
      else
      begin
        //(1)最后的score改为credit(应该是笔误吧)
        //(2)注意where后和and前的空格
        f:='select sum(credit) as SumCredit from score where '+f1+'='+#39+f2+#39+' and credit>=60';
        adoquery1.close;
        adoquery1.SQL.clear;
        adoquery1.SQL.add(f);
        adoquery1.open;
        edit2.Text := adoquery1.Fields[0].AsString    ;
      end;
    end;end.