applyupdates 让我崩溃!!!!怎么没人回答,分不够再加 (200分)

  • 主题发起人 主题发起人 xiyull
  • 开始时间 开始时间
X

xiyull

Unregistered / Unconfirmed
GUEST, unregistred user!
midas中
server:tquery1.sql为空
tdatasetprovider.resolvetodata:=false;
client:tclientdataset1.commandtext:='select * from tablename'
tclientdataset1.open;
更新:tclientdataset1.applyupdates(-1);
报错:oracle:表和视图不存在,
delta到达tdatasetprovider时tdatasetprovider是怎样去更新数据的.
注:这时我在server能看到delta
 
怎么没人回答,分不够再加
 
这个SQL不是用来更新的呀?
 
这个sql是用来查寻,查寻完了之后修改,完了再用tclientdataset1.applyupdates(-1);
把修改的内容提交,这时就出现问题了
 
请把你的程序部分帖出来让大家分析一下好吗?因为有些问题并不是语法方面的错误,
可能跟设置有关。
 
你是单表更新,应该不会出如此问题.你以前做过类似程序还是第一次,你的CacheUpdate有没
有设成TRUE,还有RequestLive有没有TRUE,将代码贴出来看看,不然不好判断.不过,我看可能
是RequestLive没有设成TRUE.还有,你的UPDATESQL有没有设好?
 
CachedUpdates = True;RequestLive = True这两个属性已经设成true,如果用tupdatesql
来更新是可以的。
我原来做个一类似的程序,现在这个只是试验,在server端没有其它的附属代码。
tdatasetprovider.resolvetodata:=false;后tdatasetprovider会自动生成更新sql语句,我就是
想知道它是怎样来生成这个语句的。知道了这个过程,我想就能找道出错的原因了。
 
"在server能看到delta":
procedure Tmidas.DataSetProvider1UpdateData(Sender: TObject;
DataSet: TClientDataSet);
begin
form1.ClientDataSet1.data:=dataset.data;
end;
我只是想追中一下更新的数据能否到达server端,这因该不会影响什么吧
 
呵,我碰到过,没用MIDAS也出,不关ApplyUpdates的事,好像是BDE跟ORCALE的版本不对,
不过有时又正常,很奇怪。
我也想知道为什么。
 
问题解决了,但还是必须讨论下去(因为我真是想知道原因哎!写程序真好,也真苦)
oracle中表的名字是madi
先用这个sql就错:select * from madi;
用这个就对:select * from MADI Madi(两个madi)
然后再用 select * from madi 又对
为什么???
 
或者你试试直接用SQL命令进行更新吧。
 
我哪知呀?我是初学者!对不起拉!我的oicq:6196481,请各位老大教我一下,好吗?
 
因为你是使用TClintDataset.CommandText传递Sql语句,而applyupdates更新时,
服务器端要根据tquery1的Sql语句定位记录,所以失败.
正确的使用方法应该是
1. 服务器的Tquery1连接的TProviderdataSet的OnGetRecord事件中如下写:
Procedure ProviderDataSet1onGetRecord(Sender: Tobject;
Ownerdata: Vairant)
//声明可能有误,参看Delphi
begin
if VarISNull(ownerData) or VarISEmpty(ownerdata) then

//如果客户端未传Sql
begin
Raise EOleError.Create('无Sql语句.');
end;
query1.Close;
Query1.Sql:=OwnerData;
Query1.Open;
end;

客户端在TClientDataSet的onBeforeGetRecord事件如下
Procedure ClientDataSet1OnBeforeGetRecord(Sender: Tobject;
var OwnerData:Variant)
begin
OwnerData:=//Sql语句
end;

其实你可以看Delphi5/Demos/Midas/Pool目录的例子既可.
 
我在用BCB5做多层结构系统时,我在Server端加入了一个取得服务器IP地址的方法:GetServerIP它的参数是vIP:Variant *,IN方式,并在服务端实现了这个方法,
加入的代码如下:
*vIP="192.168.0.01";最后我注册成功。
可是在我开发客户端程序时,我用TSocketConnection
当取得它的服务时我是这样做的:
Variant* vip;
SocketConnection1->AppServer.GetServerIP(vip);
Edit1->Tex=vip;
可 是我在运行程序时出错,没有编译通过。
它说getserverIP不是variant的成员
getserverIP is not a memober of variant
请问?
我该如何去调用这个方法呢?
请各位大侠多多指教?
小生的QQ:65466700(24小时在线恭候)
MAIL: alongsun@sina.com
 
如果你用的Oracle数据库它的表名是要用大写的。
 
kaimo正解,没什么好补充的
 
后退
顶部