在三层结构下如何提交一个主从表的记录,主表可以保存,从表不行了,不要告诉我就用ClientDataSete的属性ApplyUpdates,请大家帮着查查,为什么主表可以,从表不行。主表采用的是
commandText的方法,而从表是用ApplyUpdates的方法。能给一些例子或方法吗?
谢谢!
数据库为ORACLE,主表中DJH是关键字,从表中Masterid和ID为关键字,其中主表中的
DJH关联从表中的Masterid.
s_Sql:='insert into chwTest(DJH,opdate,memo)'
+' Values('''+djhed.Text+''',:opdate,'''+memoed.Text+''')';
with Dm.mastCDataSet do
begin
Close;
CommandText:=s_Sql;
Params.ParamByName('opdate').Value:=formatdatetime('yyy-mm-dd',opdtp.Date);
Execute;
end;
//以上是数据写入主表
//以下是打开从表,写入数据
s_Sql:='select * from chwtestdet where masterid='''+djhed.Text+'''';
with Dm.mastCDataSet do
begin
Close;
CommandText:=s_Sql;
Open;
Dm.detCDataSet.Edit;
DM.detCDataSet.Post;
Dm.detCDataSet.First;
I:=1;
//以下的代码的作用是把从表(对应的ClientDataSet为DM.detCDataSet)中的数据
写到另一个空的ClientDataSet中即DM.mastCdataSet
while not Dm.detCDataSet.Eof do
begin
DM.mastCDataSet.Insert;
Fieldbyname('masterid').AsString:=djhed.Text;
Fieldbyname('Id').AsString:=inttostr(I);
Fieldbyname('code').AsString:=DM.detCDataSet.fieldbyname('code').AsString;
Fieldbyname('name').AsString:=DM.detCDataSet.fieldbyname('name').AsString;
Fieldbyname('spec').AsString:=DM.detCDataSet.fieldbyname('spec').AsString;
Fieldbyname('memo').AsString:=DM.detCDataSet.fieldbyname('memo').AsString;
inc(I);
DM.detCDataSet.Next;
end;
I:=DM.mastCDataSet.ApplyUpdates(-1);
//以上是提交数据
if I>0 then showmessage('保存失败!')else
showmessage('保存成功!');
Exit;
end;
commandText的方法,而从表是用ApplyUpdates的方法。能给一些例子或方法吗?
谢谢!
数据库为ORACLE,主表中DJH是关键字,从表中Masterid和ID为关键字,其中主表中的
DJH关联从表中的Masterid.
s_Sql:='insert into chwTest(DJH,opdate,memo)'
+' Values('''+djhed.Text+''',:opdate,'''+memoed.Text+''')';
with Dm.mastCDataSet do
begin
Close;
CommandText:=s_Sql;
Params.ParamByName('opdate').Value:=formatdatetime('yyy-mm-dd',opdtp.Date);
Execute;
end;
//以上是数据写入主表
//以下是打开从表,写入数据
s_Sql:='select * from chwtestdet where masterid='''+djhed.Text+'''';
with Dm.mastCDataSet do
begin
Close;
CommandText:=s_Sql;
Open;
Dm.detCDataSet.Edit;
DM.detCDataSet.Post;
Dm.detCDataSet.First;
I:=1;
//以下的代码的作用是把从表(对应的ClientDataSet为DM.detCDataSet)中的数据
写到另一个空的ClientDataSet中即DM.mastCdataSet
while not Dm.detCDataSet.Eof do
begin
DM.mastCDataSet.Insert;
Fieldbyname('masterid').AsString:=djhed.Text;
Fieldbyname('Id').AsString:=inttostr(I);
Fieldbyname('code').AsString:=DM.detCDataSet.fieldbyname('code').AsString;
Fieldbyname('name').AsString:=DM.detCDataSet.fieldbyname('name').AsString;
Fieldbyname('spec').AsString:=DM.detCDataSet.fieldbyname('spec').AsString;
Fieldbyname('memo').AsString:=DM.detCDataSet.fieldbyname('memo').AsString;
inc(I);
DM.detCDataSet.Next;
end;
I:=DM.mastCDataSet.ApplyUpdates(-1);
//以上是提交数据
if I>0 then showmessage('保存失败!')else
showmessage('保存成功!');
Exit;
end;
s_Sql:='select * from chwtestdet where masterid='''+djhed.Text+'''';
with Dm.mastCDataSet do
begin
Close;
CommandText:=s_Sql;
Open;
Dm.detCDataSet.Edit;
DM.detCDataSet.Post;
Dm.detCDataSet.First;
I:=1;
//以下的代码的作用是把从表(对应的ClientDataSet为DM.detCDataSet)中的数据
写到另一个空的ClientDataSet中即DM.mastCdataSet
while not Dm.detCDataSet.Eof do
begin
DM.mastCDataSet.Insert;
Fieldbyname('masterid').AsString:=djhed.Text;
Fieldbyname('Id').AsString:=inttostr(I);
Fieldbyname('code').AsString:=DM.detCDataSet.fieldbyname('code').AsString;
Fieldbyname('name').AsString:=DM.detCDataSet.fieldbyname('name').AsString;
Fieldbyname('spec').AsString:=DM.detCDataSet.fieldbyname('spec').AsString;
Fieldbyname('memo').AsString:=DM.detCDataSet.fieldbyname('memo').AsString;
post;//注意这里,需要保存
inc(I);
DM.detCDataSet.Next;
end;
I:=DM.mastCDataSet.ApplyUpdates(-1);
//以上是提交数据
if I>0 then showmessage('保存失败!')else
showmessage('保存成功!');
Exit;
end;