0

我正在尝试使用 TADODataSet、TDBText 用于主表和 TDBGrid 用于详细信息表来构建主从表单(主表等订单表单包含订单标题,详细信息表包括订单项目)

主主键是标识列(自动增量字段)

当尝试在主表中添加新记录,然后尝试在主表中发布记录之前在详细信息表中添加记录时,我收到此错误“不可为空的列无法更新为空”,这是因为主表主键值仍然未知,因为我没有发布主记录,但是如果我尝试了相同的场景,除了在添加详细记录之前我发布了主记录,那么错误就不会出现。

如何解决这个问题?

我正在使用以下属性将主表与详细表连接:两个数据集都有课程位置:客户端

明细表:

  • 数据源:主表数据源
  • 主记录:Id(主表的主键)
  • IndexFieldNames :OrderId(明细表中的字段,指示该明细记录属于哪个主记录)
  • 锁类型:BatchOptimistic

请帮我

在此先感谢 Yazan Al-lahham

4

2 回答 2

3

出色地,

你应该做这样的事情(伪代码):

1 - 启动事务
2 - 发布主记录
3 - 获取插入到主服务器的 id
4 - 将主 ID 传递给详细数据集
5 - 发布详细记录
6 - 如果有效,则提交事务。否则,回滚事务。

于 2011-02-08T20:47:53.023 回答
0

顺便说一句:新的 SQL Server 代号“Denali”的 CTP 将带来 SEQUENCES 的功能,其工作方式与 whar firebird 生成器的工作非常接近。所以这个任务会变得容易得多:

当您从 gui 获取命令开始插入时,从序列中获取一个 ID 使用它来填充主记录的 PK 字段 发布主记录 当您有要插入的详细记录时 填充详细记录 发布详细记录 提交事务

非常niiice...

于 2011-02-10T17:31:17.377 回答