5

我不敢问,但我的客户可能没有提供其他 SQL(或类似 SQL)的解决方案。我知道 Access 有一些 SQL 钩子;它们足以满足基本的 ActiveRecord 吗?

之后:

我感谢所有使用其他数据库的建议,但请相信我:我已经尝试过说服他们。有一个“已批准”列表,其中没有 SQL 数据库。将某些东西列入清单可能需要一年多的时间,而这个项目将在三周内完成。

4

7 回答 7

3

这是一个很长的镜头,但有一个适用于 ActiveRecord 的 ODBC 适配器可能会起作用。

于 2008-08-21T14:27:24.880 回答
2

这里似乎有一些访问连接适配器:http: //svn.behindlogic.com/public/rails/activerecord/lib/active_record/connection_adapter/msaccess_adapter.rb

database.yml 文件如下所示:

development:
  adapter: msaccess
  database: C:\path\to\access_file.mdb

我会在使用 Rails 2.1 试用后发布更多内容

于 2008-08-21T19:45:02.587 回答
1

另一个更复杂但如果您被迫这样做可能会起作用的选项是编写一层 RESTful Web 服务,将 Access 暴露给 rails。如果您在设计中小心,那些 RESTful Web 服务可以直接由 ActiveResoure 使用,这将为您提供 ActiveRecord 的许多功能。

于 2008-08-21T14:39:27.283 回答
1

Access 中有一些奇怪的东西可能会导致问题,我不知道 ODBC 是否会处理它。如果@John Topley 是对的,那么 ODBC 将是您唯一的选择。

  1. 访问中为真 = -1 而不是 1
  2. Access 处理日期的方式与常规 TSQL 不同。
  3. 您可能会在创建关系时遇到麻烦。

如果您使用访问权限,可能会了解更多有关调试 AcriveRecord 的信息,然后您会关心(这可能不是一件坏事)

于 2008-08-21T15:08:31.193 回答
1

莫迪特写道:

访问中为真 = -1 而不是 1

不正确。真被定义为不假。因此,如果您想在 WHERE 子句中使用 True,请改用 Not False。这将提供与所有 SQL 引擎的完全跨平台兼容性。

综上所述,这几乎不是问题,因为您用于连接后端的任何驱动程序都会正确地将 WHERE 子句中的 True 转换为适当的值。唯一的例外可能是直通查询,但在这种情况下,您应该在 Access 外部编写 SQL 并针对后端对其进行测试,然后将工作 SQL 粘贴到 Access 中直通查询的 SQL 视图中。

莫迪特写道:

Access 处理日期的方式与常规 TSQL 不同。

同样,如果您不通过 ODBC 或 OLEDB 驱动程序,这只会成为一个问题,它会为您将 Jet SQL 转换为 TSQL。

莫迪特写道:

您可能会在创建关系时遇到麻烦。

我不确定您为什么希望 Access 应用程序更改后端的架构,所以在我看来这不是问题。

于 2008-09-15T22:26:16.423 回答
0

你真的应该说服他们允许 SQLite。它的设置非常简单,并且像 Access 一样运行(作为位于同一服务器上应用程序旁边的文件)。

于 2008-08-22T22:22:16.540 回答
0

首先,你真的很想使用 sqlite。

以我的经验,Access 本身就是一堆 [redacted],但它使用的 Jet 数据库引擎实际上非常快,并且可以处理一些非常复杂的 SQL 查询。如果你能找到一个真正有效的导轨适配器,我会说你会没事的。只是不要在您的 Rails 应用程序运行时使用访问前端打开数据库 :-)

如果您的客户只允许您使用已批准的数据库列表进行开发,他们可能会更担心Jet 已被 弃用并且不会从 MS 获得更多支持。

这可能会为您提供一些弹药来使用真实的数据库。祝你好运

于 2008-08-23T01:37:49.050 回答