F
fstao
Unregistered / Unconfirmed
GUEST, unregistred user!
数据库是sql server 7,有一个表是dbo.hbku,其脚本为:
CREATE TABLE [dbo].[hbku] ([id] [int] NOT NULL ,[no] [varchar] (10) NULL ,
[mc] [varchar] (20) NULL ,[hl] [float] NULL ,[bz] [varchar] (100)
NULL ,[sign] [varchar] (10) NULL) ON [PRIMARY]
ALTER TABLE [dbo].[hbku] WITH NOCHECK ADD
CONSTRAINT [PK_hbku] PRIMARY KEY NONCLUSTERED
(
[id]
) ON [PRIMARY] ,
CONSTRAINT [IX_hbku] UNIQUE NONCLUSTERED
(
[no]
) ON [PRIMARY] ,
CONSTRAINT [IX_hbku_1] UNIQUE NONCLUSTERED
(
[mc]
) ON [PRIMARY]
我在中间服务器定义一个接口:
function TAppServer3.ApplyMasterData(Delta: OleVariant;
MaxError: Integer;
var ErrorCode: Integer): OleVariant;
begin
Result:=ProviderMaster.ApplyUpdates(Delta,MaxError,ErrorCode);
//ProviderMaster(TDataSetProvider),用Ado访问数据库。Master(Tadodataset)连接
// dbo.hbku
//ProviderMaster.dataset:=master;
end;
在前端添加TDCOMConnection、cdsmaster(Tclientdataset)和DBgrid,
cdmaster.Providername=providermaster,
在cdmaster的事件AfterPost:
procedure TForm1.cdsmasterAfterPost(DataSet: TDataSet);
var
IMida :IAppServer3;
iRecord:Integer;
begin
DCOMco.GetServer.QueryInterface(IAppServer3,IMida);
IMida.ApplyMasterData(cdsMaster.Delta,0,iRecord);
end;
注册中间服务器,然后运行客户端,DBgrid显示如下:
id no mc hl bz sign
添加第一条数据时
id no mc hl bz sign
1 a b
然后方向键向下移(相当触发AfterPost事件),保存数据,没有
问题。添加第二条数据时:
id no mc hl bz sign
1 a b
2 b c
当方向键向下移时,出现错误:
Project PClient.exe raised exception class EOleException with message
'Viloation of PRIMARY KEY constraint 'PK_hbku'.Cannot insert duplicate
key in object 'hbku''.Process stopped.Use Step or Run to continue.
它说违反primary key,但是我输入数据并没有任何重复现象,但为什么这个错误呢?
但是如果我这样做:
cdsmaster.close;
cdsmaster.open;
然后再一次添加第二条数据:
id no mc hl bz sign
1 a b
2 b c
保存它没有问题,但是在没有:cdsmaster.close和cdsmaster.open之前,再添加
第三条数据时:
id no mc hl bz sign
1 a b
2 b c
3 c d
保存的时候又出现同样的错误,为什么?
是不是我写的中间接口是不是有问题呢?我这样做目的是前端添加数据,然后中
间提交的功能。请各位看看我在中间这样写事件行不行,有没有其他的方法?
当然如果把cdsmaster的AfterPost事件改为:cdsmaster.applyupdates(0),就没
任何问题.
中间是Madias服务器。
CREATE TABLE [dbo].[hbku] ([id] [int] NOT NULL ,[no] [varchar] (10) NULL ,
[mc] [varchar] (20) NULL ,[hl] [float] NULL ,[bz] [varchar] (100)
NULL ,[sign] [varchar] (10) NULL) ON [PRIMARY]
ALTER TABLE [dbo].[hbku] WITH NOCHECK ADD
CONSTRAINT [PK_hbku] PRIMARY KEY NONCLUSTERED
(
[id]
) ON [PRIMARY] ,
CONSTRAINT [IX_hbku] UNIQUE NONCLUSTERED
(
[no]
) ON [PRIMARY] ,
CONSTRAINT [IX_hbku_1] UNIQUE NONCLUSTERED
(
[mc]
) ON [PRIMARY]
我在中间服务器定义一个接口:
function TAppServer3.ApplyMasterData(Delta: OleVariant;
MaxError: Integer;
var ErrorCode: Integer): OleVariant;
begin
Result:=ProviderMaster.ApplyUpdates(Delta,MaxError,ErrorCode);
//ProviderMaster(TDataSetProvider),用Ado访问数据库。Master(Tadodataset)连接
// dbo.hbku
//ProviderMaster.dataset:=master;
end;
在前端添加TDCOMConnection、cdsmaster(Tclientdataset)和DBgrid,
cdmaster.Providername=providermaster,
在cdmaster的事件AfterPost:
procedure TForm1.cdsmasterAfterPost(DataSet: TDataSet);
var
IMida :IAppServer3;
iRecord:Integer;
begin
DCOMco.GetServer.QueryInterface(IAppServer3,IMida);
IMida.ApplyMasterData(cdsMaster.Delta,0,iRecord);
end;
注册中间服务器,然后运行客户端,DBgrid显示如下:
id no mc hl bz sign
添加第一条数据时
id no mc hl bz sign
1 a b
然后方向键向下移(相当触发AfterPost事件),保存数据,没有
问题。添加第二条数据时:
id no mc hl bz sign
1 a b
2 b c
当方向键向下移时,出现错误:
Project PClient.exe raised exception class EOleException with message
'Viloation of PRIMARY KEY constraint 'PK_hbku'.Cannot insert duplicate
key in object 'hbku''.Process stopped.Use Step or Run to continue.
它说违反primary key,但是我输入数据并没有任何重复现象,但为什么这个错误呢?
但是如果我这样做:
cdsmaster.close;
cdsmaster.open;
然后再一次添加第二条数据:
id no mc hl bz sign
1 a b
2 b c
保存它没有问题,但是在没有:cdsmaster.close和cdsmaster.open之前,再添加
第三条数据时:
id no mc hl bz sign
1 a b
2 b c
3 c d
保存的时候又出现同样的错误,为什么?
是不是我写的中间接口是不是有问题呢?我这样做目的是前端添加数据,然后中
间提交的功能。请各位看看我在中间这样写事件行不行,有没有其他的方法?
当然如果把cdsmaster的AfterPost事件改为:cdsmaster.applyupdates(0),就没
任何问题.
中间是Madias服务器。