Z
zhangkan
Unregistered / Unconfirmed
GUEST, unregistred user!
1.我想实现COM+除错功能.
我照着李维书中的方法,在Delphi5和Delphi6中都无法成功。出现“服务器执行失败”的
错误。我想应该是Delphi的问题。因为我在元件服务中设好后,若Delphi中不打开该档案,
就能正常执行,但若Delphi中打开要除错的服务端程序,照着书中方法在run->paramters中
设置好,就会出现上述问题。
2.为何我的程序不能改为必需交易模式?
我在支援交易下能够正常运行,但其并不在交易保护模式下,而我将该元件改为必需交易便
出错“stack owerflow”,为何会如此呢?我也照着将李维提示的那两个档案改了。代码如
下,若哪位愿意帮忙,我可以将源程序发给你。哪位有COM+的源代码也可以发给我,若对我
有帮助,一定高分相送!我的email地址:abkk2000@21cn.com。
这是写的一个直接执行SQL的元件,可将其改为必须交易却出问题。
procedure TdmDoIt.DoIt(const sSQL: WideString);
begin
try
with adoqDoIt1do
begin
Active:=False;
SQL.Clear;
SQL.Add(sSQL);
ExecSQL;
SQL.Clear;
end;
// SetComplete;
SetAbort;
except
SetAbort;
end;
end;
以下是另一个元件调用上面这个元件,都在COM+服务程序中。
procedure TmtsSecurity.WritLoginOut(const Sys_ID, User_ID: WideString;
In_Time: TDateTime;
const Card_ID: WideString);
var Use_Time,sIn_Time,sOut_Time,sSQL:string;
Exit_Time:TDateTime;
IDo:IdmDoIt;
begin
Exit_Time:=now;
Use_Time:=FormatDateTime('hh:nn:ss',(Exit_Time-In_Time));
sIn_Time:=FormatDateTime('yyyy/mm/dd hh:mm:ss',In_Time);
sOut_Time:=FormatDateTime('yyyy/mm/dd hh:mm:ss',Exit_Time);
sSQL:='update loginuser set exit_time=';
sSQL:=sSQL+'to_date('+''''+sOut_Time+''','+'''yyyy/mm/dd HH24:MI:SS'''+'),';
sSQL:=sSQL+'use_time='+''''+Use_Time+'''';
sSQL:=sSQL+' where user_name='+''''+User_ID+'''';
sSQL:=sSQL+' and log_Time=to_date('+''''+sIn_Time+''','+'''yyyy/mm/dd HH24:MI:SS'''+')';
sSQL:=sSQL+' and net_Address='+''''+Card_ID+'''';
try
OleCheck(ObjectContext.CreateInstance(CLASS_dmDoIt,IID_IdmDoIt,IDo));
IDo.DoIt(sSQL);
//程序运行到这儿时便出问题,必需交易模式下。
SetAbort;
//而若改成支援交易,这句没有用,数据还是会被执行,这一点我知道,是因为
// SetComplete;
//在支援交易下并不受交易保护。
except
SetAbort;
end;
end;
我的编译环境是Delphi6。
请教哪位对COM+除错成功过的朋友答复一下(原因和解决办法)。另外,我见到书中几乎每
一个物件都是一个DLL,而我则比较喜欢将多个放在一个DLL中(比如说一个模块放在一个DLL中),
请问哪样要好一些呢?谢谢!
不知网上有没有一个专门讨论用Delphi写COM+的地方?
我照着李维书中的方法,在Delphi5和Delphi6中都无法成功。出现“服务器执行失败”的
错误。我想应该是Delphi的问题。因为我在元件服务中设好后,若Delphi中不打开该档案,
就能正常执行,但若Delphi中打开要除错的服务端程序,照着书中方法在run->paramters中
设置好,就会出现上述问题。
2.为何我的程序不能改为必需交易模式?
我在支援交易下能够正常运行,但其并不在交易保护模式下,而我将该元件改为必需交易便
出错“stack owerflow”,为何会如此呢?我也照着将李维提示的那两个档案改了。代码如
下,若哪位愿意帮忙,我可以将源程序发给你。哪位有COM+的源代码也可以发给我,若对我
有帮助,一定高分相送!我的email地址:abkk2000@21cn.com。
这是写的一个直接执行SQL的元件,可将其改为必须交易却出问题。
procedure TdmDoIt.DoIt(const sSQL: WideString);
begin
try
with adoqDoIt1do
begin
Active:=False;
SQL.Clear;
SQL.Add(sSQL);
ExecSQL;
SQL.Clear;
end;
// SetComplete;
SetAbort;
except
SetAbort;
end;
end;
以下是另一个元件调用上面这个元件,都在COM+服务程序中。
procedure TmtsSecurity.WritLoginOut(const Sys_ID, User_ID: WideString;
In_Time: TDateTime;
const Card_ID: WideString);
var Use_Time,sIn_Time,sOut_Time,sSQL:string;
Exit_Time:TDateTime;
IDo:IdmDoIt;
begin
Exit_Time:=now;
Use_Time:=FormatDateTime('hh:nn:ss',(Exit_Time-In_Time));
sIn_Time:=FormatDateTime('yyyy/mm/dd hh:mm:ss',In_Time);
sOut_Time:=FormatDateTime('yyyy/mm/dd hh:mm:ss',Exit_Time);
sSQL:='update loginuser set exit_time=';
sSQL:=sSQL+'to_date('+''''+sOut_Time+''','+'''yyyy/mm/dd HH24:MI:SS'''+'),';
sSQL:=sSQL+'use_time='+''''+Use_Time+'''';
sSQL:=sSQL+' where user_name='+''''+User_ID+'''';
sSQL:=sSQL+' and log_Time=to_date('+''''+sIn_Time+''','+'''yyyy/mm/dd HH24:MI:SS'''+')';
sSQL:=sSQL+' and net_Address='+''''+Card_ID+'''';
try
OleCheck(ObjectContext.CreateInstance(CLASS_dmDoIt,IID_IdmDoIt,IDo));
IDo.DoIt(sSQL);
//程序运行到这儿时便出问题,必需交易模式下。
SetAbort;
//而若改成支援交易,这句没有用,数据还是会被执行,这一点我知道,是因为
// SetComplete;
//在支援交易下并不受交易保护。
except
SetAbort;
end;
end;
我的编译环境是Delphi6。
请教哪位对COM+除错成功过的朋友答复一下(原因和解决办法)。另外,我见到书中几乎每
一个物件都是一个DLL,而我则比较喜欢将多个放在一个DLL中(比如说一个模块放在一个DLL中),
请问哪样要好一些呢?谢谢!
不知网上有没有一个专门讨论用Delphi写COM+的地方?