DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: webb123
今日帖子: 1
在线用户: 2
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 nickemma (N.E Zhou) ★☆☆☆☆ -
普通会员
2017/2/20 23:23:31
标题:
[求助]Windows 10 x64 下运行D7编写的小程序出问题 浏览:3278
加入我的收藏
楼主:     一直以来本人用自己在D7下写的小程序记录笔记,采用的是ADO连接ACCESS方式,其中第三方控件:TdxDBTreeView/TDBGridEh

    现在出现的情况是左边的树目录结构显示正常,但是条目不对应了,乱套了。不管采用兼容模式还是管理员模式情况都一样,有遇到这种情况的朋友吗?
----------------------------------------------
-
作者:
男 starrysea (星海) ▲▲▲▲▲ -
普通会员
2017/2/20 23:51:01
1楼: 感觉上是连access的问题
----------------------------------------------
挂机赚钱 https://www.yiluzhuanqian.com/P3VpZD0zNjY0MA%3D%3D
作者:
男 kinneng (kinneng) ★☆☆☆☆ -
盒子活跃会员
2017/2/21 12:42:01
2楼: 跟D7没有关系, 其它包括64位的delphi版本也一样,跟mdb文件的版本有关,微软下载AccessDatabaseEngine.exe 和 AccessDatabaseEngine_x64.exe安装一下即可
----------------------------------------------
声明:本人不在论坛询问任何编程问题,请不要将我的帖子当成问题来回答。炒股一天,编程三年,不浪费时间了。 经常在外面,没空,不要找我..
作者:
男 nickemma (N.E Zhou) ★☆☆☆☆ -
普通会员
2017/2/21 21:38:34
3楼:
 kinneng (kinneng)
跟D7没有关系, 其它包括64位的delphi版本也一样,跟mdb文件的版本有关,微软下载AccessDatabaseEngine.exe 和 AccessDatabaseEngine_x64.exe安装一下即可



下载安装了AccessDatabaseEngine_X64.exe,故障一样。
----------------------------------------------
-
作者:
男 kinneng (kinneng) ★☆☆☆☆ -
盒子活跃会员
2017/2/22 0:46:05
4楼: 你应该两个都下载安装,这里X64不是说这个文件是64位版本的意思,别以为自己的系统是64位,就只安装X64这个,其实X64是64位数据引擎,提供数据给64位软件使用,另一个是32位引擎,提供给32位软件使用,D7是32位软件,需要32的引擎。
----------------------------------------------
声明:本人不在论坛询问任何编程问题,请不要将我的帖子当成问题来回答。炒股一天,编程三年,不浪费时间了。 经常在外面,没空,不要找我..
作者:
男 nickemma (N.E Zhou) ★☆☆☆☆ -
普通会员
2017/2/22 7:40:22
5楼:
kinneng



我肯定理解你的意思,两个我都下载了,但是windows 10 x64不允许安装AccessDatabaseEngine_x86.exe
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2017/2/22 8:34:51
6楼: 楼主是保密局的,根本不打算提供具体的错误信息。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 wk_knife (wk_knife) ★☆☆☆☆ -
盒子活跃会员
2017/2/22 9:32:08
7楼: 让装,咋不让装,我们同事前几天刚装了,win10 x64
----------------------------------------------
-
作者:
男 kinneng (kinneng) ★☆☆☆☆ -
盒子活跃会员
2017/2/22 11:00:08
8楼: 那有不允许装的,微软自己的产品,Win8以上可以装,两个都要装,Delphi编译成32位程序就需要安装AccessDatabaseEngine.exe才能读写Access数据库,编译成64位程序,就需要安装AccessDatabaseEngine_x64.exe,另外mdb文件是有版本的,老版本通常都直接能读写,新版本就要安装新Engine
----------------------------------------------
声明:本人不在论坛询问任何编程问题,请不要将我的帖子当成问题来回答。炒股一天,编程三年,不浪费时间了。 经常在外面,没空,不要找我..
作者:
男 nickemma (N.E Zhou) ★☆☆☆☆ -
普通会员
2017/2/22 21:13:38
9楼:
kinneng wk_knife


今天在重新试验了一下,之前我说的不能安装不能全错,但确实不严谨。
正确来说 AccessDatabaseEngine_x64.exe与AccessDatabaseEngine.exe只能安装其中一个。

现在试验过了,不管是安装AccessDatabaseEngine_x64.exe或AccessDatabaseEngine.exe,故障依旧。

wang_80919


我并不是不想提供截图,只是截图也看不出什么,因为我没有WIN7的电脑来截一个正常的给你们看。。。

故障问题:就好像现在截图显示,左面的树目录是DEV,正常的话右边起码有过百条相关的笔记。
此帖子包含附件:
JPEG 图像
大小:424.4K
----------------------------------------------
-
作者:
男 kinneng (kinneng) ★☆☆☆☆ -
盒子活跃会员
2017/2/22 22:06:59
10楼: 那个对话框已经告诉你原因,你按对话框的方法去做,先卸载MsOffice,安装两个文件之后,再装回去即可。
----------------------------------------------
声明:本人不在论坛询问任何编程问题,请不要将我的帖子当成问题来回答。炒股一天,编程三年,不浪费时间了。 经常在外面,没空,不要找我..
作者:
男 kinneng (kinneng) ★☆☆☆☆ -
盒子活跃会员
2017/2/22 22:20:43
11楼: 我没有装MsOffice,就只安装这两个文件,2010那个就是X64,64位软件要靠它来读写数据,2007那个是32位,如果只是D7编程,装这个就行。
此帖子包含附件:
JPEG 图像
大小:49.7K
----------------------------------------------
声明:本人不在论坛询问任何编程问题,请不要将我的帖子当成问题来回答。炒股一天,编程三年,不浪费时间了。 经常在外面,没空,不要找我..
作者:
男 nickemma (N.E Zhou) ★☆☆☆☆ -
普通会员
2017/2/22 23:42:07
12楼:
kinneng


你还纠结这个问题干嘛呢?我截图上面不是表明我已经安装好了吗?但是故障依旧啊。
提示的错误窗口的意思是:我已经安装了一个32位得啦就不能再安装64位的。
如果你安装了一个64位的,错误提示将会是:你已经安装了一个64位,就不能再安装32位。

除非您的意思叫我安装一个2007试试。

更正你一个问题,2010 x64安装后在程序那里会显示x64(或64bit,详细忘记了)结尾的,看你的截图两个都是x86而已
----------------------------------------------
-
作者:
男 kinneng (kinneng) ★☆☆☆☆ -
盒子活跃会员
2017/2/23 2:57:04
13楼: 数据引擎本身是多少位有什么关系,
算了,自己摸索去吧。
该说的都说了,
我有空看看股票好了。
----------------------------------------------
声明:本人不在论坛询问任何编程问题,请不要将我的帖子当成问题来回答。炒股一天,编程三年,不浪费时间了。 经常在外面,没空,不要找我..
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2017/2/23 8:36:54
14楼: 楼主你的重点在于 数据显示不是你期望的。
请自己用 access 打开你的 mdb 去看。
或者 用 DELPHI debug 模式 f9。
建议边 F8 F7 F9 ,边看你的 MDB 内容。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 merced (merced) ★☆☆☆☆ -
普通会员
2017/2/23 14:43:01
15楼: 你既然以前在D7上编的ADO访问Access的程序当时并能正确运行,说明你很可能不是通过AccessDatabaseEngine Provider访问的Access,而是通过Jet 4.0 Provider访问的。因为D7的时代明显比Office2007时才出现的AccessDatabaseEngine Provider要早。
为了保持对原有32位软件的兼容性,从winxp的64位版本到win10的64位版本一直附带着32位模式下的Jet 4.0 Provider(具体COM组件位于\Windows\SysWOW64下),所以在Win10 x64下,32位程序通过Jet 4.0 Provider访问Access(.mdb)数据库仍然是畅通无阻的,不需要安装任何额外组件。你的运行错误需要查找ADO数据库连接之外的原因。

顺便说一句,Windows x64版本的WOW64子层(用于模拟32位程序的运行环境)实现的相当相当好,绝大多数绝大多数32位程序都在上面运行的畅通无阻。如果遇到32位程序运行的问题,首先查找自己的原因,之后再找微软的原因。
----------------------------------------------
-
作者:
男 lsz100 (lsz) ★☆☆☆☆ -
盒子活跃会员
2017/2/23 15:28:08
16楼: 说的好
----------------------------------------------
我为人人为我
作者:
男 lsz100 (lsz) ★☆☆☆☆ -
盒子活跃会员
2017/2/23 15:28:56
17楼: 说不定是SQL条件写错了 加了过滤了
----------------------------------------------
我为人人为我
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2017/2/23 15:54:27
18楼: 楼主已死,有事烧香。
我 14 楼的意思,就是说 楼主 应该 看看自己的代码。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 nickemma (N.E Zhou) ★☆☆☆☆ -
普通会员
2017/2/23 23:05:33
19楼:
wang_80919 (Flying Wang)



不用烧香,只是每天开电脑的时间不多而已。。。

merced



没错,我就是采用“Provider=Microsoft.Jet.OLEDB.4.0”访问的。
----------------------------------------------
-
作者:
男 nickemma (N.E Zhou) ★☆☆☆☆ -
普通会员
2017/3/2 20:40:51
20楼: 由于64位操作系统不支持Microsoft OLE DB Provider for Jet驱动程序,也不支持更早的Microsoft Access Driver (*.mdb)方式连接。所以用于 Access 和 Excel 数据库的 Microsoft OLE DB Provider for Jet 在 64 位版本中不可用,也就是说,如下两种连接字符串都已经无法正常工作了:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.mappath(db)
"driver=Microsoft Access Driver (*.mdb);DBQ="&Server.MapPath(db)

改造步骤:(实际没有测试,因为WIN10x64安装DELPHI7注册不了ADO。)

1.Microsoft Access Database Engine 2010 Redistributable          
http://www.microsoft.com/downloads/zh-cn/details.aspx?FamilyID=C06B8369-60DD-4B64-A44B-84B371EDE16D

2.把原来连接字符串 Provider=Microsoft.Jet.OLEDB.4.0;Data Source=1.xls;Extended Properties="Excel 8.0;HDR=YES;IMEX=1"

修改为:Provider=Microsoft.ACE.OLEDB.12.0;Data Source=1.xls;Extended Properties="Excel 12.0;HDR=YES;IMEX=1"
----------------------------------------------
-
作者:
男 nickemma (N.E Zhou) ★☆☆☆☆ -
普通会员
2017/3/2 20:51:28
21楼:
merced

win10的64位版本一直附带着32位模式下的Jet 4.0 Provider(具体COM组件位于\Windows\SysWOW64下),所以在Win10 x64下,32位程序通过Jet 4.0 Provider访问Access(.mdb)数据库仍然是畅通无阻的,不需要安装任何额外组件。



微软官方都这样说了,您这里就难以明白了。
----------------------------------------------
-
作者:
男 nickemma (N.E Zhou) ★☆☆☆☆ -
普通会员
2017/3/2 21:03:06
22楼: 补截图:都是通过VMTools共享同一个文件夹的,Win7运行正常
此帖子包含附件:
JPEG 图像
大小:355.8K
----------------------------------------------
-
作者:
男 nickemma (N.E Zhou) ★☆☆☆☆ -
普通会员
2017/3/2 21:04:08
23楼: Win10 x64条目不对应了,程序运行过程没有提示任何错误。

看来需要升级程序了,采用FireDAC了。
此帖子包含附件:
JPEG 图像
大小:225.4K
----------------------------------------------
-
作者:
男 merced (merced) ★☆☆☆☆ -
普通会员
2017/3/4 2:53:27
24楼: nickemma 
你没有澄清一个问题,你在win7 x64上编写的程序是32位的还是64位的
如果是64位的,则肯定不能用Jet 4.0
如果是32位的,则使用Jet 4.0访问.mdb畅通无阻,我自己以前的32位Jet 4.0访问Access数据库的程序在64位Win7/8/10上跑的非常完美

程序对ADO/OLE DB的调用属于进程内的DLL调用,相应的OLE DB provider的位宽必须与调用它的EXE一致。而64位Windows上只有以前32位的Jet 4.0(位于SysWOW64目录下),没有再为64位应用编译出64位的Jet 4.0(即在System32目录找不到相应的库文件)。这就是在64位Windows上,32位程序能够链接Jet 4.0而64位程序不能连接的原因。
我早已经强调了,微软的Windows的64位版本为32位应用程序提供的兼容性是非常好的,日常的32位软件很少有不能在64位Windows上跑的。
----------------------------------------------
-
作者:
男 merced (merced) ★☆☆☆☆ -
普通会员
2017/3/4 2:56:41
25楼: 在Win10 64位版本上,Delphi 10 Seattle用TADOConnection可以轻松找到Jet 4.0 Provider,因为RAD Studio环境的进程bds.exe本身是一个32位进程,用它打开查询一个.mdb文件也很顺畅
此帖子包含附件:
PNG 图像
大小:481.2K
----------------------------------------------
-
作者:
男 merced (merced) ★☆☆☆☆ -
普通会员
2017/3/4 2:58:56
26楼: 在\Windows\SysWOW64目录下,为32位程序服务的Jet 4.0 provider对应的msjetoledb40.dll清晰可见
此帖子包含附件:
PNG 图像
大小:253.3K
----------------------------------------------
-
作者:
男 merced (merced) ★☆☆☆☆ -
普通会员
2017/3/4 3:05:49
27楼: 微软是说在64位的Windows上不再为64位程序的开发提供Jet 4.0 provider支持
微软可从来没有说在64位的Windows上取消对32位程序提供与以往兼容的Jet 4.0 provider支持!
----------------------------------------------
-
作者:
男 kinneng (kinneng) ★☆☆☆☆ -
盒子活跃会员
2017/3/4 3:17:20
25楼: 我说的都是实测结果,前年装好Win10之后,第一时间就发现问题,装了两个文件搞定,好像还发过贴,其它懒得管。
----------------------------------------------
声明:本人不在论坛询问任何编程问题,请不要将我的帖子当成问题来回答。炒股一天,编程三年,不浪费时间了。 经常在外面,没空,不要找我..
作者:
男 merced (merced) ★☆☆☆☆ -
普通会员
2017/3/4 9:15:18
28楼: 我说的统统都是实测结果:

win7/8/10 x64系统,32位程序,访问access2003及以前版本的.mdb文件  ---->  直接使用系统带的32位jet 4.0 ole db provider连接,兼容性100%,因为\windows\syswow64下的相应的msjet*.dll与win7/8/10的32位版本是完全一样的

win7/8/10 x64系统,32位程序,访问access2007及以后版本的.accdb文件  ---->  安装AccessDatabaseEngine.exe后访问,因为jet 4.0访问不了新版.accdb文件

win7/8/10 x64系统,64位程序,访问任何版本的.mdb或.accdb文件   ---->  安装AccessDatabaseEngine_x64.exe后访问,因为jet 4.0属于较陈旧的技术,微软不再为其编译出64位dll。即在\windows\system32下,找不到msjet*.dll    

我觉得我说的够清楚了,没有任何模糊空间
还是那句话,32位程序使用jet 4.0访问access2003及更早版本的.mdb畅通无阻!如果有问题先找自己的原因,不要怀疑微软对32位程序的兼容性!
----------------------------------------------
-
作者:
男 merced (merced) ★☆☆☆☆ -
普通会员
2017/3/4 9:35:10
29楼: "由于64位操作系统不支持Microsoft OLE DB Provider for Jet驱动程序,也不支持更早的Microsoft Access Driver (*.mdb)方式连接" ————这句话说的不严谨,应该说的是“64位操作系统不为64位native应用程序提供Microsoft OLE DB Provider for Jet驱动程序支持”。事实上楼主引用的这句话根本不是微软官方说的,在MSDN的整个网站都找不到这句话。
MSDN上有篇描述其各种数据库访问技术的经典文章,“Data Access Technologies Road Map”,这才是微软的官方文献!网址:https://msdn.microsoft.com/en-us/library/ms810810.aspx

涉及jet 4.0 provider的段落:
Microsoft Jet Database Engine 4.0: ......
There is no 64-bit version of the Jet Database Engine, the Jet OLEDB Driver, the Jet ODBC Drivers, or Jet DAO available. This is also documented in KB article 957570. On 64-bit versions of Windows, 32-bit Jet runs under the Windows WOW64 subsystem. For more information on WOW64, see http://msdn.microsoft.com/en-us/library/aa384249(VS.85).aspx. Native 64-bit applications cannot communicate with the 32-bit Jet drivers running in WOW64.

描述的很清楚,在64位Windows上,32位程序通过原来的32位jet获得以前的数据库访问,它们在Windows的WOW64子系统上运行。当然,在64位Windows上,所有的32位程序都是在WOW64子系统上运行的。

还有另一篇微软官方文档:https://support.microsoft.com/en-us/help/957570/the-microsoft-ole-db-provider-for-jet-and-the-microsoft-access-odbc-driver-are-available-in-32-bit-versions-only,里面写道:
We do not provide a 64-bit version of the Microsoft OLE DB Provider for Jet. Additionally, we do not provide a 64-bit version of the Jet ODBC driver. If you use the Microsoft OLE DB Provider for Jet or the Jet ODBC driver to connect to a data source in a 64-bit environment, you experience different problems.

For example, you have a 32-bit application that uses the Microsoft OLE DB Provider for Jet. If you migrate the application to run in the 64-bit mode, the application cannot connect to the data source by using the Microsoft OLE DB Provider for Jet. This issue occurs because the application requires a 64-bit version of the Microsoft OLE DB Provider for Jet.

However, we still have the 32-bit version of the Microsoft OLE DB Provider for Jet and the 32-bit version of the Jet ODBC driver. In a 64-bit Windows environment, you can run an application in the 32-bit mode. Therefore, the application can use the 32-bit version of the Microsoft OLE DB Provider for Jet or the 32-bit version of the Jet ODBC driver.

结论很清楚
----------------------------------------------
-
作者:
男 kinneng (kinneng) ★☆☆☆☆ -
盒子活跃会员
2017/3/4 10:56:46
30楼: 楼主的问题已经不是楼上说的,

他是说安装了AccessDatabaseEngine.exe之后,安装不了AccessDatabaseEngine_x64.exe,但这是不可能的,

AccessDatabaseEngine_x64.exe是支持64位程序访问mdb的引擎,如果已经安装了Accsee就等于已经安装过AccessDatabaseEngine_x64.exe,不用再安装了,安装的时候,也会提示已经安装,这么简单都要给解释,完全浪费时间。

不要说我安装的都是32位,还什么64位后面有64,太扯了。
----------------------------------------------
声明:本人不在论坛询问任何编程问题,请不要将我的帖子当成问题来回答。炒股一天,编程三年,不浪费时间了。 经常在外面,没空,不要找我..
作者:
男 kinneng (kinneng) ★☆☆☆☆ -
盒子活跃会员
2017/3/4 11:01:22
31楼: 另外连接字串改成  Provider=Microsoft.ACE.OLEDB.12.0; 这样无论在Win7~10 32/64,D7~任何版本,都能正常工作。简单说就是安装两个问题,改一下连接字,搞掂,这是微软抛弃老板本的问题,不值得研究。
----------------------------------------------
声明:本人不在论坛询问任何编程问题,请不要将我的帖子当成问题来回答。炒股一天,编程三年,不浪费时间了。 经常在外面,没空,不要找我..
作者:
男 merced (merced) ★☆☆☆☆ -
普通会员
2017/3/4 14:13:59
32楼: 不赞成楼上所谓该问题是微软抛弃老版本的问题
不能自己的程序一出事就怪微软
我的32位程序,使用Jet 4.0 provider,在Win 7/8/10 x64版本上咋跑起来一点问题都没有?
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2017/3/4 15:21:48
33楼: 顶楼上。
楼主还是 DEBUG 你自己的代码吧。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 nickemma (N.E Zhou) ★☆☆☆☆ -
普通会员
2017/3/6 22:26:12
34楼: 澄清:
软件是在XP时代开发的,32位的。采用ADO Microsoft.Jet.OLEDB.4.0 连接ACCESS。数据库文件是Access2003建立的。

merced


谢谢,让您费心了,关于WIN10上Microsoft.Jet.OLEDB.4.0的问题,您的说法是正确的。 

wang_80919


DEBUG不了,因为根本不是设置、代码等问题,下面贴图说明。

kinneng


本文中的故障跟AccessDatabaseEngine.exe和AccessDatabaseEngine_x64.exe无关。


测试结果:
下图中,FireDAC与ADO的设置是一样的。
FireDAC测试正常,ADO出现条目不对应。
此帖子包含附件:
JPEG 图像
大小:85.1K
----------------------------------------------
-
作者:
男 nickemma (N.E Zhou) ★☆☆☆☆ -
普通会员
2017/3/6 22:26:49
35楼: FireDAC正常
此帖子包含附件:
JPEG 图像
大小:307.7K
----------------------------------------------
-
作者:
男 nickemma (N.E Zhou) ★☆☆☆☆ -
普通会员
2017/3/6 22:28:54
36楼: ADO出现条目不对应
此帖子包含附件:
JPEG 图像
大小:206.8K
----------------------------------------------
-
作者:
男 nickemma (N.E Zhou) ★☆☆☆☆ -
普通会员
2017/3/6 22:33:41
37楼: 补充ACCESS2016打开数据文件截图。
此帖子包含附件:
JPEG 图像
大小:427.3K
----------------------------------------------
-
作者:
男 bjlg (蓝天) ★☆☆☆☆ -
盒子活跃会员
2017/3/7 1:39:18
38楼: 其实最简单的办法,你新建一个测试程序做一下,不就OK了。debug的目的是啥,“DEBUG不了,因为根本不是设置、代码等问题,下面贴图说明”debug就是调试这些问题的,可以测试代码逻辑问题,还有外部的问题
----------------------------------------------
http://delphi.icm.edu.pl/ftp/http://delphi-z.ru
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行330.0781毫秒 RSS