sub:=edit_other.Text ;
        query_chengji.Close;
        query_chengji.SQL.Clear;
        sqlstr:='select troop.id,troop.name,study.study_id,study.subject_id,study.achieve,'
        + 'achieve.teacher achieve.subject from troop.db,study.db,achieve.db where ('
        + '(study.id = troop.id) and (achieve.subject_id = '
        +'(select study.subject_id from troop.db,study.db where((troop.name =:sub) and ( study.id = troop.id))))) ';
        query_chengji.SQL.Add(sqlstr);
        query_chengji.ParamByName('sub').DataType :=ftstring;
        query_chengji.ParamByName('sub').Asstring :=sub;以上是程序代码片断,表结构如下:
troop(id(key),name,……);
study(study_id(key),id,subject_id,achieve);
achieve(subject_id(key),subject,teacher);
我需要按troop.id或者troop.name查询出该学生选修的subject,achieve,以及该subject的teacher。用参数查询的时候总是报sub出错。哪位大虾告诉我该怎么写?谢谢了

解决方案 »

  1.   

    大家快来help一下啊,马上出人命了
      

  2.   

    sub:=edit_other.Text ;去掉
    query_chengji.ParamByName('sub').Asstring :=sub;改成query_chengji.ParamByName('sub').Asstring :=trim(edit_other.Text);
    试试
      

  3.   

    insert2003,我试过了,不行。
    依然是说:query_chengji :parameter 'sub' not found!!
    众位神仙快来救我啊!!!!
      

  4.   

    我在我机器上给你测试过了,有两个错误1.":sub'中的冒号是全角的,所以系统不认
    2.+ 'achieve.teacher achieve.subject from troop.db,study.db,achieve.db'此行中
      achieve.teather后少了一个逗号, 你试一下,记得给我加分呀
      

  5.   

    第一个错误没有啊,也许是我粘上去的时候改的。但是第二个错误存在,现在除了一个新问题,查询的时候说invalid field name 'id'.这个字段明显是存在的啊 。
    你的分数我肯定会加的啦,谢谢了先!!!
      

  6.   

    看着这么长的代码就晕你把SQL SHOW到文本框里,然后拷到查询分析器里执行一下,不就知道问题在那里了
      

  7.   

    放一个文本框edit1在窗体上,然后在给参数赋值后加一句:
    edit1.text:=query_chengji.SQL.Text;不就一清二楚了
      

  8.   

    查询分析器同样说是invalid field name 'id'.
      

  9.   

    不可能吧,这是我的调试代码,不过用的是SQLServer,要去掉.db的,你参考一下procedure TForm1.Button1Click(Sender: TObject);
    var
      sub,sqlstr:String;
    begin
    sub:=edit_other.Text ;
            query_chengji.Close;
            query_chengji.SQL.Clear;
            sqlstr:='select troop.id,troop.name,study.study_id,study.subject_id,study.achieve,'
            + 'achieve.teacher, achieve.subject from troop,study,achieve where ('
            + '(study.id = troop.id) and (achieve.subject_id = '
            +'(select study.subject_id from troop,study where((troop.name =:sub) and ( study.id = troop.id))))) ';
            query_chengji.SQL.Add(sqlstr);
            query_chengji.ParamByName('sub').DataType :=ftstring;
            query_chengji.ParamByName('sub').Asstring :=sub;
            query_chengji.open;
    end;
      

  10.   

    show出来的SQL代码贴出来看一下
      

  11.   

    select troop.id,troop.name,study.study_id,study.subject_id,study.achieve,achieve.teacher,achieve.subject from troop.db,study.db,achieve.db where ((study.id = troop.id) and (achieve.subject_id = (select study.subject_id from troop.db,study.db where((troop.name =:sub) and ( study.id = troop.id)))))
      

  12.   

    上面是变量监视器里的sql语句
      

  13.   

    系统执行到querry_chengji.open的时候出错。invalid field name 'id';
    to fenght2004(fht)兄 :你连接的后台数据库表结构和我的一样吗?
      

  14.   

    以下是我的表结构,你查一下你的id字段,是不是拼错了,
    CREATE TABLE [dbo].[achieve] (
    [subject_id] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [subject] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
    [teacher] [char] (10) COLLATE Chinese_PRC_CI_AS NULL 
    ) ON [PRIMARY]
    GOCREATE TABLE [dbo].[study] (
    [study_id] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [id] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
    [subject_id] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
    [achieve] [char] (10) COLLATE Chinese_PRC_CI_AS NULL 
    ) ON [PRIMARY]
    GOCREATE TABLE [dbo].[troop] (
    [id] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [name] [char] (10) COLLATE Chinese_PRC_CI_AS NULL 
    ) ON [PRIMARY]
    GO
      

  15.   

    这个问题,我昨天在写程序时出现过。应该为query_chengji设置Params参数
      

  16.   

    不是吧!在我机器上运行的好好的!
    建议楼主,还是好好检查一下你的数据库表结构吧!是不是把id写成了ld