a////程序
1、pmtsdemo.dpr (pmsdemo.dll) 需要事务
数据模块mtsdemos有一个cnado:Tadoconnetion; ador:Tadodataset;
dspstud:Tdatasetprovider;
加入用户函数、过程:
function Tmtsdemos.Get_GetInfo(const st:string)
levariant;
begin //查询数据
try
cnado.connected:=true;
ador.commandtext:=st;
ador.open;
result:=dspstud.data;
ador.close;
setcomplete;
except
setabort;
end;
cnado.close;
end;
procedure tmtsdemos.applyrec(var vdata
levariant;out succ:integer);
begin //更新数据
try
cnado.open;
dspstud.applypdates(vdata,0,succ);
setcomplete;
except
setabort;
end;
cnado.close;
end;
2、客户端pclient.exe uses pmtsdemo_tlb.pas
加入cds:Tclintdataset;并声明ms:Imtsdemos;
窗体建立时 ms:=coMtsdemos.create;
destroy时 ms:=nil;
procedure Tform1.get_infoclick(sender:tobject);
var vdata
levariant;
begin //查询
vdata:=ms.get_getInfo(editsql.text);
cds.data:=vdata;
cds.open;
end;
procedure Tform1.pdateR(sender:Tobject);
var
vdata
levariant;
succ:integer;
begin //更新
vdata:=cds.delta;
ms.updateRec(vdata,succ);
end;
b///安装到mtsdemo package中,打开组件服务发现mtsdemo包中只有一个组件
pmtsdemo.mtsdemos
c///运行客户端pclient.exe,删除、查询、更新正常。
d///观察事物运行状态
组件服务--计算机--我的电脑--com+应用服务--mtsdemo--组件--右击--
查看--属性查看:
有:prog标志:pmtsdemo.mtsdemos 事物:必需,
安全:是 同步:必须
clsid:{22ba335f-5ab3-41c1-84dc-22b02f7c66b9}
运行客户端没有见事务状态?
如果按“状态查看” 有 :prog标志,已激活, 池化, 调用中, 调用时间
运行客户端pclient开始建立mtsdemos时,已激活为1,其他为0
执行客户端“取数据”,调用时间为180,其他为0,等一会儿,全部是0;
执行客户端“更新”,调用时间为60,其他为0,等一会儿全部为0。
在外部到底怎么查看事务状态???
(程序中可用objectcontext.isintransaction)。
e///调试
mtsdemo属性 应用程序id: {334f3d3-4fe4-49ce-bfc1-f788c7912b99}
调试路径:d:/delphi5/bin/borbg50.exe dllhost.exe /processid:{334f3d3....}
delphi5 ide中设置也是/processid:{334f3d3...}没有错误,
然后在umtsdata.pas中的
function Tmtsdemos.Get_GetInfo(const st:string)
levariant;
begin //查询数据
try
cnado.connected:=true; //F5设置断点,
.....
F9运行,启动客户端pclient.exe;
在windows任务管理器中发现两个dllhost.exe进程与borbg50.exe
pclient.exe,但是pclient.exe窗体没有出现,无法调试?在ide中
run--reset停止调试,停止不了,再按一个reset出现警告
Assertion failure:"(!"nrecognized interface passed to releasedbkintf!")"
in ../win32src/dbkcom.cpp at line594点击继续,出现
access violotion at address of 02134cd8,write of address 04269962
警告,按ok,再reset出现access violotion at address of 00000000,read of address 0000000
按ok,再reset一直出现access violotion at address of 00000000,read of address 0000000
也就是退不出调试状态,客户端窗体一直没有出现。只有关闭delphi5,这时
客户端出现rpc调用失败,窗体也出现了,不知为什么???
你们真的可以调试吗???(我在安装delphi5第一次启动时的系统调试我没有选择borbg50.exe)。