Joh*_*ohn 5 ruby windows ubuntu ms-access dbconnection
通过我在Ubuntu下运行的Ruby程序,我试图连接到另一台运行Windows的计算机上的Access数据库。我收到错误
'要求':无法加载此类文件-Win32ole(LoadError)
我面临的另一个问题是系统上不存在Access文件,因此在这里我要使用文件所在的系统中的ip addressand port number和user nameand password,以便通过Internet连接可以连接并获取数据。不幸的是,我不知道在下面的代码中可以在哪里指定这些详细信息。
connect_to_access_db.rb
require 'win32ole'
connection = WIN32OLE.new('ADODB.Connection')
connection.Open('Provider=Microsoft.ACE.OLEDB.12.0;
Data Source=c:\path\filename.accdb')
SQLstatement = "SELECT * FROM TABLE"
recordset = WIN32OLE.new('ADODB.Recordset')
res = recordset.Open(SQLstatement, connection)
p res
Run Code Online (Sandbox Code Playgroud)
如何建立与Access数据库的连接?
你的问题有三个:
您很有可能根本无法win32ole在非 Windows 计算机上运行的 Ruby 应用程序中使用它。即使可以,您的代码也需要 OLEDB 提供程序才能在您的 Linux 机器上进行访问,我怀疑这样的东西是否存在。
在这里我想使用
ip addressandport number
你不能那样做。为了连接到远程计算机上的 Access 数据库,您需要连接到 Windows 共享文件夹,而不是 TCP 端口。因此,在 Windows 服务器上您将拥有一个共享文件夹,而在 Linux 客户端上您将挂载该文件夹。
如果win32ole不可用,那么您需要使用其他一些数据库访问技术。ODBC 是一种常见的选择,但不幸的是,Linux 上对 Access 数据库的 ODBC 支持(通过“mdb 工具”和“unixODBC”)相当不可靠,至少根据我的经验是这样。
对于您的情况,我倾向于尝试使用JRuby和UCanAccess 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
Run Code Online (Sandbox Code Playgroud)
...通过 shell 脚本调用...
#!/bin/bash
export CLASSPATH=.:/home/gord/Downloads/JDBC/UCanAccess/loader/ucanload.jar
jruby jrubyTest.rb
Run Code Online (Sandbox Code Playgroud)
...但有以下警告:
| 归档时间: |
|
| 查看次数: |
531 次 |
| 最近记录: |