◆◆◆◆◆怪事◆◆◆◆◆三层更新,为何添加了一个DataTime字段就无法更新??(200分)

  • 主题发起人 主题发起人 abc_xp
  • 开始时间 开始时间
A

abc_xp

Unregistered / Unconfirmed
GUEST, unregistred user!
◆◆◆◆◆怪事◆◆◆◆◆三层更新,为何添加了一个DataTime字段就无法更新??
一、Server端
RemoteDataModule窗体上有如下三个控件:
1、ADOConnection1 连接到SQL Server 2K
2、ADODataSet1
3、DataSetProvider1
由于ADO可以自动更新从多个表中JOIN来的数据,故将DataSetProvider1.ResolveToData:=True;
这样设定是把更新的动作交给DataSetProvider.DataSet所连接地ADODataSet1来处理
--------------------------------------------------------------------------------------
二、Client端
用DCOMConnection1连接到应用程序服务器,设置好ClientDataSet1的各项属性,数据可以正确在地
DBGird1中显示
--------------------------------------------------------------------------------------
◆◆问题如下:◆◆
当SERVER端的ADODataset1.commandText设置如下值时:
select 商品.商品名,商品.供应商,销售.发票号, 销售.收银员号
from 商品,销售
where 商品.商品号=销售.商品号
数据可以正常显示,更改完全没有问题
--------------------------------------------------------------------------------------
但是改成如下值时:(也就是只添加了“销售.销售日期”这个字段)
select 商品.商品名,商品.供应商,销售.发票号, 销售.收银员号, 销售.销售日期
from 商品,销售
where 商品.商品号=销售.商品号
数据可以正常显示,有的数据可以正确地更改并提交进数据库。
但是有的数据:
①更改
②POST
③ClientDataSet1.ApplyUpdate(0);
④ClientDataSet1.Refresh;
第④出错,提示“在刷新之前,必须先Apply Updates”
也就是说第③根本就没有起作用,请问这是为何,
只要我把那个“销售.销售日期”去掉就完全没有问题
又为何有的数据可以修改?
真是搞不懂!!!
 
我又试了一下,只用一个表,也就是说把ADODataSet1.commandText:='select * from 销售';
也不行,只要有“销售日期”这个字段,就是有的数据无法更新回数据库,好像第一条数据是
可以更新地,其它地就不行了。
把“销售日期”这个字段去掉又完全正确了,不知为何???
我已经把“销售”这个表跟其它表的所有关系都删了
真是见鬼了。

“销售”的表结构如下:
列名 数据类型 长度
-------------------------------
ID(key) char 10
发票号 varchar 10
收银员号 varchar 3
销售日期 datatime 8
商品号 varchar 10
销售数量 numeric 9

救命啊!!!!!!!!!!!
 
是啊是啊!
我想这样试一下吧!
服务端的datasetprovider的updatemode改成upWhereKeyOnly
 
靠!!!
又试了一下
把数据改成SQL SERVER自带的NORTHWIND竟然是可以的???
ADODataSet1.CommandText改成如下值:
select Employees.LastName, Employees.FirstName, Orders.OrderDate, Orders.ShipAddress
from Employees,Orders
where Employees.EmployeeID=orders.EmployeeID
NorthWind的ORDERS表中也有DATATIME字段,为何它的表就可以更新,我自己建的就不可以更新?
难道我建的表有什么不对吗?
请教!!!多谢!!!
 
字段有默认值吗?
 
注意,如果你用DATETIME字段,并且在表里设置默认值为GETDATE那么在三层中保存里
一定出错,因为DELPH的机制与SQLSERVER的机制有差别!DELPHI在读出日期数据会把后三位
去掉,而SQLSERVER里则不会,所以会出现定位不到记录。解决办法有两个:
1。去掉GETDATE默认值
2.在表里采用短日期字段类型
 
哈哈,原来如此,有默认值
谢谢兄弟
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部