错误提示“非空列不能更新为Null” ( 积分: 30 )

  • 主题发起人 主题发起人 zj21st
  • 开始时间 开始时间
Z

zj21st

Unregistered / Unconfirmed
GUEST, unregistred user!
错误提示“非空列不能更新为Null”

李维ADO书上的一个例子:
数据库: MS SQL Server 7.0
主表:
Essays (AutoID int IDENTITY (1,1) NOT NULL,
EssayName VarChar (50) NOT NULL,
EDate DateTime NULL,
Author VarChar (10) NULL)
Essays: 主键AutoID

从表:
EssayContent (AutoID int NOT NULL,
MDate DateTime NULL,
EssayContent text NULL)

ADOConnection连接到数据库,

ADOQueryMaster: select * from essays
DataSourceMaster: dataset := ADOQueryMaster
DBGridMaster: Datasource := DataSourceMaster
DBNavigatorMaster: Datasource := DataSourceMaster

ADOQueryDetail: select * from essayContent where autoid = :autoid
DataSource := DataSourceMaster
DataSourceDetail: dataset := ADOQueryDetail
DBGridDetail: DataSource := DataSourceDetail

按DBNavigatorMaster的(+)增加新记录,主从表均输入完毕,
按DBNavigatorMaster的Post试图自动保存主表和从表时,
出现提示:“非空列不能更新为Null”。

我想问题一定出在从表的AutoID上,我想正确的更新过程应该是:
先保存主表,取得主表记录的AutoId的值,
然后将该值写入从表的AutoId,最后再保存从表。

可这样要写一些代码,有没有不用写代码就能自动同时Post主表和从表的方法

我要的效果就是,当同时新增了Master和Detail的记录后,
按DBNavigatorMaster的Post能同时更新主从表。
 
错误提示“非空列不能更新为Null”

李维ADO书上的一个例子:
数据库: MS SQL Server 7.0
主表:
Essays (AutoID int IDENTITY (1,1) NOT NULL,
EssayName VarChar (50) NOT NULL,
EDate DateTime NULL,
Author VarChar (10) NULL)
Essays: 主键AutoID

从表:
EssayContent (AutoID int NOT NULL,
MDate DateTime NULL,
EssayContent text NULL)

ADOConnection连接到数据库,

ADOQueryMaster: select * from essays
DataSourceMaster: dataset := ADOQueryMaster
DBGridMaster: Datasource := DataSourceMaster
DBNavigatorMaster: Datasource := DataSourceMaster

ADOQueryDetail: select * from essayContent where autoid = :autoid
DataSource := DataSourceMaster
DataSourceDetail: dataset := ADOQueryDetail
DBGridDetail: DataSource := DataSourceDetail

按DBNavigatorMaster的(+)增加新记录,主从表均输入完毕,
按DBNavigatorMaster的Post试图自动保存主表和从表时,
出现提示:“非空列不能更新为Null”。

我想问题一定出在从表的AutoID上,我想正确的更新过程应该是:
先保存主表,取得主表记录的AutoId的值,
然后将该值写入从表的AutoId,最后再保存从表。

可这样要写一些代码,有没有不用写代码就能自动同时Post主表和从表的方法

我要的效果就是,当同时新增了Master和Detail的记录后,
按DBNavigatorMaster的Post能同时更新主从表。
 
因为你的字段定义为非空(NOT NULL)
而更新的时候可能将他置空(NULL)了
 
你在数据库定义时定义了某一字段为非空,但在你插入或修改时却给该字段空值
 
但是我操作的时候,可以看到表头所有的字段都填上了啊?怎么会为空呢?
 
我发现一个很奇怪的问题,我在ADOQueryMaster的BeforePost事件写下:showmessage('主表'+ADOQueryMaster.Fieldbyname('品号').AsString);
同时在ADOQueryDetail的BeforePost事件写下:showmessage('从表'+ADOQueryDetail.Fieldbyname('品号').AsString);
如果同时新建一个主从表数据时,先触发ADOQueryDetail的BeforePost事件,ADOQueryDetail.Fieldbyname('品号').AsString为空.但是如果已经存在主表数据,只是添加从表数据时候,ADOQueryDetail.Fieldbyname('品号').AsString就有数据了

请问如何同时新建一个主从表数据时,解决从表先保存而不能获得主表关联字段值的问题?
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
948
import
I
I
回复
0
查看
843
import
I
后退
顶部