在使用DATAGRID的时候,将其DATASOURCE属性设置为某个已经打开的RecordSet,而此RecordSet是由多个表连接而成的,好像这样的语句:
dim l_strSQL as String
dim l_rs as adodb.RecordSetset l_rs=new adodb.RecordSet
l_strSQL="select * from Table1" & vblf
l_strSQL=l_strSQL & "left join Table2 on Table1.ID=Table2.ID" & vblf
l_strSQL=l_strSQL & "left join Table3 on Table1.Code=Table3.Code" & vblfl_rs.open l_strSQL,g_cnn, adOpenDynamic, adLockOptimisticSet DATAGRID1.DataSource = l_rsCall DATAGRID1.Refresh数据显示是没有问题,但是在修改Table1的某个字段的值的时候就出现错误提示,说是键值不足之类的
注:已经将DATAGRID1设置为可ALLOWUPDATE=TRUE,并且在没有连接Table3的时候是没有问题的请各位帮忙解决,谢谢了!

解决方案 »

  1.   

    Table1应该定义一个主键,这是控件在应用修改到记录集时,无法定位导致。
      

  2.   

    Table1 连接Table3产生Table1键值的多条记录导致
    lz只看的Table1的记录,是有重复的比如
    Table1
    id    code
    m1     c1
    m2     c2Table3
    id    code
    p1     c1
    p2     c1查询select * from Table1 left join Table3 on Table1.code=Table3.codeTable1.id  Table1.code  Table3.id   Table3.code
    m1             c1           p1          c1
    m1             c1           p1          c2只看Table1,也就是前两列,对于Table1是重复的         
     
      

  3.   

    你的记录集是多表连接而来,当你在datagrid中企图改变某行某列的值的时候,很可能这行这列的值对应着多个表的多个记录,所以出错。如果是单表的记录集是不会出现这种情况的。