1.无主键
2.字段允许为空
3.字段类型不匹配
4.字段是不是精度不够。
5.ADO控件 CursorLocation的属性,默认值为“clUseClient”,应设为“clUseServer”。(这个最关键)
可以的。解释:delphi是可以在win7 32位系统下正常兼容运行的,而win7 64位系统是兼容32位系统的,所以这个是可以正常使用的。通常兼容性问题都是出现在xp系统和win7系列产品上,所以在win7 64位下正常安装使用即可。
以前用Delphi6+Excel2003,导出语句CreateOleObject('Excel.Application')很正常,但改为Excel2007精简版之后就会出现“无效的类别字符串”错误。
后来查CreateOleObject函数的代码如下:
function CreateOleObject(const ClassName: string): IDispatch
var
ClassID: TCLSID
begin
ClassID := ProgIDToClassID(ClassName)
OleCheck(CoCreateInstance(ClassID, nil, CLSCTX_INPROC_SERVER or
CLSCTX_LOCAL_SERVER, IDispatch, Result))
end
再查ProgIDToClassID函数的代码如下:
function ProgIDToClassID(const ProgID: string): TGUID
begin
OleCheck(CLSIDFromProgID(PWideChar(WideString(ProgID)), Result))
end
再进入Regedit注册表里,查ProgID中有“Excel”的字符串,终于发现了Office2007的是“Excel.Sheet.12”。于是变更程序代码如下,结果测试成功:
uses ComObj
procedure TForm1.Button2Click(Sender: TObject)
var MyWorkbook:Variant
begin
MyWorkbook := CreateOleObject('Excel.Sheet.12')//对于Excel2007,不能再用Excel.Application
MyWorkbook.Application.WorkBooks.Add
MyWorkbook.Application.Visible := true
end
现在我终于可以从Delphi导出数据到Excel2007了。
另,如果安装的是Office2007完整版,就可直接使用CreateOleObject('Excel.Application')如果安装的是精简版,只能用CreateOleObject('Excel.Sheet.12')
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)