想实现的功能是将数据库中的通讯录导出存为EXCEL格式。我先做好功能封装成DLL,然后供ASP。NET调用,因为DLL无法调试,我又做了一个应用程序,从DLL工程中COPY关键代码。然而运行时,应用程序可以执行成功,而DLL调用时, try
ExcelApp :=CreateOleObject( 'Excel.Application' );
except
result :='服务器上没有安装EXCEL组件,请联系管理员,谢谢!';
exit;
end;
处抱错。代码其实都是一模一样的,难道应用程序和DLL,执行环境要求不同?
ExcelApp :=CreateOleObject( 'Excel.Application' );
except
result :='服务器上没有安装EXCEL组件,请联系管理员,谢谢!';
exit;
end;
处抱错。代码其实都是一模一样的,难道应用程序和DLL,执行环境要求不同?
解决方案 »
- 求高手解决 dephi WideString转换pchar 的问题
- 如何将一个对象封装到OleVariant
- 高手求救 ,请高手帮忙:如何通过发送消息改变外部程序TFlatCheckBox类控件选择状态?
- 大家看看一个关于执行SQL语句的问题.
- 请教:如何禁止局域网中某些计算机上网?
- playingfly,folder80(folder80)接分
- 在clientdataset的Aggregates求和Active以设为true记录也不为空。。。。。
- 关于nmftp的一个很简单的问题,在线等待!
- SQL语言高手请进!!!
- 如何在程序中创建TADOConnection
- 神奇的问题????
- 使用API函数
{*==========================================================================*
* Function: exData
* Param: userid用户ID
* dbcnnt数据库连接参数
* Description: 处理传入的用户ID和组ID,生成相应的通讯录文件(.cvs)
*==========================================================================*}
function exData(userid,groupid,dbcnnt:string):string;
var
stmt,fileName :string;
userName,mobile,homePhone,workPhone,exterssion,conttent :string;
ExcelApp,sheet: Variant;//EXCEL对象
iRow :integer;
begin
try //初始化数据库连接
ADOConnectionMain:=TADOConnection.Create(Application);
ADOCommandMain:=TADOCommand.Create(Application);
ADODataSetMain:=TADODataSet.Create(Application);
ADODataSetMain.Connection:=ADOConnectionMain;
ADOCommandMain.Connection:=ADOConnectionMain;
ADOConnectionMain.ConnectionString:=dbcnnt;
ADOConnectionMain.Open;
except
result:='初始化数据库连接失败,无法继续。';
exit;
end; try
ExcelApp :=CreateOleObject( 'Excel.Application' );
except
result :='服务器上没有安装EXCEL组件,请联系管理员,谢谢!';
exit;
end;
ExcelApp.Visible := False;
ExcelApp.DisplayAlerts := False;
ExcelApp.workbooks.add(1);
sheet:=ExcelApp.workbooks[1].worksheets['sheet1'];
sheet.name:='个人通讯录';
sheet.Cells.item[1,1]:='姓名';
sheet.Cells.item[1,2]:='手机';
sheet.Cells.item[1,3]:='备注'; //完成EXCEL表格的设计(创建/表头填写) stmt :='SELECT * FROM contactInfo WHERE userid='+userid; ADODataSetMain.CommandText:=stmt;
try
iRow :=2;//从第二行开始填写EXCEL表格
ADODataSetMain.Open;
while not ADODataSetMain.Eof do
begin
sheet.Cells.item[iRow,1] :=Trim(ADODataSetMain['name']); // 联系人姓名
sheet.Cells.item[iRow,2] := Trim(ADODataSetMain['m_phone']); // 手机
sheet.Cells.item[iRow,3] := Trim(ADODataSetMain['comment']); // 备注
iRow :=iRow +1;
end;
ADOConnectionMain.Close;
ADOCommandMain.Free;
ADODataSetMain.Free;
ADOConnectionMain.Free;
sheet.SaveAs(userid+'.csv' );
try//释放EXCEL
ExcelApp.WorkBooks.Close;
ExcelApp.Quit;
except
end;
except
result :='发生未知错误,无法继续。';
end;
end;
还有我对比了应用程序和DLL,发现应用程序中有:implementation
uses ComObj;而DLL中无法加入这么一行代码啊。
initialization
CoInitizlize();
finallization
CoUninitialize();
要 uses ActiveX;
dll中无所谓interface,implementation,你直接在uses 中加如就可!
except
result :='服务器上没有安装EXCEL组件,请联系管理员,谢谢!';
exit;
end;
出错
ExcelApp :=CreateOleObject( 'Excel.Application' );
CreateOleObject
except
on e:exception do
begin
result :=e.message;
exit;
end;
返回的是“拒绝访问”