我把程序中想实现的功能给各位大虾说一下:有student,kecheng,score等三个表。
student表有:学号,姓名,班级,专业等字段。
kecheng表中有:班级,课程名,学分,学期等字段。
score中有学号,班级,课程名,成绩,学期等字段。(有一个设为索引的自增字段
’编号‘)
由于每位学生有几十门成绩,一个班有几十位同学,所以要添加新科目成绩时要在score表中添加几十条记录(与学生人数相同),并且还要把学号,班级字段值(都来自student),以及课程名、学期(这两个字段来自kecheng)的值送到添加的每条记录的相应字段。
然后用selct 语句把score.学号,student.姓名,score.成绩显示在一个dbgrid控件中。
现在的问题是:dbgrid可以显示这些字段值,但是我往grid输入成绩时就出现以下的错误信息:“无法刷新或更新的键列值”请大侠指点;
另外,还有下列代码有何问题?
with adoquery1 do
begin
   close;
   sql.clear;
   add('select a.xuehao,b.xingming,a.cj from student a inner join score b  on a.xuehao=b.xuehao where xingbie=combobox1.text');
   exesql;
end;老是提示where部分有问题

解决方案 »

  1.   

    add('select a.xuehao,b.xingming,a.cj from student a inner join score b  on a.xuehao=b.xuehao where xingbie='+quotedstr(combobox1.text));
      

  2.   

    //改为以下就行了
    with adoquery1 do
    begin
       close;
       sql.clear;
       add('select a.xuehao,b.xingming,a.cj from student a inner join score b  on a.xuehao=b.xuehao where xingbie=+'quotedstr(combobox1.text));
       exesql;
    end;
    //注意,你的combobox1.text是一个字符串型变量(属性),而不是一个字符串,像你的用法是错误的.
      

  3.   

    //建议这样写
    with ADOQuery1 do
    begin
       Close;
       SQL.clear;
       Add('select a.xuehao,b.xingming,a.cj from student a inner join score b on 
    a.xuehao=b.xuehao where xingbie=:aa');
       Parameters.ParamByName('aa').value:=quotedstr(combobox1.text);//
       Open;
    end;
      

  4.   

    DBGrid的数据集中否使用了联合查询。
      

  5.   

    显然,是。联合查询必须指定其中一个表为主表才能进行数据更新。这要用户数据集的动态属性。详情请查看ADO2.6的帮助。
      

  6.   

    我在dbgrid数据集中的联合查询是怎么回事?
    在联合查询中怎么定义主表,ado2.6在那里找。
      

  7.   

    我强调一下:第一问题实际是adoquery纪录数据的修改。我查阅资料后。用缓存更新的方式来
    做,但是因为adoquery中是多表查询(学生表student是一方,成绩表score是多方)。adopuery 中有三个字段xuehao(student)、xingming(studeng)和cj(score)。要录入成绩,必须对cj字段输入数据或修改。但是程序报错:“无法刷新或更新的键列值”  
      奇怪的是,我对xuehao、xingming字段修改时无错误。
    缓存更新的一些设置如下:
    adoquery1。locktype:=sstatic;
    adoquery1。cursor:=ltoptionbatch;(这一行没有回忆清楚)
    保存时用:
    adoquery1。updatebatch(arall);
    用的数据库是access
    我想了一个月,没有解决。sos!
    sos!