老生常谈——MIDAS三层的数据更新问题,郁闷之极,遂来求救

时间:2021-03-10 20:38:51
据说:
DBGrid1 中修改了记录后,
clientDataSet1的Post方法或点击TDBNavigator的“√”按钮更新数据,事实上只是把数据更新缓存内存中,并没有真正更新到服务器数据源中。要真正
地把修改的数据更新回数据源中,应用程序必须调用TClientDataSet 的ApplyUpdates ... 

但我用了: 
clientdataset.applyupdate(-1),clientdataset.applyupdate(0)
最后再从服务器取数据,数据还是老样子

现在数据是根本不能提交到服务器上,究竟还有哪些细节的设置!?
拜托了! 

对了,我用的INTERBASE,这是否对更新有影响,在中间层是否还需要处理?

16 个解决方案

#1


dcom 设置好了吗

#2


这个问题我也遇到过!你检查一下,你的数据是不是有按照数据规则输入啊!例如:在数据库里面的某个字段设为不允许为空!而你没有输入数值!在就是数据类型是不是有输入错误呢?等等之类的问题!

#3


用的是  socketconnetcion  ,

数据也的确是按规则输入的,但就是不能将更改应用到数据源

怎么没多少人回答?

#4


datasetprovider option allowcommandtext 要设为true

#5


你在CLIENTDATASET的REROMEERROR(全名我忘了,自己查查),中写SHOWMESSAGE(E。MESSAGE)看看,返回什么错误导致不能保存,可以联系我

#6


我也遇到过类似的问题,后来用了一个笨方法,将这些操作(如动态建表,插入记录)全都通过函数用参数传到中间层上来处理,数据是写进去了,但就是不能马上在客户端上显示,为此我也刚提了个问题,大家可以去看看(名为:leeen)。大家给个方法阿。

#7


你的中间层的DSP->poincFieldProps设为true了吗?还有你的AppleyUpdates(0)是写的那的?应该写在clientdataset的After post事件里面去啊!如果这样做了,是没有问题的!再就是要按照规则来做!

#8


是不是库连接的问题,真怪

#9


function AppleyUpdates(): Integer;

 如果AppleyUpdates函数返回的值不是一,则更新过程发生错误。需要查明。

#10


新手学习,友情UP

#11


改这个属性即可:
DataSetProvider1.ResolveToDataSet:=true;

#12


是否设置的主键,field的[pfInKey]是否加了

#13


SHOWMESSAGE(E。MESSAGE)看了看,
原来是QUERY READ-ONLY 的更新问题

这里我顺便问问:
我用IBQUERY1 : SELECT * FROM TEST
然后筛选出来的数据在DBGRID里显示出来,就不能修改了
应该怎么调整和设置让他能修改呢?

我知道,如果从多张表里筛选,那么数据肯定不能修改
但我是从一张表里筛选,怎么也不行呢?

敬候佳音!

#14


将连接在IBQUERY1的DSPROVIDER的OPTION中的POREADONLY设置为FALSE

#15


将连接在IBQUERY1的DSPROVIDER的OPTION中的POREADONLY设置为FALSE

这个我原来就已经做了,还是不行

现在是我就用IBQUERY1直接连接INTERBASE,没有datasetprovider(就一层)
我用IBQUERY1 : SELECT * FROM TEST
然后筛选出来的数据在DBGRID里显示出来,还是不能修改

应该怎么调整和设置IBQUERY1,让他能修改呢?
还是INTERBASE的固有毛病

我知道如果用ADO可能不会有这个问题的

#16


同意up

#1


dcom 设置好了吗

#2


这个问题我也遇到过!你检查一下,你的数据是不是有按照数据规则输入啊!例如:在数据库里面的某个字段设为不允许为空!而你没有输入数值!在就是数据类型是不是有输入错误呢?等等之类的问题!

#3


用的是  socketconnetcion  ,

数据也的确是按规则输入的,但就是不能将更改应用到数据源

怎么没多少人回答?

#4


datasetprovider option allowcommandtext 要设为true

#5


你在CLIENTDATASET的REROMEERROR(全名我忘了,自己查查),中写SHOWMESSAGE(E。MESSAGE)看看,返回什么错误导致不能保存,可以联系我

#6


我也遇到过类似的问题,后来用了一个笨方法,将这些操作(如动态建表,插入记录)全都通过函数用参数传到中间层上来处理,数据是写进去了,但就是不能马上在客户端上显示,为此我也刚提了个问题,大家可以去看看(名为:leeen)。大家给个方法阿。

#7


你的中间层的DSP->poincFieldProps设为true了吗?还有你的AppleyUpdates(0)是写的那的?应该写在clientdataset的After post事件里面去啊!如果这样做了,是没有问题的!再就是要按照规则来做!

#8


是不是库连接的问题,真怪

#9


function AppleyUpdates(): Integer;

 如果AppleyUpdates函数返回的值不是一,则更新过程发生错误。需要查明。

#10


新手学习,友情UP

#11


改这个属性即可:
DataSetProvider1.ResolveToDataSet:=true;

#12


是否设置的主键,field的[pfInKey]是否加了

#13


SHOWMESSAGE(E。MESSAGE)看了看,
原来是QUERY READ-ONLY 的更新问题

这里我顺便问问:
我用IBQUERY1 : SELECT * FROM TEST
然后筛选出来的数据在DBGRID里显示出来,就不能修改了
应该怎么调整和设置让他能修改呢?

我知道,如果从多张表里筛选,那么数据肯定不能修改
但我是从一张表里筛选,怎么也不行呢?

敬候佳音!

#14


将连接在IBQUERY1的DSPROVIDER的OPTION中的POREADONLY设置为FALSE

#15


将连接在IBQUERY1的DSPROVIDER的OPTION中的POREADONLY设置为FALSE

这个我原来就已经做了,还是不行

现在是我就用IBQUERY1直接连接INTERBASE,没有datasetprovider(就一层)
我用IBQUERY1 : SELECT * FROM TEST
然后筛选出来的数据在DBGRID里显示出来,还是不能修改

应该怎么调整和设置IBQUERY1,让他能修改呢?
还是INTERBASE的固有毛病

我知道如果用ADO可能不会有这个问题的

#16


同意up