链接 MS Access 和数据库服务器而不安装任何额外的驱动程序

Linking MS Access and database server without installing any additional drivers

在我们公司的网站上,我们有一个 html 表格,其中出于咨询原因通过 php 生成电子邮件 - 效果很好。我的上司要我将html-表单的信息保存到MS Access-数据库中。

我想不出一个直接从 php 写入 MS Access 的解决方案 - 所以我说服他们通过 phpMyAdmin 使用 MySQL - 链接Access.

中的 ODBC 表格

phpMySQL 之间的联系很简单,MS AccessMySQL 之间的联系也很简单:

为此,每个客户端都需要一个 ODBC-MySQL-Provider 来打开数据库,IT 部门不想安装它。

我们还在 Windows Server 上使用 MS SQL Server - 我也可以将 php 连接到 SQL Server - 但在这种情况下我们需要安装 ODBC SQL Server Provider 链接表时或 SQL Server Native Clients 如果我们使用 Ado。 - IT 人员:

no installation of providers on all clients.

我的问题是:

Is there any possible solution for accessing MySQL/SQL Server from MS Access without the installation of ODBC-Providers at all?

我对此压力很大,找不到任何可以满足用户需求和期望的东西。

提前致谢

巴里斯

编辑:工作 php/MySQL-代码 - 基于 mysqli

$servername = "----------.de";
$username = "-------";
$password = "--------";
$dbName = "---------";
$port = "-------";

$con= mysqli_connect($servername, $username, $password, $dbName, $port );
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

以下连接字符串适用于使用集成的 SQLSRV32.dll-provider 从 MS Access 连接到服务器端 ms sqlserver。感谢 GordThompson

cs = "Driver={SQL Server};"
cs = cs & "Server=ip-adress,port-number;"
cs = cs & "Database=database-name;"
con.Open cs, "username", "password"

由于可以在不使用其他提供程序的情况下连接到 SQL Server,因此我将使用 PDO/SQLServer 组合,并根据上面的连接字符串加载数据。

首先,PHP 完全可以连接到 MS Access 数据库(特别是 Jet/ACE SQL 引擎)。在现代计算中,几乎所有通用语言(C#、Java、PHP、Perl、Python、R、VB)都可以连接到所有流行的关系数据库管理系统(RDMS) - 文件级别(SQLite、MS Access)和服务器级别(SQL服务器、MySQL、Postgre、Oracle、DB2),每个都使用某种类型的自定义或通用化图书馆。

和PHP的PDO, you can practically interchange the connected backend database. So however you connect to MySQL, you can model such a connection with other databases. The web popularity of PHP/MySQL make it seem they are married to each other but they are not! Below are examples using DSN, Driver, and even PHP's own API, sqlsrv

MS 访问

# USING DSN
$database="C:\Path\To\Database\File.accdb";
try {
    $dbh = new PDO("odbc:DSN=MS Access Database;DBq=$database;");
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sql = "SELECT * FROM tablename";    
    $STH = $dbh->query($sql);    
    $STH->setFetchMode(PDO::FETCH_ASSOC); 
}
catch(PDOException $e) {  
    echo $e->getMessage()."\n";
    exit;
}
# close the connection
$dbh = null;


# USING DRIVER (NON-DSN)
$database="C:\Path\To\Database\File.accdb";
try {
    $dbh = new PDO("odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBq=$database;");    
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sql = "SELECT * FROM tablename";    
    $STH = $dbh->query($sql);    
    $STH->setFetchMode(PDO::FETCH_ASSOC); 
}
catch(PDOException $e) {  
    echo $e->getMessage()."\n";
    exit;
}
# close the connection
$dbh = null;

SQL 服务器

# WITH ODBC DRIVER PDO
try {
    $dbh = new PDO("odbc:Driver={SQL Server};Server=$server;database=$database",$username,$password);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sql = "SELECT * FROM dbo.tablename";    
    $STH = $dbh->query($sql);    
    $STH->setFetchMode(PDO::FETCH_ASSOC); 
}
catch(PDOException $e) {  
    echo $e->getMessage()."\n";
    exit;
}
# close the connection
$dbh = null;

# WITH SQLSRV PDO
try {
    $dbh = new PDO("sqlsrv:server=$server;database=$database",$username,$password);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sql = "SELECT * FROM dbo.tablename";    
    $STH = $dbh->query($sql);    
    $STH->setFetchMode(PDO::FETCH_ASSOC); 
}
catch(PDOException $e) {  
    echo $e->getMessage()."\n";
    exit;
}
# close the connection
$dbh = null;

其他语言连接的额外资源:

https://github.com/ParfaitG/DATABASE_CONNECTIONS

由于最重要的问题是避免在客户端计算机上安装额外的驱动程序,并且您有可用的 Microsoft SQL 服务器,因此您可以

  1. 让您的PHP脚本将所需信息写入SQL服务器,然后

  2. 创建一个 Access 进程,使用每个 Windows 副本安装的 "SQL Server" ODBC 驱动程序从 SQL 服务器检索信息。