错误:“在`require':无法加载此类文件 - win32ole(LoadError)”,同时尝试从ruby程序连接到ms访问数据库

时间:2016-07-15 13:55:10

标签: ruby windows ubuntu ms-access dbconnection

从我在Ubuntu下运行的Ruby程序,我试图连接到另一台运行Windows的计算机上的Access数据库。我收到了错误

  

'require':无法加载此类文件 - win32ole(LoadError)

我面临的另一个问题是我的系统上没有的Access文件,因此我想使用ip addressport number以及user name和{{1}该文件所在的系统,以便通过使用Internet连接我可以连接并获取数据。不幸的是,我不知道在下面的代码中我可以在哪里指定这些细节。

password

如何建立与Access数据库的连接?

1 个答案:

答案 0 :(得分:4)

你的问题有三个:

1。尝试在非Windows机器上使用win32ole / OLEDB

在非Windows机器上运行的Ruby应用程序中,您根本无法使用win32ole,因此非常。即使你可以,你的代码在你的Linux机器上需要一个OLEDB提供程序,我怀疑这样的事情是存在的。

2。连接到数据库文件

  

此处我想使用ip addressport number

你做不到。要连接到远程计算机上的Access数据库,您需要连接到Windows共享文件夹,而不是TCP端口。因此,在Windows服务器上,您将拥有一个共享文件夹,而在Linux客户端上,您将安装该文件夹。

3。数据库访问

如果win32ole不可用,那么您需要使用其他一些数据库访问技术。 ODBC是一种常见的选择,但遗憾的是,对Linux上的Access数据库的ODBC支持(通过“mdb工具”和“unixODBC”)是非常不可靠的,至少在我的经验中是这样。

解决方案

在您的情况下,我倾向于尝试使用JRubyUCanAccess JDBC驱动程序。我刚刚使用JRuby代码在我的Ubuntu 14.04 LTS盒子上成功测试了它......

connUrl = "jdbc:ucanaccess:///mnt/weezerpublic/uca301demo.accdb"
conn = java.sql.DriverManager.get_connection(connUrl)
stmt = conn.create_statement
rs = stmt.execute_query("SELECT TextField FROM myTableInAccess WHERE ID=1")
while (rs.next) do
    puts rs.getString("TextField")
end
conn.close

...通过shell脚本调用...

#!/bin/bash

export CLASSPATH=.:/home/gord/Downloads/JDBC/UCanAccess/loader/ucanload.jar

jruby jrubyTest.rb

......有以下警告:

  1. Windows文件共享无法通过普通的Internet连接工作。您需要VPN连接才能通过Internet访问此类共享文件夹。
  2. UCanAccess JDBC驱动程序在从多个进程对数据库进行并发写访问方面存在重大限制。如果您的Ruby应用程序必须支持需要更新的多个并发用户 - 而不仅仅是读取 - 数据库,那么您最好使用其他数据库(例如,Microsoft SQL Server,MySQL,...)作为后端。