用excel管理仓库关联数据库时报错

请问怎样实现excel和数据库的互相关联的问题
[问题点数:101分,结帖人zjhydx98]
请问怎样实现excel和数据库的互相关联的问题
[问题点数:101分,结帖人zjhydx98]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
匿名用户不能发表回复!|初学者课程:|| |
| 知识库: |
培训:|||| |
查看: 12184|回复: 50
U8 输出excel 外部数据库驱动程序(1)中的意外错误
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
才可以下载或查看,没有帐号?
& & 如题,近日用友U8用户大面积爆发此问题,具体说明和解决方案如下图。
QQ图片40.png (953.69 KB, 下载次数: 243)
18:14 上传
输出成2007格式可以的
头像被屏蔽
提示: 该帖被管理员或版主屏蔽
头像被屏蔽
提示: 该帖被管理员或版主屏蔽
有时卸了还是没用,除了装系统没办法了吗?用友也不知有没有好的解 决方案
卸载后没用可能是没重启,目前还没有卸载+重启电脑不能解决的
头像被屏蔽
提示: 作者被禁止或删除 内容自动屏蔽
好的,知道了!!!!!!!!!!!!!!!!!!!!!!!!
好的,知道了!!!&
收到,的确碰到过一例,不能导出至excel
太好了,谢谢
学习一下,不错
这已经是MICROSOFT第二次。第一次是所有的单据列表输出,第二次就是输出XLS。
有除了卸载以外的解决方案了吗??
太好了,谢谢
好的,知道了!
太好了,谢谢
微软的补丁好像是必须强行打的吧
头像被屏蔽
提示: 该帖被管理员或版主屏蔽
头像被屏蔽
提示: 该帖被管理员或版主屏蔽
过来学习下。。。。。。。。。。加油。。。。。。。。。。。。。。。。。。
Powered by查看: 3800|回复: 114
ArcGIS添加Excel数据的新老问题(连接数据库失败)
主题铜板好友
高级工程师, 积分 814, 距离下一级还需 386 积分
高级工程师, 积分 814, 距离下一级还需 386 积分
马上注册地信网,享受更多功能,学习更多知识,成就人生精彩!
才可以下载或查看,没有帐号?
ArcGIS添加Excel数据的新老问题(连接数据库失败)
这次我们将跟大家分享一下ArcGIS添加Excel文件出现的新老问题,相信大家经常碰到了,我们在GIS思维发布的《ArcGIS10.1入门实战视频教程》中做了强调说明,那我们这次写这个分享的目的是要说明一下2017年10月中旬左右ArcGIS添加Excel数据出现的新问题。
我们先说说老问题,ArcGIS是可以直接添加excel数据,且在ArcGIS中以属性表的格式显示。如下了。
1.jpg (262.9 KB, 下载次数: 2)
21:09 上传
但是,经常我们在ArcGIS中添加Excel会出现如下的问题了(链接到数据库失败,出现基础数据库错误,没有注册类),这个是因为你的excel数据是高版本的格式xlsx。
2.jpg (40.66 KB, 下载次数: 0)
21:09 上传
这个问题我想大家都知道解决了,主要有两种解决方法了:
1、把你的excel数据另存为xls数据,再次添加就ok了。
3.jpg (17.34 KB, 下载次数: 0)
21:09 上传
2、安装一下AccessDataEngine就ok了,这个是高版本的一个数据驱动引擎,装上之后,ArcGis就可以轻松的添加Excel高版本的数据格式了。(AccessDataEngine可到GIS思维腾讯课堂处下载,查看最后课堂地址,或者关注GIS思维微信公众号回复)
但是,最近我们在添加excel数据的时候又发现了一个新问题,如下图
4.jpg (15.16 KB, 下载次数: 0)
21:09 上传
英文翻译如下:
(Error:& &
Failed to connect to database.
General function failure
Unexpected error from external database driver (1))
& &&&游客,如果您要查看本帖隐藏内容请
地信网的成长离不开您的支持!
主题铜板好友
钻石会员, 积分 14892, 距离下一级还需 5108 积分
钻石会员, 积分 14892, 距离下一级还需 5108 积分
谢谢提供分享!
该会员没有填写今日想说内容.
主题铜板好友
钻石会员, 积分 13941, 距离下一级还需 6059 积分
钻石会员, 积分 13941, 距离下一级还需 6059 积分
Thanks♪(・ω・)ノ
主题铜板好友
助理工程师, 积分 133, 距离下一级还需 267 积分
助理工程师, 积分 133, 距离下一级还需 267 积分
这个驱动引擎是gis官方的吗?
主题铜板好友
技术员, 积分 10, 距离下一级还需 90 积分
技术员, 积分 10, 距离下一级还需 90 积分
问题的原因,是不是跟EXECLE的版本相关
主题铜板好友
最新的windows 10还是不认
主题铜板好友
高级工程师, 积分 814, 距离下一级还需 386 积分
高级工程师, 积分 814, 距离下一级还需 386 积分
主题铜板好友
教授级高工, 积分 1421, 距离下一级还需 579 积分
教授级高工, 积分 1421, 距离下一级还需 579 积分
谢谢楼主分享!!
主题铜板好友
高级工程师, 积分 684, 距离下一级还需 516 积分
高级工程师, 积分 684, 距离下一级还需 516 积分
好资料谢谢楼主分享
主题铜板好友
技术员, 积分 38, 距离下一级还需 62 积分
技术员, 积分 38, 距离下一级还需 62 积分
谢谢提供分享!
荣誉会员勋章
荣誉会员勋章
地信专家组
地信专家组
5周年纪念勋章
5周年纪念勋章
成就学员勋章
成就学员勋章
热线: 400-
Powered byvc使用ODBC读excel数据库错误,找不到表的解决办法(转)
前一阵子学习了徐景周老师的用ODBC读写excel的代码。原封不动抄下来,的确很好用,但是真正以应用到自己的需要,就出现问题了。只能按照原程序的顺序,先写一个excel再读取。当读取自己的excel时候,总是出现,数据库错误,找不到表的提示。很是沮丧。
今天不甘心,又重新回头找原因,原来就在程序的评论中,早就有了结果,平时不注意:
读写excel的源代码如下:
&&&&&首先,应确保ODBC中已安装有Excel表格文件的驱动"MICROSOFT
EXCEL DRIVER (*.XLS)"。然后,可根据下面步骤进行:
&1. 在StdAfx.h文件中加入:
#include &afxdb.h&
#include &odbcinst.h&
&2. 通过ODBC直接创建Excel文件并在表中插入数据(暂定文件名:Demo.xls)
//创建并写入Excel文件
void CRWExcel::WriteToExcel()
& CString sDriver = "MICROSOFT EXCEL DRIVER
(*.XLS)"; // Excel安装驱动
& CString sExcelFile =
"c:\\demo.xls";&&&&&&&&&&&&&&&
// 要建立的Excel文件
& CString sS
创建进行存取的字符串
sSql.Format("DRIVER={%s};DSN='''';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",
&&&&&&&&&&&&&&&
sDriver, sExcelFile, sExcelFile);
&&& // 创建数据库
(既Excel表格文件)
database.OpenEx(sSql,CDatabase::noOdbcDialog) )
// 创建表结构(姓名、年龄)
sSql = "CREATE TABLE demo (Name TEXT,Age NUMBER)";
database.ExecuteSQL(sSql);
// 插入数值
sSql = "INSERT INTO demo (Name,Age) VALUES (''徐景周'',26)";
database.ExecuteSQL(sSql);
sSql = "INSERT INTO demo (Name,Age) VALUES (''徐志慧'',22)";
database.ExecuteSQL(sSql);
sSql = "INSERT INTO demo (Name,Age) VALUES (''郭徽'',27)";
database.ExecuteSQL(sSql);
关闭数据库
database.Close();
& CATCH_ALL(e)
TRACE1("Excel驱动没有安装: %s",sDriver);
& END_CATCH_ALL;
&3. 通过ODBC直接读取Excel文件(暂定文件名:Demo.xls) //
读取Excel文件
void CRWExcel::ReadFromExcel()
&&& CDatabase
&&& CString
&&& CString
sItem1, sItem2;
&&& CString
&&& CString
&&& CString
sFile = "Demo.xls";
将被读取的Excel文件名
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
检索是否安装有Excel驱动 "Microsoft Excel Driver (*.xls)"
&&& sDriver =
GetExcelDriver();
(sDriver.IsEmpty())
// 没有发现Excel驱动
AfxMessageBox("没有安装Excel驱动!");
创建进行存取的字符串
sDsn.Format("ODBC;DRIVER={%s};DSN='''';DBQ=%s", sDriver,
// 打开数据库(既Excel文件)
database.Open(NULL, false, false, sDsn);
CRecordset recset(&database);
// 设置读取的查询语句.
sSql = "SELECT Name, Age
&&&&&&&&&&&&&&
"FROM demo
"&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&
"ORDER BY Name ";
// 执行查询语句
recset.Open(CRecordset::forwardOnly, sSql,
CRecordset::readOnly);
// 获取查询结果
while (!recset.IsEOF())
&&&&&&&&&&&
//读取Excel内部数值
&&&&&&&&&&&
recset.GetFieldValue("Name ", sItem1);
&&&&&&&&&&&
recset.GetFieldValue("Age", sItem2);
&&&&&&&&&&&
// 移到下一行
&&&&&&&&&&&
recset.MoveNext();
// 关闭数据库
database.Close();
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
CATCH(CDBException, e)
// 数据库操作产生异常时...
AfxMessageBox("数据库错误: " + e-&m_strError);
END_CATCH;
&4. 获取ODBC中Excel驱动的函数 CString
CRWExcel::GetExcelDriver()
szBuf[2001];
cbBufMax = 2000;
&&& char *pszBuf
&&& CString
获取已安装驱动的名称(涵数在odbcinst.h里)
(!SQLGetInstalledDrivers(szBuf, cbBufMax,
&cbBufOut))
return "";
检索已安装的驱动是否有Excel...
if (strstr(pszBuf, "Excel") != 0)
&&&&&&&&&&&
&&&&&&&&&&&
sDriver = CString(pszBuf);
&&&&&&&&&&&
pszBuf = strchr(pszBuf, ''\0'') + 1;
(pszBuf[1] != ''\0'');
&&& return
vc使用ODBC读excel找不到表的解决办法
&&&&Excel工作簿要通过ODBC进行数据库操作,确实需要一点与其他数据库(例如:ACCESS,FORPRO)不同的设置.&
&&&&因为表名不等于SHEET1,也不等于SHEET2,SHEET3。&
&&&&要访问表&,&必须先定义一个表。&
&&&&方法如下:&
&&&&运行Microsoft&Excel&,&打开要操作的工作簿,&左键拖拽,选取要定义成为表的区域,&从菜单中选择'插入&'-&'名称'-&'定义'&
&&&&&'定义名称'对话框出现后,键入表的名字,&
&&&&&例如:STUDENTS,存盘退出。&
&&&&这样,你就可以在VC中,使用象SELECT&*&FROM&STUDENTS&这样的SQL语句了。试试看
&&&&如果不行,重复上面操作,看看定义表加进入没有
注意以下几点:
对于对象的属性值的读取或赋值,需要用GetProperty()或SetProperty(NewValue)函数,不能象VB中直接通过属性名称取值或赋值。例如:Worksheet.GetCount(), Worksheet.SetName(“Sheet1”)。
对集合对象中的成员对象的引用,必须使用集合对象的GetItem()函数。例如:Worksheets.GetItem(ColeVariant((long)1))或Worksheets.GetItem(ColeVariant(“Sheet1”))取得第一个工作表。
在COM接口中,时常用到Variant,BSTR,SafeArray数据类型。Variant数据类型是一个联合,可表示几乎所有的类型的数据,具体用法见MSDN中的相关介绍,类_variant_t是对VARIANT数据类型的封装。在Excel 2000的VB编程帮助中,如果提到某函数或属性需要一个值,该值的数据类型通常是Variant,在封装Excel 2000对象的类定义中,说明了具体需要的数据类型。BSTR是一个包括了字符串和字符串长度的数据结构,类_bstr_t是对BSTR数据类型的封装。在Excel 2000的VB编程帮助中提到的字符串通常指BSTR。具体函数参数或属性的数据类型,见封装该对象的类的定义。SafeArray是一个包括数组和数组边界的结构,数组边界外的内容不允许访问。在Excel 2000的VB编程帮助中提到的数组是指SafeArray。关于SafeArray的处理,请见MSDN的相关帮助。
对于缺省参数和缺省值。在VB中,函数的参数可以空缺,在VC++中不允许,必须将所有的参数填写完全。如果你希望指定某个参数为缺省值,根据参数数据类型的不同,可指定不同的缺省值。当参数数据类型为字符串时,可以用长度为0的字符串。如果参数是Variant类型,可用常量vtMissing,该常量在comdef.h中定义。也可用_variant_t(DISP_E_PARAMNOTFOUND, VT_ERROR)产生一个Variant对象。
Excel对象中的集合对象有时包括的子对象是不一定的,例如:Range对象,可以表示Cell的集合,也可以表示Column的集合或Row的集合,Range.GetItem(1)可以返回Cell或Column或Row对象。
对对象的引用或传递对象,使用IDispatch类对象,有时利用Variant对IDispatch进行包装。
以下是一段源程序,演示如何启动Excel 2000,利用一个模板文件产生一个新文档,在该文档的”Sheet1”工作表的第一个单元中填写一段文字,设置第一列的列宽,然后调用一个模板中的宏,执行一段程序,最后打印预览该Excel文档。模板文件名称:MyTemplate.xlt。程序在Visual C++ 6.0 sp4,Windows 2000 Professional sp-1下调试通过。
首先利用Visual C++ 6.0,建立一个MFC基于对话框的工程项目,共享DLL,Win32平台。工程名称ExcelTest。在主对话框中加入一个按钮,
ID IDC_EXCELTEST
Caption Test Excel
双击该按钮,增加成员函数void CExcelTestDlg::OnExceltest()。
在BOOL CExcelTestApp::InitInstance()中,dlg.DoModal();之前增加代码:
if (CoInitialize(NULL)!=0)
AfxMessageBox("初始化COM支持库失败!");
在return FALSE; 语句前,加入:
CoUninitialize();
选择Menu-&View-&ClassWizade,打开ClassWizade窗口,选择Add Class-&From a type library,选择D:\Program Files\Microsoft Office\office\Excel9.OLB(D:\Program Files\Microsoft Office\是本机上Microsoft Office 2000的安装目录,可根据个人机器上的实际安装目录修改)。选择_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range,加入新类,分别为_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range,头文件Excel9.h,源文件Excel9.cpp。
在ExcelTestDlg.cpp文件的头部,#include "ExcelTestDlg.h"语句之下,增加 :
#include "comdef.h"
#include "Excel9.h"
在void CExcelTestDlg::OnExceltest() 函数中增加如下代码:
void CExcelTestDlg::OnExceltest() 
_Application ExcelA
Workbooks wbsMyB
_Workbook wbMyB
Worksheets wssM
_Worksheet wsM
Range rgMyR
//创建Excel 2000服务器(启动Excel)
if (!ExcelApp.CreateDispatch("Excel.Application",NULL))
AfxMessageBox("创建Excel服务失败!");
//利用模板文件建立新文档
wbsMyBooks.AttachDispatch(ExcelApp.GetWorkbooks(),true);
wbMyBook.AttachDispatch(wbsMyBooks.Add(_variant_t("g:\\exceltest\\MyTemplate.xlt")));
//得到Worksheets
wssMysheets.AttachDispatch(wbMyBook.GetWorksheets(),true);
//得到sheet1
wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("sheet1")),true);
//得到全部Cells,此时,rgMyRge是cells的集合
rgMyRge.AttachDispatch(wsMysheet.GetCells(),true);
//设置1行1列的单元的值
rgMyRge.SetItem(_variant_t((long)1),_variant_t((long)1),_variant_t("This Is A Excel Test Program!"));
//得到所有的列
rgMyRge.AttachDispatch(wsMysheet.GetColumns(),true);
//得到第一列
rgMyRge.AttachDispatch(rgMyRge.GetItem(_variant_t((long)1),vtMissing).pdispVal,true);
//设置列宽
rgMyRge.SetColumnWidth(_variant_t((long)200));
//调用模板中预先存放的宏
ExcelApp.Run(_variant_t("CopyRow"),_variant_t((long)10),vtMissing,vtMissing,
vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,
vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,
vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,
vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing);
//打印预览
wbMyBook.SetSaved(true);
ExcelApp.SetVisible(true);
wbMyBook.PrintPreview(_variant_t(false));
//释放对象
rgMyRge.ReleaseDispatch();
wsMysheet.ReleaseDispatch();
wssMysheets.ReleaseDispatch();
wbMyBook.ReleaseDispatch();
wbsMyBooks.ReleaseDispatch();
ExcelApp.ReleaseDispatch();
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 excel数据库服务器 的文章

 

随机推荐