我用ADO建立主从关系 MasterQry,DetailQry,MasterDs,DetailDs
MasterQry.SQL.ADD('SELECT * FROM XJ_CUSTOMER');
DetailQry.SQL.Add('SELECT * FROM XJ_DBDLB WHERE CUST_ID = :CUST_ID');
MasterDs.DataSet := MasterQry;
DetailDs.DataSet := DetailQry;
DetailQry.DataSource := MasterQry;
在程序运行时 第一次打开两个Query正常,我再更改MasterQry.SQL 为 SELECT * FROM XJCUSTOMER WHERE XJCQH='05001'后再打开就出错  
   我的是MSSQL数据库,两个表的关系就是主从表的关系,通过CUST_ID联系起来的
    CUST_ID=:CUST_ID,在书上说就是这样:将从表的DataSource赋值为主表的QUERY,他就可以自动取值的
    我觉得我的SQL语句没有错误
=======================================================================
我修改为删除主从表关系,然后在主表的AfterScroll事件中加一个
  begin
    获取主表的CUST_ID值
    根据主表的CUST_ID值查询从表
  end
达到了我要的结果,但是我就是没有用到ADO的主从表关系,
我现在想的是我要怎么才能利用ADO内建的功能来做,不需要自己写这个代码?当然我的主表的数据集是可以变化的<一个条件查询,条件可以自己改变>
  select * from xj_customer where xjcqh='000001',主表的000001是用户给定的  

解决方案 »

  1.   

    DetailQry.SQL.Add('SELECT * FROM XJ_DBDLB WHERE CUST_ID = :CUST_ID');
    ————————————————————————————
    上面定义了一个参数,必须给参数赋值,加上:
    DetailQry.Parameters.ParamValues['CUST_ID']:='test';——————————————————————————————
    adoQuery使用的例子:adoquery1.Close;
    adoquery1.SQL.Clear;
    adoquery1.SQL.Add('SELECT * FROM XJ_DBDLB WHERE CUST_ID = :CUST_ID');
    adoquery1.Parameters.ParamValues['CUST_ID']:='test';
    adoquery1.open;
      

  2.   

    DetailQry.SQL.Add('SELECT * FROM XJ_DBDLB WHERE CUST_ID = :CUST_ID');
    DetailQry.Parameters.ParamByName('CUST_ID').Value:='条件';
    DetailQry.open;