我现在使用interbase做为后台的数据库,使用TDataSource-TCLientDataset-TDatasetProvider-TSQLDataset的结构来编程,前面用TDataGrid来绑定,现在问题是,我绑定的时候使用的数据源是从一张视图里过来的,然后我使用ApplyUpdate更新到数据库的时候,总是出错,但是如果直接使用表绑定的话就没有问题,但是那样在显示的时候都是ID对于客户来说不是很直观,一般情况下,这种情况大家是怎么解决的?我该怎么处理才能方便点呢?

解决方案 »

  1.   

    可以建2个表格,一个visible := true, 一个visible :=false ; 
    一个给客户看,一个自己用.
      

  2.   

    如果调用ApplyUpdate直接更新是靠自动产生的SQL语句来更新的,视图与表的字段不一样,就有可能产生对于表来说错误的SQL语句。
    这种情况最好是在BeforeUpdateRecord中自已写更新的SQL代码来更新后台表。
      

  3.   

    其实我只不过是显示的时候使用视图,然后客户是在视图上改的,但是改的数据是其中的一个表,我其实本意是想修改这一个表的,请问除了自组SQL语句意外,是不是可以通过OnGetTableName来做到呢?
      

  4.   

    可以的。可以在DataSetProvider的OnGetTableName指定要更新的表。
      

  5.   

    另外需要注意的是通过关联其他表过来的字段的的ProviderFlags的pfinUpdate应该设置成为False(通过为TSQLDataset添加固定字段来设置pfInUpdate)
      

  6.   

    我按照楼上这位大侠说的那样,在onGetTableName里面设置了TableName:='要更新的表名',然后设置了从其他的表里得来得字段得providerFlags得pfinUpdate位为false了,但是在使用ApplyUpdate更新得时候 ,仍然提示从另外个表里得到得那个字段不存在得错误,请问这是怎么回事呢?能不能有具体的阿代码做个东西呢?
      

  7.   

    仔细检查一下,先确定自己搞清楚了ProviderFlags的含义。
    如果出现字段不存在的错误,一般都是 ProviderFlags 设置上的问题。