急急,填加的问题,三层结构!(300分)

  • 主题发起人 主题发起人 htz
  • 开始时间 开始时间
H

htz

Unregistered / Unconfirmed
GUEST, unregistred user!
是这样子的,我在服务器端有主从关系的2个表,以ID号作为连接
主表ADODATASET里是这么写的:SELECT * FROM 基本信息表 WHERE 基本信息表
.ID=:ID(ID号是自动增加的)
客户端有一个树状浏览,电击一个接点显示一个人的详细资料,所以才在服务
器段主表上WHERE的,在服务器的从表的ADODATASET里写的是
SELECT * FROM 详细信息表 WHERE 详细信息表.ID=:ID
但是这个时候我在客户端写填加的代码的时候 ,当主表新增一记录
cLIENTDATASET1.applyupdate(-1)后,我想立刻在从表里添加记录
就要找到刚刚自动增加的主表的ID号,但这个时候主表ID号
返回的是空值,不能在从表里加数据,我该怎么办呢?
 
回答呀,大家!
 
你没有刷新数据,客户端不会认识后台的自动增量字端的。
ClientDataSet1.ApplyUpdate(-1);
ClientDataSet1.refresh;
后,ID值就有了的
 
djdsz:可是这个时候,记录就自动跳到第一条去了,我想它不变,有什么办法!
 
我的机器不跑到第一条记录去的啊!你写了什么事件还是排序有问题?
 
我的是呀,怎么办!
 
主表ADODATASET里是这么写的:SELECT * FROM 基本信息表 WHERE 基本信息表
.ID=:ID,会不会有关系!
 
把ID字段的AutoRefreshFlag设为arAutoInc
 
在DEMOS/midas目录中有许多例子如Aggregate,Alchtest
如不明白再说
 
用与用写
ClientDataSet1.refresh了!
 
beforepost之前自动增号,APPLYUPATES(-1)后REFRESH就应该可以的!如果不是在你想
要的记录那你新增的记录应该是最后一笔吧,所以游标移动一下就可以了!
 
hailen:不行呀!
 
pqx:AutoRefreshFlag是什么?
 
请看这里
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=458089
 
ADODATASET中应把ID字段的AutoGenerateValue设为arAutoInc就可以了
(双击鼠标编辑ADODATASET的字段信息,选择添加所有字段的菜单项后,选择ID字段,
把它的AutoGenerateValue设为arAutoInc就可以字段获取自动增加的主表的ID号

再不清楚可看该属性(TField.AutoGenerateValue)的帮助信息
Indicates whether the field values can be generated by the server rather than entered by the user.
property AutoGenerateValue: TAutoRefreshFlag;
Description
Use AutoGenerateValue to indicate when field values can be generated by the database. Such fields include autoincrement fields and fields with default values.
By default, values inserted automatically into such fields when a record is posted are not automatically refetched by the dataset. Instead, the application must call the dataset抯 Refresh method to update the field component抯 Value property. These values can be automatically updated if the dataset抯 AutoRefresh property is True. However, some database drivers can抰 determine which fields can have values supplied automatically by the server. For these cases, applications can provide this information by setting the AutoGenerateValue property. Use this property to indicate whether the field is an autoincrement field (arAutoInc), a field with a default value (arDefault), or a field whose value is not automatically generated (arNone).
AutoGenerateValue is not always required. Fields with an AutoGenerateValue property of arNone may still be updated if the driver supplies metadata that indicates it has a default value or an autoincrement value. However, it is good practice to supply this information because not all drivers supply this metadata.
Note: Trying to change the AutoGenerateValue property when the field抯 dataset is open generates an exception. Thus, AutoGenerateValue only works with persistent field components, which remain when the dataset is closed.
Note: If the field is not in a BDE-enabled dataset or if the dataset抯 AutoRefresh property is False, this property has no effect.
 
pqx:你是说在CLIENTDATASET的REFRESH之前得到ID号么?我怎么没有的到!
 
不要REFRESH就可得到,在ApplyUpdate(-1)之后取
 
你的自动增号过程有问题, 不应在存入数据库时由系统自动得到一个ID 号,
而应该在你存入数据库之前,你自己写一句话, 从一个sequence 中得到一个ID 号,
然后再自己把这个ID 号写入数据库, 这样所有的内容都在你的控制之下。
 
jiangone:你怎么保证ID好不会重复,对应从表的数据的ID是不应该修改的!
HTZ:你可以在REFRESH后,写个过程取得ID号,因为是新加的,所以取得ID的MAX值
就可以,这样就可以解决问题了,保证不会出错!!!!
 
To hukaijt
如果在网络上的话,去Max未必就是刚才自己加的记录ID的。
 
后退
顶部