程序中,采用了TClientDataSet做数据录入及修改界面.
由于做修改时,需要把数据库里已存在的记录显示在DBGrid上,因此,Form在Show时,需要显示已有数据...有点类似于这样:
TClientDataSet.CommandText := 'select T1.f1, T1.f2, T2.a, T2.b from T1, T2 where,,,';
TClientDataSet.Open;  //希望能通过类似的语句,读取数据 实际上行不通, 不知道应该怎样连接通过这样的语句,把数据显示在DBGird上(数据是两个表的组合查询), 此次,用户可以直接在DBGrid上做编辑操作(当然,有些字段是不可编辑,仅做显示用的),用户可能会新增多条记录,或是修改,删除多条记录后,点"保存",一并保存到数据库里,或是"取消"保存.

解决方案 »

  1.   

    不明白什么意思~~~!直接DBGird -> TDataSource ->TClientDataSet绑定就行了啊~~!
      

  2.   

    是这样绑定的,可是 TClientDataSet 怎样和数据库绑定呢?
      

  3.   

    直接在数据集里写好SQL,然后客户端CDS.APPEND,CDS.UPPLYUPDATE(0(
      

  4.   

    一个TADOQuery,名称为ADOQuery1,用于连接数据库,一个TDataSetProvider,名称为DataSetProvider1,其DataSet设置为ADOQuery1,一个TClientDataSet,名称为ClientDataSet1,其ProviderName设置为DataSetProvider1,一个TDataSource,名称为DataSource1,其DataSet设置为ClientDataSet1,一个TDBGrid,名称为DBGrid,其DataSource为DataSource1;查询数据的SQL放在ADOQuery1的SQL中,例:ADOQuery1.SQL.Add('你的SQL语句');
      

  5.   

    to zhuchengchuan:在程序中,使用了
    ADOQuery1.Sql.text := 'select ....';
    ADOQuery1.Open;但是,DBGrid里面并没有出现我想要的数据.是不是,还有某些地方没有设置好?
      

  6.   

    因为dbgrid对就的是ClientDataSet1,你把ADOQuery1.Open改成ClientDataSet1.close,再ClientDataSet1.open.
      

  7.   

    改着试了,不行.
    并且也试过了
    ClientDataSet1.commandText := '....';
    ClientDataSet1.Open;
    还是不行,你能否帮我测试一下??
      

  8.   

    如果数据库是SQLServer,那你先把你的SQL放到查询分析器里运行,看能不能得到结果?
      

  9.   

    SQL语句放到查询分析器里,肯定有结果啦..在程序设计界面里,把 TClientDataSet的Active 改为:False 或是 True 都没有反应啊..