Codeigniter с использованием базы данных доступа ms

Итак, я использую базу данных доступа (* 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

Ответ 1

Проблема заключается в том, что IIS IUSER по умолчанию не может обращаться к файлам через сетевой ресурс. обходное решение подробно описано здесь: http://support.microsoft.com/kb/207671.

Я бы настоятельно рекомендовал использовать SQL Server (Express Edition, если не что иное), чем файл доступа - вы получите значительно улучшенный опыт +, вы сможете легко мигрировать по мере расширения сайта при необходимости.

Ответ 2

Я нашел эту тему для аналогичной проблемы: http://ellislab.com/forums/viewthread/93160/. Говорит, что вы должны попробовать загрузить загрузку драйвера odbc вручную с вашего контроллера:

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

В нем также говорится, что по какой-то причине конфигуратор базы данных недоступен в драйвере odbc:

Система/базы данных/драйвера/ODBC/odbc_driver.php

Таким образом, вам также может потребоваться войти туда и вручную загрузить конфигурацию базы данных.

Ответ 3

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

Ответ 4

Вы проверяли доступ на чтение и запись к этому файлу? Если ваше приложение php работает в IIS, ваша учетная запись пользователя IIS должна будет иметь права на чтение/запись для этого файла, а не учетную запись пользователя, которую вы используете для входа на ваш компьютер.

Ответ 5

Проверьте, к какому пользователю работает ваша PHP-программа. Список содержимого каталога с PHP для проверки. Учтите, что пользователь, на котором запущен ваш PHP, также не имеет сопоставления Z, сделанного под вашим собственным именем пользователя.

Ответ 6

После многих поисков (ничего из этого решения не получилось) я нашел другое решение, на каком-то 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;

не уверен, в чем причина, потому что я смог подключиться к некоторому доступу db (тот же сервер, одна и та же папка, такая же версия Access), используя одиночные косые черты, а двойные слэши не работали, подумайте, что это глупая шутка того же парня который работал над IE: - (

Ответ 7

это работает:

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