SQL有一列是identity,使用TABLE连接,如何插入数据? 在线等~~~~~~~
表结构如下
create table DocType
(
DocT_ID INT Not null identity(10001,1) primary key,
DocT_Pro Nchar(12) Not null
)
使用DBedit 承接DocT_Pro,
按键BT1代码:
procedure Tdocinfform.BitBtn1Click(Sender: TObject);
begin
cdm.CDataM.docinfDataSet.FieldByName('DocT_ID').Required:=FALSE;
cdm.CDataM.docinfDataSet.Insert;
cdm.CDataM.docinfDataSet.Post;
end;
提示错误:key violation
如何解决?我是使用三层结构,clientdataset连接应用服务器
问题点数:30、回复次数:3Top
1 楼Bes96261(秋水孤鶩)回复于 2005-04-02 08:02:47 得分 0
1:在中间层将创建永久性字段,然后在永久性字段列表中将DocT_ID设为Key及不更新 即可Top
2 楼lvenx(lvenx)回复于 2005-04-02 10:23:59 得分 0
具体步骤?Top
3 楼Bes96261(秋水孤鶩)回复于 2005-04-04 08:08:25 得分 30
1:如果你的中间层中使用ADOQuery获取数数(只要是TDataSet都一样) 双击TAdoQuery --> 右键 --> Add All Fields --> 选取"DocT_ID" 将其属性中的ProviderFlags中的pfInUpdate设为False,ReadOnly设为True 其它的字段将pfInWhere置为False
2:将指向TAdoQuery的TDataSetProvider控件中的BeforeUpdateRecord事件中写入代码:
if updatekind=ukinsert then
DeltaDS.FieldByName('DocT_ID').ProviderFlags:=DeltaDS.FieldByName('Add_ID').ProviderFlags-[pfinkey]
else
DeltaDS.FieldByName('DocT_ID').ProviderFlags:=DeltaDS.FieldByName('Add_ID').ProviderFlags+[pfinkey]
3:在客户端不要对DocT_ID作任何赋值或修改类的操作
procedure Tdocinfform.BitBtn1Click(Sender: TObject);
begin
cdm.CDataM.docinfDataSet.Insert;
cdm.CDataM.docinfDataSet.FieldByName('DocT_ProN').AsString := "Value";
cdm.CDataM.docinfDataSet.Post; //另外也不是用Post提交,一般用ApplyUpdate提交
end;
Top




