三层结构,两表为Master/Detail关系,新增数据时如何得到主表的自增字段的新值?

hualianmao 2004-03-24 08:28:42
开发环境:BCB6+IB6
开发架构:数据库服务器+AppServer+Client
连接方式:SocketConnection

问题描述:

应用程序服务器中有一主表Custmor,另有一从表Order,Customer与Order为一对多的关系。Customer中的主键为CustID,该字段为自增字段(Generator自动加1)。Order中也有一字段CustID,对应Custmor中的CustID。

当客户端执行新增(cdsCustomer->Append())操作时,Customer无法获得CustID字段的最新生成值,且Order中的CustID也无法得到。

有没有办法在客户端新增记录时,得到Generator自动产生的CustID值呢?请教各位。

或是其他解决方案也可。
...全文
42 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
hualianmao 2004-03-25
  • 打赏
  • 举报
回复
TR@SOE() :
你的意思是不用Generator,而是把自增字段的增加操作放在Before Insert Trigger里面吗?
我试过了,客户端Append()时,仍然得到不最新的CustID。
TR@SOE 2004-03-25
  • 打赏
  • 举报
回复
try trigger
hualianmao 2004-03-25
  • 打赏
  • 举报
回复
up
hualianmao 2004-03-25
  • 打赏
  • 举报
回复
在线急等,uping
hualianmao 2004-03-25
  • 打赏
  • 举报
回复
问题的关键:
客户端执行cdsCustomer->Append()操作时,即要取得自增字段CustID的最新值,并且要将此CustID赋给cdsOrder,然后执行cdsCustomer->ApplyUpdates(-1)保存数据。
注:这里使用Nested Tables来设置两表的一对多关系,所以保存数据时只需cdsCustomer->ApplyUpdates即可。

但当客户端执行cdsCustomer的Append()操作时,应用程序服务器(RDM)上的查询器queCustomer并未相应地也执行Append()操作,因此其GeneratorField对应的GENID未自动加1,所以CustID的最新值无法得到。

如果上述分析正确的话,有没有其他解决方案呢?请各位提示一下
xjq2003 2004-03-25
  • 打赏
  • 举报
回复
问题好象不是很复杂啊!
主表Customer中的主键为CustID,可以建立个索引啊
可以先取最新的Customer中的主键为CustID;
例如:INT ID=TABLE->FEILDBYNAME("CUSTID")->ASINTEGER;
其他的就不用说了吧!
hualianmao 2004-03-25
  • 打赏
  • 举报
回复
.
binbin 2004-03-25
  • 打赏
  • 举报
回复
mysql好象得到的是下一次auto_increment的值,所以还要减1
hualianmao 2004-03-25
  • 打赏
  • 举报
回复
.
hualianmao 2004-03-25
  • 打赏
  • 举报
回复
.
binbin 2004-03-25
  • 打赏
  • 举报
回复
使用mysql数据库,然后用select last_insert_id()来得到最后一次的auto_increment值.
jinhaiwu 2004-03-25
  • 打赏
  • 举报
回复
不要用Append(),写存储过程或者直接写sql进行保存!(只是建议)
shadowstar 2004-03-24
  • 打赏
  • 举报
回复
up

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧