使用ms访问数据库的代码点火器


Codeigniter using ms access database

所以我使用访问数据库(*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这是php使用msaccess 的结果

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

我强烈建议您使用SQL Server(Express Edition,如果没有其他功能的话(,而不是访问文件-您将获得更好的体验+如果需要,随着网站的扩展,您将能够更容易地迁移。

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

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

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

system/database/drivers/odbc/odbc_driver.php

因此,您可能还需要手动进入并加载数据库配置。

$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);

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

检查运行PHP程序的用户。用PHP列出一个目录内容进行检查。考虑一下,运行PHP的用户也可能没有您在自己的用户名下创建的Z的映射。

经过多次搜索(上述解决方案无效(,我发现了一个不同的解决方案,在一些ms Access数据库上,您只能使用连接字符串中的双斜杠进行连接(而不是在数据库路径中(:

$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数据库(相同的服务器,相同的文件夹,相同的Access版本(上使用单斜杠和双斜杠连接不起作用,我认为这是同一个在IE上工作的人的愚蠢笑话:-(

这是有效的:

$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;