10

所以我使用访问数据库(* mdb)。这是我的代码和连接成功:

$db['test']['hostname'] = 'Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\blabla.mdb';
$db['test']['username'] = '';
$db['test']['password'] = '';
$db['test']['database'] = 'Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\blabla.mdb';
$db['test']['dbdriver'] = 'odbc';
$db['test']['dbprefix'] = '';
$db['test']['pconnect'] = TRUE;
$db['test']['db_debug'] = TRUE;
$db['test']['cache_on'] = FALSE;
$db['test']['cachedir'] = '';
$db['test']['char_set'] = 'utf8';
$db['test']['dbcollat'] = 'utf8_general_ci';
$db['test']['swap_pre'] = '';
$db['test']['autoinit'] = TRUE;
$db['test']['stricton'] = FALSE;

现在我想从其他计算机使用 accessdb。此 accessdb(*mdb) 已共享,我制作地图网络驱动器 (Z:)。

所以我改变了主机名和数据库,但它失败了:

$db['test']['hostname'] = 'Driver={Microsoft Access Driver (*.mdb)};DBQ=Z:\blabla.mdb';
$db['test']['database'] = 'Driver={Microsoft Access Driver (*.mdb)};DBQ=Z:\blabla.mdb';

我尝试这样做:

$db['test']['hostname'] = 'Driver={Microsoft Access Driver (*.mdb)};DBQ=\\10.0.0.107\share\blabla.mdb';
$db['test']['database'] = 'Driver={Microsoft Access Driver (*.mdb)};DBQ=\\10.0.0.107\share\blabla.mdb';

但它仍然错误:

Unable to connect to your database server using the provided settings.
Filename: D:\folder\folder\system\database\DB_driver.php

Line Number: 124

甚至我尝试与 php 连接,这是使用 msaccess 的结果 php

4

7 回答 7

2

问题是默认的 IIS IUSER 无法通过网络共享访问文件。此处详细介绍了解决方法:http: //support.microsoft.com/kb/207671

我强烈建议您使用 SQL Server(如果没有别的)而不是访问文件 - 您将获得更好的体验 + 如果需要,您将能够随着站点的扩展更轻松地迁移。

于 2013-01-21T13:30:51.770 回答
1

我发现这个线程有一个类似的问题:http ://ellislab.com/forums/viewthread/93160/ 。说您应该尝试从控制器手动加载加载 odbc 驱动程序:

$this->load->database();
$this->db->dbdriver = “odbc”;

它还说由于某种原因数据库配置在 odbc 驱动程序中不可用:

系统/数据库/驱动程序/odbc/odbc_driver.php

因此,您可能还必须进入那里并手动加载数据库配置。

于 2013-01-16T14:40:01.450 回答
1
$db['second']['hostname'] = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=C:/wamp/www/ket_noi_access/test1.mdb";//C:\wamp\www\ket_noi_access
$db['second']['username'] = "ADODB.Connection";
$db['second']['password'] = "xxxxx";
$db['second']['database'] = "C:/wamp/www/ket_noi_access/test1.mdb";
$db['second']['dbdriver'] = "odbc";
$db['second']['dbprefix'] = "";
$db['second']['pconnect'] = TRUE;
$db['second']['db_debug'] = TRUE;
$db['second']['cache_on'] = FALSE;
$db['second']['cachedir'] = "";
$db['second']['char_set'] = "utf8";
$db['second']['dbcollat'] = "utf8_general_ci";
$db['second']['swap_pre'] = '';
$db['second']['autoinit'] = TRUE;
$db['second']['stricton'] = FALSE;

代码

function __construct(){
    parent::__construct();
    $this->legacy_db = $this->load->database('second',true);
}
function LayDanhSach(){
    $this->legacy_db->select('*');
    $this->legacy_db->from('ban');
    $query = $this->legacy_db->get();
    $kq=$query->result();
    $this->legacy_db->close();
    //$this->db->close();
    return $kq;    
}

$this->load->model("ban_model");
$ds=$this->ban_model->LayDanhSach();
$st="This is demo multi database and msaccess connect <br>";        
$st.=json_encode($ds);
$this->data['content']=$st;//json_encode($ds);//echo json_encode($ds);
$this->load->view('index_view2',$this->data,false);
于 2015-03-07T14:10:11.377 回答
0

您是否检查过对该文件的读/写访问权限?如果您的 php 应用程序在 IIS 上运行,那么您的 IIS 用户帐户将需要对该文件具有读/写权限,而不是您用于登录计算机的用户帐户。

于 2013-01-16T05:35:22.873 回答
0

检查您的 PHP 程序在哪个用户下运行。用 PHP 列出目录内容以进行检查。考虑到运行您的 PHP 的用户也不能Z在您自己的用户名下映射您。

于 2013-01-22T19:47:12.700 回答
0

经过多次搜索(上述解决方案没有任何效果)我找到了一个不同的解决方案,在某些 ms Access db 上,您只能在连接字符串中使用双斜杠(而不是在数据库路径中)进行连接:

$db['test']['hostname'] = 'Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\\path\\to\my.mdb';
$db['test']['username'] = '';
$db['test']['password'] = '';
$db['test']['database'] = 'Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\path\to\my.mdb';
$db['test']['dbdriver'] = 'odbc';
$db['test']['dbprefix'] = '';
$db['test']['pconnect'] = TRUE;
$db['test']['db_debug'] = TRUE;
$db['test']['cache_on'] = FALSE;
$db['test']['cachedir'] = '';
$db['test']['char_set'] = 'utf8';
$db['test']['dbcollat'] = 'utf8_general_ci';
$db['test']['swap_pre'] = '';
$db['test']['autoinit'] = TRUE;
$db['test']['stricton'] = FALSE;

不知道是什么原因,因为我能够使用单斜杠和双斜杠连接一些 Access db(相同的服务器、相同的文件夹、相同的 Access 版本)不起作用,认为这是同一个人的愚蠢笑话IE :-(

于 2013-09-01T17:05:20.247 回答
0

这有效:

$db['access']['hostname'] = 'DNS name created by me'; // or ip address
$db['access']['username'] = '';
$db['access']['password'] = '';
$db['access']['database'] = '';
$db['access']['dbdriver'] = 'odbc';
$db['access']['dbprefix'] = '';
$db['access']['pconnect'] = FALSE;
$db['access']['db_debug'] = TRUE;
$db['access']['cache_on'] = FALSE;
$db['access']['cachedir'] = '';
$db['access']['char_set'] = 'utf8';
$db['access']['dbcollat'] = 'utf8_general_ci';
$db['access']['swap_pre'] = '';
$db['access']['autoinit'] = TRUE;
$db['access']['stricton'] = FALSE;
于 2015-02-27T21:34:57.093 回答