开发asp使用的com组件的异常处理问题。只有40分了,全部奉上,在线等待。(40分)

  • 主题发起人 主题发起人 kfzd
  • 开始时间 开始时间
K

kfzd

Unregistered / Unconfirmed
GUEST, unregistred user!
我为一个asp页面写了一个com组件,该组件完成对数据库的访问。
我在编程时用到了try except end 结构。
对于程序中出现的错误,我用 raise EAbort.create('错误信息')的方式抛出异常。
现在的问题是:在delphi中产生的异常居然被IIS提前捕获到了,老是弹出“脚本调试器”的窗口。然后就显示
----------------
试图访问的网页出现问题,无法显示。

--------------------------------------------------------------------------------

请尝试以下方法:

单击 刷新按钮或者梢候再试。

打开 127.0.0.1 主页,然后查找与所需信息相关的链接。
HTTP 500.100 - 内部服务器错误 - ASP 错误
Internet 信息服务

--------------------------------------------------------------------------------

技术信息(适用于支持人员)

错误类型:
commit_com.Ly_comfunc_commit (0x8000FFFF)
/common/ly_common.asp, 第 1143 行


浏览器类型:
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)

页:
POST 51 bytes to /test.asp

POST 数据:
fjgbh=0000000001&fcommittype=1&Submit3=%CC%E1%BD%BB

时间:
2003年6月24日, 16:52:05


详细信息:
Microsoft 支持
------------------------
这样的话,我在程序中就无法用异常处理了。
盼望各位大侠指点迷津。
我的com程序如下
------------------------
unit Ly_comfunc_commit;

{$WARN SYMBOL_PLATFORM OFF}

interface

uses
ComObj, ActiveX, AspTlb, commit_com_TLB, StdVcl,SysUtils,windows,lycommon_base;

const
CON_ASPSUCCESS = 'AAAAAAAAAA';
CON_ASPFAIL = 'BBBBBBBBBB';

CON_ARR_JLGLTABS: array [1..14] of string = ('M_BZbzb','M_BZDwxx','M_BZjclb',
'M_BZjdgc','M_BZjdxm', 'M_BZjdxmdzb','M_BZjdxmgc','M_BZjdydzb','M_BZqjsb',
'M_BZqjsb_ls','M_BZsbdzb','M_BZsblb','M_Jdrydjb','M_Jdryxmdzb');

type
TLy_comfunc_commit = class(TASPMTSObject, ILy_comfunc_commit)
private
FRootPath: string;
FErrMsg: string;
//DM: TDM;

protected
function Get_FASPRootPath: PChar; safecall;
procedure Set_FASPRootPath(Value: PChar); safecall;
function Get_FErrorMsg: PChar; safecall;
procedure execcommit; safecall;
procedure Set_FErrorMsg(Value: PChar); safecall;
constructor Create;

function ExecUpLoadFile(strJGBH: string; var strErrMsg: string): Boolean;
end;

implementation

uses ComServ;

function TLy_comfunc_commit.Get_FASPRootPath: PChar;
begin
Result := PChar(FRootPath);
end;

procedure TLy_comfunc_commit.Set_FASPRootPath(Value: PChar);
begin
FRootPath := StrPas(Value);
end;

function TLy_comfunc_commit.Get_FErrorMsg: PChar;
begin
Result := PChar(FErrMsg);
end;

procedure TLy_comfunc_commit.execcommit;
var strJGBH, strCommitPath, strCommitType, strErrMsg: string;
begin
//dm := nil;
try
try
InitSysPathVariant(Server.MapPath('/')); //初始化其他的路径变量

strCommitPath := gsCurrentPath + 'commitdata/';

{先取得客户端传过来的各项参数}
strJGBH := Request.Form.Item['fjgbh'];
strCommitType := Request.Form.Item['fcommittype'];

//DM := TDM.Create(nil);
//if (not DM.InitDB(gsEtcPath + 'comcmt.ini',strErrMsg)) then raise EAbort.Create(strErrMsg);

case MyStrToInt(strCommitType) of
1: if (ExecUpLoadFile(strJGBH, strErrMsg)) then
begin
Response.Write(CON_ASPSUCCESS);
end
else
begin
Response.Write(CON_ASPFAIL + '错误原因:' + strErrMsg);
end;
2: ;
else
Response.Write(CON_ASPFAIL + '你提交的操作类别不正确');
end;
except
on E: Exception do
begin
Response.Write(CON_ASPFAIL + '[' + E.Message + ']');
raise;
end;
end;
finally
//if (Assigned(DM)) then FreeAndNil(DM);
end;
end;

procedure TLy_comfunc_commit.Set_FErrorMsg(Value: PChar);
begin
FErrMsg := StrPas(Value);
end;

constructor TLy_comfunc_commit.Create;
begin
inherited;
end;

function TLy_comfunc_commit.ExecUpLoadFile(strJGBH: string;
var strErrMsg: string): Boolean;
var i: Integer;
strSQL, strTab, strFile: string;
begin
Result := False;
(*for i := 1 to Length(CON_ARR_JLGLTABS) do
begin
strTab := Trim(CON_ARR_JLGLTABS);

{先清空属于该机构的数据}
strSQL := 'delete from ' + strTab;
ExecQuery(strSQL, DM.ADOQuery1);

{再装入XML文件}
strFile := gsUpLoadPath + strJGBH + '_' + strTab + '.xml';
if (not FileExists(strFile)) then raise EAbort.Create('xml文件' + strFile + '不存在');
strSQL := 'select * from ' + strTab + ' where 1=2';
OpenQuery(strSQL, DM.ADOQuery1);
if (not WriteXMLFileToTab(strFile, DM.ADOQuery1, nil, strErrMsg)) then
raise EAbort.Create(strErrMsg);
end;*)
end;

initialization
TAutoObjectFactory.Create(ComServer, TLy_comfunc_commit, Class_Ly_comfunc_commit,
ciMultiInstance, tmApartment);
end.

--------------------------
 
呵呵,我的专家分是40分,不知道其他积分可不可以送。可以的话,本题400分。
 
先写一个调用此com中方法的应用程序
打开com工程
点主菜单“run-parameters” 在“host application”中选择你先前写的应用程序

然后就可以调试com工程了 此方法适用于所有的com程序
 
后退
顶部