mdb в mysql

Тема в разделе "PHP", создана пользователем saen, 29 апр 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    нужно перегнать базу данный из microsoft access в mysql без использования драйвера odbc. есть готовый класс mdb_class.php, я его тут прилепил архивом.

    нужно добавить функции в класс чтобы он вытаскивал из mdb-файла список таблиц массивом
     

    Вложения:

  2. jik

    jik

    Регистр.:
    11 мар 2009
    Сообщения:
    243
    Симпатии:
    133
    Проверь такой вариант:

    PHP:
    include 'class_mdb.php';

    $mdb = new mdb('mymdbfile.mdb');
    $mdb->execute('show tables;');

    $aTables = array();
    $npp 1;
    while( !
    $mdb->eof() )
    {
      
    $aTables[] = $mdb->fieldvalue(1);
      echo 
    "$npp " $mdb->fieldvalue(0) . ' ' $mdb->fieldvalue(1) . ' ' $mdb->fieldvalue(2);
      
    $mdb->movenext();
    }

    print_r $aTables;
     
  3. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    нужен код, который вытаскивает список таблиц, а также ключевые поля из таблицы. как реализовать?
     
  4. jik

    jik

    Регистр.:
    11 мар 2009
    Сообщения:
    243
    Симпатии:
    133
    список таблиц хотя бы получился тем кодом, который я привел? Что выводит на экран тот скрипт?
     
  5. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    Ошибочная инструкция SQL; предполагалось 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT' или 'UPDATE'.

    класс не предусматривает твой запрос
     
  6. jik

    jik

    Регистр.:
    11 мар 2009
    Сообщения:
    243
    Симпатии:
    133
    вот функция, которая должна быть добавлена в класс. Эта функция возвращает массив со списком полей таблицы:

    PHP:
    function GetTableFields($TableName) {
      
    $arr=array(NullNullNull"TABLE"); 
      
    $rs=$this->ADODB->OpenSchema(20$arr); 
      if(!
    $rs->eof()){ 
        while(!
    $rs->eof()){ 
            
    $result_arr[]=$rs->fields[2]->value
            
    $rs->movenext(); 
        } 
      } else { 
        
    $result_arr=false
      } 
    }
    пример использования:

    PHP:
    include 'class_mdb.php'
    $mdb = new mdb('mymdbfile.mdb'); 
    $aFields $mdb->GetTableFields('mytable'); 
    print_r $aFields;
    если заработает, то перейдем к получению списка таблиц.
     
  7. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    поля таблицы я итак вытаскиваю. нужна проверка является ли поле ключевым(Primary key).
    и на print_r ругается денвер
     
  8. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    591
    print_r - функция.
    Правильно print_r($aFields);
     
  9. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    так как проверить является ли поле ключом?
     
  10. jik

    jik

    Регистр.:
    11 мар 2009
    Сообщения:
    243
    Симпатии:
    133
    замени код функции на этот:

    PHP:
    function GetTableFields($TableName) {
      
    $arr=array(NullNullNull"TABLE"); 
      
    $rs=$this->ADODB->OpenSchema(20$arr); 
      if(!
    $rs->eof()){ 
        while(!
    $rs->eof()){ 
            
    $field_name $rs->fields['COLUMN_NAME']->value;
            
    $field_name2 $rs->fields[2]->value;
            
    $field_propid $rs->fields['COLUMN_PROPID']->value;
            
    $field_ord $rs->fields['ORDINAL_POSITION']->value;
            
    $field_flags $rs->fields['COLUMN_FLAGS']->value;
            
    $result_arr[]= "name=$field_name name2=$field_name propid=$field_propid ord=$field_ord flags=$field_flags";
            
    $rs->movenext(); 
        } 
      } else { 
        
    $result_arr=false
      } 
    }
    пример использования:

    PHP:
    include 'class_mdb.php'
    $mdb = new mdb('mymdbfile.mdb'); 
    $aFields $mdb->GetTableFields('mytable'); 
    print_r($aFields);
    покажи, что выведет функция print_r
     
Статус темы:
Закрыта.