问题标签 [ms-jet-ace]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
295 浏览

.net - MS Access 2010 INSERTS 的锁定类型

我有一个简单的多线程 .NET 应用程序,它使用 ACE 将行插入 MS Access 2010 DB。它只做INSERT操作。因为 MS Access 对插入进行页面级锁定,所以我有时会被锁定。

有没有办法改变这种锁定类型?或者是否有一种“危险模式”,我可以告诉它完全忽略锁,如果它找到锁定的页面,则可能会创建新页面?

编辑:这里根本没有办法控制锁定吗?到目前为止,我所拥有的技巧是为这些事务维护一个单一的共享连接,然后连接对象只是将插入排队。这可行,但我不喜欢这种连接只是漂浮。

0 投票
1 回答
1677 浏览

database - Jet 数据库 32 位和 64 位及替代品

我们有一个使用 OLEDB 和 Jet 引擎 Microsoft.Jet.OLEDB.4.0 的应用程序。我们正在将我们的应用程序转换为也以 64 位模式运行。但是,数据库引擎不再是 64 位 Windows 的标准部分。但 Office 2010 64 位确实安装了 64 位访问数据库引擎(请参阅http://www.microsoft.com/downloads/en/details.aspx?familyid=C06B8369-60DD-4B64-A44B-84B371EDE16D&displaylang=en)所以您可以使用 Microsoft.ACE.OLEDB.12.0。

所以我正在努力解决问题,以便我们的应用程序也可以在 64 位模式下运行。但是 OLEDB 代码抱怨没有注册数据库引擎。所以我尝试在上面的链接上安装可再发行的 64 位引擎。但它告诉我需要先卸载 32 位 Office 2007。我不会那样做,因为我确信某些设置等会丢失。

所以我的问题是: 32 位数据库访问组件在 64 位模式下不能工作,但是如果已经安装了 32 位,您不能安装 64 位组件?这对任何人都有意义吗?!

我意识到微软希望人们切换到 SQL Server Express,除了它过于侵入性,即使在全新的 Windows 7 计算机上也能可靠地安装,而且在不同机器之间复制或移动数据并不简单。那么Jet有合适的替代品吗?一些简单但适用于 32 位和 64 位并且理想情况下支持 OLEDB 和 ODBC 的东西?SQLite 看起来很有希望?

0 投票
1 回答
1630 浏览

c# - 使用 Excel ACE OLEDB 连接创建名称中带有连字符的表

有没有人成功地使用CREATE TABLEACE OLEDB 连接到 Excel 2007 工作簿的语句,其中表的名称中有连字符?我现在拥有的是

表名是一个语言环境,因此需要一个连字符(我需要这个的原因是输出工作簿被导入到 SQL Server 实例中,并且表必须适合该数据库的架构)。使用上面的代码会导致工作表名称为“EN_GB”。使用各种引号或反引号的其他尝试会导致 Excel 在打开时恢复相同的工作簿或工作簿。

我意识到我可以稍后打开工作簿并重命名工作表名称,但我希望可以在 SQL 语句中更改一些内容。

0 投票
2 回答
282 浏览

c# - 从 C# 访问数据库的 SQL Escape

在插入 JET Engine 数据表之前需要对哪些字符进行转义?我目前只是替换这个 ' 的 ' 字符(这是两个 ' 字符,而不是一个 " 字符)并且它工作得很好(我用 ' 字符引用字符串,就像这样 'hello' 所以我会把这个:'don't'变成这个'do​​n''t')。

到目前为止,它一直运行良好,但是我还需要逃脱其他角色吗?我正在从 C# 代码创建这些查询并使用OleDbCommand.

编辑我知道我可以使用参数化查询。但我想知道上述问题的答案。

0 投票
2 回答
260 浏览

ms-access - Jet/ACE 是否使用带有 LIKE BeginsWith 查询的索引?

我记得在某处阅读以避免 Jet SQL 中的 LIKE 运算符,因为它不会利用列上的索引。所以很久以前我开始写这样的“开始”查询:

只要 MyColumn 列上有索引,BETWEEN 就会利用该索引。我现在开始质疑我的方式。BETWEEN 方法从未真正让我失望,但感觉很笨拙。

我可以理解为什么“包含”查询不能使用索引:

但似乎在“开始于”查询上使用索引:

是一个如此明显的优化,以至于 Jet/ACE 团队会实施它。

任何人都可以提供文档基准测试证明以一种或另一种方式解决这个问题吗?

0 投票
1 回答
1012 浏览

.net - Access 2010 运行时导致 .NET OleDbConnection.Open() 使用 Access97 MDB 文件失败

我维护一个 .NET 3.5 应用程序(使用 Visual Studio 2008),它使用 Microsoft.ACE.OLEDB.12 的连接字符串提供程序和一个格式为 Access97 的 MDB 文件调用 OleDbConnection.Open()。此应用程序要求安装 Access 2007 Runtime。

如果安装了 Office 2007 运行时但未安装 Access 2010 运行时,则对 OleDbConnection.Open() 的调用成功。一旦安装了 Access 2010 Runtime(例如,用户安装了 Office 2010),调用就会失败。错误消息是“无法打开使用以前版本的应用程序创建的数据库”。

  1. 从阅读 StackOverflow 和其他地方的其他线程来看,Access 2010 似乎不支持读取或转换 Access97 MDB 文件。一旦安装了 Access 2010 Runtime(不卸载 Access 2010),是否无法调用 Office 2007 Runtime 的功能。

  2. 另一种方法是以编程方式从 Access97 MDB 转换为 Access 2010 可以读取的更高格式。我尝试调用: Microsoft.Office.Interop.Access.Application.ConvertAccessProject() 在 Microsoft Access 14.0 对象库中实现;安装了各种版本的 Access,但出现 COM 错误(80080005 服务器执行失败)。

  3. 我还尝试使用 /Convert 标志在我的应用程序中启动 msaccess.exe。这会导致 Access 2000 打开但出现错误消息(“Microsoft Access 无法转换...”)。

  4. 顺便说一句,MDB 数据库不包含任何“复杂”的东西,没有关系数据、没有宏、没有安全性等,只是平面记录。

  5. 我在 Allen Browne 的网站上找到了一些有用的编程技巧(http://allenbrowne.com/ser-48.html “Converting from Access97”和http://allenbrowne.com/Access2007.html “Converting to Access 2007”)但没有任何结果。

关于解决这个问题的最佳方法有什么想法吗?

0 投票
2 回答
689 浏览

excel - 如何防止 VB6 中的 Microsoft ACE 和 JET 从 Excel 电子表格的第一行复制数据?

我正在处理一个用 VB6 编写的遗留应用程序,它读取 Excel 电子表格并将它们插入数据库。
它在大多数情况下都有效,但如果电子表格中的数据不是从第一行开始,则第一个数据行会重复。
例如,电子表格中的前 3 行是空白的,前 4 行数据如下所示:

应用程序连接到 Excel 电子表格并使用以下代码读取它:

那应该是相关的代码。问题发生在以下几行:

在读入数据时,无论我们使用的是 JET 还是 ACE,数据都是这样返回的:

我尝试过连接到电子表格并以多种方式获取数据,但似乎没有任何效果 - 要么连接失败,要么数据只是空值。
我找到了一些解决方法 - 例如,如果我在单元格 A1 中输入空格字符,则问题不再出现。但是,我想要一个基于程序的解决方案,而不是告诉用户执行额外的步骤来避免这种情况。
它只复制第一行数据。如果单元格中的数据是数字,则将数据复制到该列中其上方的每个单元格中,如果是文本,则仅上升一级。
一个有趣的注意是,如果我更改电子表格以说所有数据都是文本,然后它会复制每个单元格,就好像它们是数字一样(即复制到上面的每个单元格,而不是单行)

总而言之,这很烦人——因为我在搜索这个问题时没有任何运气,我只能得出结论,我们做错了什么,或者很少有人为这种类型的测试数据而烦恼。

[编辑] 经过一番调查,我在解决这个问题上取得了一些进展——“提供者假定您的数据表从指定工作表上最上面、最左边的非空白单元格开始”(http://support .microsoft.com/default.aspx?scid=kb;en-us;257819)。如果我使用语句选择整个工作表,则可以确认这一点 - 它只返回数据块。
因此,当我选择该范围之外的任何单元格时,提供者不会执行返回 null 之类的明智操作,而是从该特定列的最上面的非空单元格返回数据。
我可以假设更改系统,使其简单地获取所有数据并假设最左上角的单元格是单元格 A1,但这会破坏与已经存在的数据的兼容性。
我现在需要的是一种方法来获取返回数据的单元格引用,以便我可以适当地对待它,或者一种强制这种情况不再发生的方法。

0 投票
1 回答
278 浏览

.net - 使用 ACE-Driver 在 32/64 上运行 exe

我想在 32b / 64b 操作系统上运行一个 exe 我使用 VS-settings x86 来使用 wow64 模式。exe工作没有错误。

现在我想开始使用 32b 和 64b 支持 Office 2010,我决定使用“Microsoft Access Database Engine 2010 Redistributable”。有两个不同的版本 32b 和 64b 这取决于您需要安装的办公室。

例如,如果安装了 Win7 64b、Office 2010 64b 和 64b 驱动程序。该应用程序在 wow64 中运行,应使用 64 位驱动程序。每次我收到找不到驱动程序的错误。

是否可以像我想要的那样去,还是我需要创建两个不同的 exe 文件?

0 投票
2 回答
693 浏览

ms-access - 自 JET 3.5 以来,Jet/ACE 是否改善了其并发性和稳定性问题?

我熟悉使用 JET 3.5 作为后端。此版本的数据库引擎存在明显的稳定性和并发性问题。MDB 文件也有 1GB 的限制。

从那时起,JET(或现在称为 ACE)在这方面是否有所改进?

0 投票
2 回答
4561 浏览

sql-server-2008 - 检测来自 Excel 的 varchar 列中的值 0x

我有一个通过 Excel 中的 SQLBulkCopy 填充的 sql 表。使用 Microsoft ACE 驱动程序完成复制。

我遇到了一个特定文件的问题 - 当它被加载到 sql 时,一些列(在 excel 中显示为空)包含一个奇数值。

例如,运行这个 sql:

会回来

即 - 将列中的值转换为varbinary显示某些内容,但执行 varchar 的长度显示没有长度。我意识到显示的值是十六进制值的词干,但它到达那里很奇怪,而且检测起来有多难。

显然我可以清除 Excel 中的单元格,但我确实需要自动检测到这一点,因为最终用户也会遇到同样的问题。当数据得到处理时,它会导致进一步的问题。很难将问题从最终症状追溯到源头。

除了上述转换为varbinarySSMS 中的输出之外,我还没有想出一种方法来检测这些值,无论是在 Excel 中还是通过 SQL 脚本来删除它们。

有任何想法吗?