2013-01-11 20 views
10

Używam bazy danych dostępu (* mdb). To mój kod i połączyć sukces:Codeigniter za pomocą bazy danych dostępu ms

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

A teraz chcę za pomocą accessdb z innego komputera. Ten accessdb (* mdb) został udostępniony i wykonuję mapę dysku sieciowego (Z :).

więc była zmiana nazwy hosta i baz danych, ale jej nie powiodło się:

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

I próbuję to:

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

Ale to nadal błąd:

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

Line Number: 124 

i nawet ja spróbuj połączyć się z php i jest to wynik php using msaccess

+0

Może pomóc: http://stackoverflow.com/questions/178860/code-igniter-cakephp-and-ms-access – Fionnuala

+0

@Remou już przeczytać, że zanim to zrobić pytanie :( – Belajar

+1

@duskwuff nie chcę, ale jest to prośba od użytkownika – Belajar

Odpowiedz

2

Problem polega na tym, że domyślny program IIS IUSER nie może uzyskać dostępu do plików przez udział sieciowy. Sposób obejścia tego problemu jest opisany tutaj: http://support.microsoft.com/kb/207671.

Zdecydowanie polecam używanie SQL Server (Express Edition, jeśli nic więcej) niż pliku dostępu - dostaniesz znacznie lepsze doświadczenie + będziesz mógł łatwiej migrować, gdy witryna będzie się rozwijać w razie potrzeby.

0

Czy sprawdziłeś dostęp do tego pliku do odczytu/zapisu? Jeśli twoja aplikacja php działa na IIS, twoje konto użytkownika IIS będzie musiało mieć uprawnienia do odczytu/zapisu do tego pliku, a nie konto użytkownika, którego używasz do logowania się do komputera.

+0

to ma być komentarz, a nie odpowiedź? – ZombieSpy

+0

tak, czytałem to tyle czasu i nadal nie działało, używam Apache, i już sprawdzam dostęp do odczytu i zapisu do pliku mdb ..... – Belajar

1

Znalazłem ten wątek dla podobnego problemu: http://ellislab.com/forums/viewthread/93160/. Mówi, że powinniśmy spróbować załadowania ODBC sterownik ręcznie z regulatora:

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

mówi się też, że z jakiegoś powodu config bazy danych nie jest dostępny w ODBC:

system/database/drivers/odbc/odbc_driver.php

Więc może również trzeba tam wejść i załadować konfigurację bazy danych ręcznie.

0

Sprawdź, w jakim języku działa twój program PHP. Lista zawartości katalogu z PHP, aby sprawdzić. Weź pod uwagę, że użytkownik uruchamiający twój PHP może również nie mieć odwzorowania wykonanego pod Twoją własną nazwą użytkownika.

0

Po wielu poszukiwań (nic ze wspomnianego rozwiązania pracował) znalazłem inne rozwiązanie, na jakimś MS Access DB można podłączyć tylko za pomocą podwójne ukośniki w ciągu połączenia (nie w ścieżce bazy danych):

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

nie jestem pewien, co jest przyczyną, ponieważ mogłem się połączyć w niektórych Access db (ten sam serwer, ten sam folder, ta sama wersja Access) używając pojedynczych ukośników i podwójnych ukośników nie działało, myślę, że to głupi żart tego samego faceta, który pracował na IE :-(

0

to działa:

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

kod

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); 
Powiązane problemy