求助多层中记录添加等问题?(200分)

  • 主题发起人 主题发起人 狒狒
  • 开始时间 开始时间

狒狒

Unregistered / Unconfirmed
GUEST, unregistred user!
在Access数据库中有两个表。其中一个Validate表,有number、username、password三个字段都为字符形。另一个BasicInformation表,表中有字符、数字、OLE、备注字段若干项,其中只有number,name为非空。中间件为远程数据模块由Query读取记录。客户使用ClientDataSet连接中间件,使用如下方式:ClientDataSet1.Insert ;
ClientDatsSet1.FieldByName('字段名').Values:= 实际值 ;
ClientDataSet1.Post ;
ClientDataSet.ApplyUpdate(0);
在Validate表中正确,但BasicInformation表中不正确。根本没有加入记录,在添加时只是加入这条记录的number、name字段(在Access中使用正确)。其它字段一会在添加。如果使用另外一个ClientDataSet使用CommandTest加入Sql语句添加可以,但想让原来的ClientDataSet显示新加入的记录。使用先close在open的方法出错,这和改变Active属性一样吧?关闭数据集在打开,我用的时D7据说refrence有改进,不知真假,但这里用出错。
另外更新备注字段如果也这样着作,必须同其它字段一齐更新。如果单独更新,不起作用。没办法,我就在中间件的接口里加入一个方法,用来更新备注字段。
恳请各位多多指教,谢谢!!!!
 
看不太明白!
  close、open也是调用active的属性值,你close再open时出错,是因为字段中含
有olb、备注等数据类型。
 
请您仔细看看。在多层中ole,备注应该注意什么? 请您赐教。我想知道为什么一样的方法,对于不同的表效果不同。
 
在中间件中加入截获进行 ApplyUpdate时从客户发过来的包(就是datasetprovider的ownerdata)是错误的。我的添加方法如上,可BasicInformation表就是添加不上。
 
首先,你的OLE类型的字段赋值方法:
要用TBlobField.loadfromstream()函数。
例如:
ole_1是ole显示对象
..
B_OLE1:tmemorystream;
...
bkst:=tmemorystream.Create;
...
ole_1.savetostream(bkst);
...
TBlobField(customerdata.ClientDataSet1.fieldbyname('B_OLE1')).loadfromstream(B_OLE1);
其次,中间层的的query有没有与之对应的TUpdateSQL对象里写更新语句?
 
to sunrainwang 您说得问题我都没有,我估计是不是我的提交有错误。我是类似这样做的:
在一个按钮的click中加入
ClientDataset1.insert;
赋值语句
ClientDataset1.Post;
ClientDataset1.ApplyUpdate(0)
ClientDataset2.insert;
赋值语句
ClientDataset2.Post;
ClientDataset2.ApplyUpdate(0)
这样同时插入两个表中的内容Vlidate表正确(ClientDataSet2)
如果单独对Basic(ClientDataSet1)操作,有时也好使。
 
你可以将中间层得到的数据信息写入文件与你的输入信息和数据库约束进行比较也许会有什么新的发现。
 
检查一下中间层,看看DataSetProvider的更新方式设置。是不是这方面的原因?
 
从重新建立一个数据库就好使了,我只试验了Basic表。问题可能在数据库与中间件之中.
 
后退
顶部