看过李维的基本书,从中有所收益,但对实际问题似乎又无从下手,要做一小型系统,想
使用三层结构:
1.数据的处理在哪层实现,是中间逻辑层,服务端还是客户端?
A.查询
B.添加,修改,删除
备注:在进行多表更新时的用法,我不准备用关联表的方法来更新,对于业务上繁琐的要求用SQL可能比较灵活些.
2.数据在更新过程中的容错问题.如何解决.
如我有个事物,在更新第一表的时候正常,第二张表的时候出现异常,如何处理?
以上两个问题我需要详细的代码.
请各位三层高手或者对该问题感兴趣的朋友能够给予帮助,多谢了
可能提的问题还不是很明确,请多多包含啊!
使用三层结构:
1.数据的处理在哪层实现,是中间逻辑层,服务端还是客户端?
A.查询
B.添加,修改,删除
备注:在进行多表更新时的用法,我不准备用关联表的方法来更新,对于业务上繁琐的要求用SQL可能比较灵活些.
2.数据在更新过程中的容错问题.如何解决.
如我有个事物,在更新第一表的时候正常,第二张表的时候出现异常,如何处理?
以上两个问题我需要详细的代码.
请各位三层高手或者对该问题感兴趣的朋友能够给予帮助,多谢了
可能提的问题还不是很明确,请多多包含啊!
解决方案 »
- 请高手指点一个数据库表归类显示的问题。
- delphi有谁见过这种图形报表。给我推荐一个
- 我觉得设置没问题,可就是RADIOBUTTON不能分组选中
- 请教各位大虾,信息科技应该怎么分类?很急很急,给100分
- 那位大哥能救俺于虎口。。。在线等你放电哟!
- 有关中文delphi书下载网址?
- (高手请进)关于在程序运行期间把一个字符串转换成代码来执行
- 由于 report machine和fast report是兼容的,是在其2.43版的基础上重新做的,大部分的使用方法都一样,所以有问题可以到www.pcjingning.c
- 这有何区别?
- 问几个数学问题,不知道要发到哪儿,就发在这里,希望高手解答。
- !!好历害的小问题!!
- 怎样进行绑定更新
在客户端用CLIENTDATASET时,我想在表table1中增加一条数据,并且table2中也相应增加一条,如何在中间层实现?
结构如下:
table1:
id varchar(10)
name varchar(20)
id1 varchar(10)
table2:
id1 varchar(20)
name1 varchar(20)
1.客户端实现方式
客户端代码部分:
ClientDataSet1.ApplyUpdates(0)
ClientDataSet2.ApplyUpdates(0)
但我不想这样实现因为该窗口只是显示ClientDataSet1的数据
2.中间层实现方式代码部分
a.客户端代码部分:
var qCoor:IMTSDemoQueryCoor;
vDatas:OleVariant;
begin
qCoor:=CoMTSDemoQueryCoor.CreateRemote('127.0.0.1');
//我如何把要添加的数据传给变量vDatas?
qCoor.Inserttable1(vDatas);
end
b.中间层代码部分:
我如何获取传过来要添加的数据啊?
求教各位了!
我想在细问一下,用MTS如何在逻辑层(中间层)与数据层(服务端)进行通讯(我用的是MTS OBJECT+MTS DATA),实现数据的处理啊(是多表)?(添加,删除,修改)我不调用存储过程如何实现啊?
可否给个例子啊?或者在我上面的代码中添加,急啊
多谢了
Update1(vdatas:Olevariant,imaxError:integer,ierrorsCount:integer)方法,
Update2(vdatas:Olevariant,imaxError:integer,ierrorsCount:integer)方法,
Update3(vdatas:Olevariant,imaxError:integer,ierrorsCount:integer)方法;
再在客户端调用该方法, qCoor.update1(ClientDataSet1.Delta,0);
qCoor.update2(ClientDataSet2.Delta,0);
qCoor.update3(ClientDataSet3.Delta,0);
同时,你要自己控制事务处理的方法,在服务器端还要这样写
procedure TDataModule1.ADODataset1BeforePost(DataSet:TDataSet);
begin
if not ADOConnection1.InTransaction then
ADOConnection1.BeginTrans
else
showmessage('已有别的工作在做,请稍等后再试...')
end;procedure TDataModule1.ADODataset3AfterPost(DataSet:TDataSet);
begin
ADOConnection1.CommitTrans;
end;procedure TDataModule1.ADODataSet1PostError(DataSet: TDataSet;
E: EDatabaseError; var Action: TDataAction);
begin
ADOConnection1.RollbackTrans;
Action:=daAbort;end;procedure TDataModule1.ADODataSet2PostError(DataSet: TDataSet;
E: EDatabaseError; var Action: TDataAction);
begin
ADOConnection1.RollbackTrans;
Action:=daAbort;
end;procedure TDataModule1.ADODataSet1PostError(DataSet: TDataSet;
E: EDatabaseError; var Action: TDataAction);
begin
ADOConnection1.RollbackTrans;
Action:=daAbort;
end;如果你不用主从控制,就只能这样写了,不过这是个非常不好的设计,不仅享受不到MTS
的好处,还要自己写代码来维护事务的完整性,真惨!
vdatas:=ClientDataSet1.data;
ClientDataSet1.AppendData(Vdatas,true);
然后再用qCoor.update方法;
我想用MTS OBJECT+MTS MOUDULE,如何写啊?
烦劳了,可否给你例子
客户端(插入代码):
procedure TForm1.Button4Click(Sender: TObject);
var qCoor:IMTSDemoQueryCoor;
vDatas: array of string;
begin
qCoor:=CoMTSDemoQueryCoor.CreateRemote('127.0.0.1');
SetLength(vDatas,2);
vDatas[0]:=Edit1.Text;
vDatas[1]:=Edit2.Text;
qCoor.InsertPublishers(vDatas[0],vDatas[1]);
end;
业务层(更新代码):
procedure TMTSDemoQueryCoor.InsertPublishers(const vDatas1,
vDatas2: WideString);
var Publishers : IMTSPublishers;
begin
//InsertPublishers
if not assigned(Publishers) then
Publishers := CoMTSPublishers.Create;
Publishers.InsertPublishers(vDatas1,vDatas2);
end;
数据处理层(更新代码):
procedure TMTSPublishers.InsertPublishers(const vData1,
vData2: WideString);
begin
try
ADOCPublishers.BeginTrans;
ADOQUpdate.Close;
ADOQUpdate.SQL.Clear;
ADOQUpdate.SQL.Add('Insert into Publishers (VID,PublisherName) values (:VID,:PublisherName)');
ADOQUpdate.Parameters.ParamByName('VID').Value:=vData1;
ADOQUpdate.Parameters.ParamByName('PublisherName').Value:=vData2;
ADOQUpdate.ExecSQL;
ADOQUpdate.Close;
ADOQUpdate.SQL.Clear;
ADOQUpdate.SQL.Add('Insert into Books (VID,BookID,BookName) values (:VID,:BookID,:BookName)');
ADOQUpdate.Parameters.ParamByName('VID').Value:='';
ADOQUpdate.Parameters.ParamByName('BookID').Value:='';
ADOQUpdate.Parameters.ParamByName('BookName').Value:='测试';
ADOQUpdate.ExecSQL;
ADOCPublishers.CommitTrans;
//SetComplete;
except
ADOCPublishers.RollbackTrans;
//SetAbort;
end;
end;
谢谢了