【问题标题】:How to create a new .MDB file with php?如何用 php 创建一个新的 .MDB 文件?
【发布时间】:2011-09-24 15:48:15
【问题描述】:

在我们的内部系统中,我们从 MySQL 数据库为用户 (phpexcel) 生成了 csv 和 xls 文件,但我的老板询问是否可以创建 mdb 文件。

我从未遇到过任何关于动态创建新 MDB 文件的示例,我想知道这是否可能。我绝对不是专业的程序员,但如果有人可以指导我应该如何进行,我可以管理。

我们正在尝试通过向他们提供 mdb 而不是 CSV 来减少用户负载/错误,他们必须将其导入 Access。目前他们必须将 100 多个 csv 文件导入 Access。

谢谢。

【问题讨论】:

  • 您的服务器上是否启用了 COM 类?

标签: php ms-access


【解决方案1】:

要创建一个新的空 Microsoft Access 数据库,我们可以使用 ADOX。

下面的代码在 c:\ 中创建了一个空的 Test.mdb 文件

    $adox_catalog       = new COM("ADOX.Catalog");

    $adox_catalog->create('Provider = Microsoft.Jet.OLEDB.4.0; Data Source=c:\Test.mdb');

    $adodb_conection = $adox_catalog->activeconnection();

【讨论】:

  • 终于!经过十几个“解决方案”我已经阅读并尝试过——从这个站点和其他地方——但没有奏效(其中一些非常长,使用 class.mdb.php 等)这里是一个简单而且很短的一个有效的!你一定是个天才。谢谢user1202495!
  • 不过有一个问题:最后一条语句 (activeconnection()) 是干什么用的?创建mdb文件的过程中不需要...
【解决方案2】:

您可以使用COM 来访问MDB 驱动程序,在phpclasses 中有一个简单的类可以作为对此的包装器,您可以使用它来获得灵感或直接移植它,无论哪种方式都是完全可能的:

这里是类,源码链接如下:

<?php    
class mdb 
{ 
  var $RS = 0; 
  var $ADODB = 0; 

  var $RecordsAffected; 

  var $strProvider = 'Provider=Microsoft.Jet.OLEDB.4.0'; 
  var $strMode     = 'Mode=ReadWrite'; 
  var $strPSI      = 'Persist Security Info=False'; 
  var $strDataSource  = ''; 
  var $strConn     = ''; 
  var $strRealPath = ''; 

  var $recordcount = 0; 
  var $ok = false; 


  /** 
  * Constructor needs path to .mdb file 
  * 
  * @param string $dsn = path to *.mdb file 
  * @return boolean success  
  */ 
  function mdb( $dsn='Please enter DataSource!' ) 
  { 
    $this->strRealPath = realpath( $dsn ); 
    if( strlen( $this->strRealPath ) > 0 ) 
    { 
      $this->strDataSource = 'Data Source='.$this->strRealPath; 
      $result = true; 
    } 
    else 
    { 
      echo "<br>mdb::mdb() File not found $dsn<br>"; 
      $result = false; 
    } 

    $this->RecordsAffected = new VARIANT(); 

    $this->open(); 

  } // eof constructor mdb() 


  function open( ) 
  { 
    if( strlen( $this->strRealPath ) > 0 ) 
    { 

      $this->strConn =  
        $this->strProvider.';'. 
        $this->strDataSource.';'. 
        $this->strMode.';'. 
        $this->strPSI; 

      $this->ADODB = new COM( 'ADODB.Connection' ); 

      if( $this->ADODB ) 
      { 
        $this->ADODB->open( $this->strConn ); 

        $result = true; 
      } 
      else 
      { 
        echo '<br>mdb::open() ERROR with ADODB.Connection<br>'.$this->strConn; 
        $result = false; 
      } 
    } 

    $this->ok = $result; 

    return $result; 
  } // eof open() 


  /** 
  * Execute SQL-Statement 
  * @param string $strSQL = sql statement 
  * @param boolean $getrecordcount = true when a record count is wanted 
  */ 
  function execute( $strSQL, $getrecordcount = false ) 
  { 

    $this->RS = $this->ADODB->execute( $strSQL, &$this->RecordsAffected ); 

    if( $getrecordcount == true ) 
    { 

      $this->RS->MoveFirst(); 
      $this->recordcount = 0; 

      # brute force loop 
      while( $this->RS->EOF == false ) 
      { 
        $this->recordcount++; 
        $this->RS->MoveNext(); 
      } 
      $this->RS->MoveFirst(); 

    } 


  } // eof execute() 

  function eof() 
  { 
    return $this->RS->EOF; 
  } // eof eof() 

  function movenext( ) 
  { 
    $this->RS->MoveNext(); 
  } // eof movenext() 

  function movefirst() 
  { 
    $this->RS->MoveFirst(); 
  } // eof movefirst() 

  function close() 
  { 

    @$this->RS->Close(); // Generates a warning when without "@" 
    $this->RS=null; 

    @$this->ADODB->Close(); 
    $this->ADODB=null; 
  } // eof close() 

  function fieldvalue( $fieldname ) 
  { 
    return $this->RS->Fields[$fieldname]->value; 
  } // eof fieldvalue() 

  function fieldname( $fieldnumber ) 
  { 
    return $this->RS->Fields[$fieldnumber]->name; 
  } // eof fieldname() 

  function fieldcount( ) 
  { 
    return $this->RS->Fields->Count; 
  } // eof fieldcount()   

} // eoc mdb 
?>

还有一个例子:

include 'class_mdb.php'; 

$mdb = new mdb('mymdbfile.mdb'); // your own mdb filename required 
$mdb->execute('select * from table'); // your own table in the mdb file 

# 
# first example: using fieldnames 
#  

while( !$mdb->eof() ) 
{ 
  echo $mdb->fieldvalue('description'); // using your own fields name 
  echo ' = '; 
  echo $mdb->fieldvalue( 1 ); // using the fields fieldnumber 
  echo '<br>'; 
  $mdb->movenext(); 
} 

echo '<br><hr><br>'; 

# 
# Going back to the first recordset for the second example 
# 
$mdb->movefirst(); 

# 
# This works, too: Make each Field an object. The values change 
# when the data pointer advances with movenext(). 
#  
$url = $mdb->RS->Fields(1); 
$bez = $mdb->RS->Fields(2); 
$kat = $mdb->RS->Fields(3); 

while( !$mdb->eof() ) 
{ 
  # works! 
  echo $bez->value; 
  echo ' = '; 
  echo $url->value; 
  echo '<br>'; 
  $mdb->movenext();  
} 

$mdb->close();

来源:http://www.phpclasses.org/package/1700-PHP-Access-Microsoft-Access-mdb-database-files.html

【讨论】:

  • 您可以使用我的答案左侧的向上箭头和标记已接受打勾表示感谢,但欢迎您。
  • 如果我错了,请纠正我,但这似乎没有创建新 mdb 文件的方法。我想可能会创建一个空的 mdb 文件并复制它,然后将表插入其中...
  • 天哪,你给自己找了这么多麻烦,还是没有回答问题!!!这一切与创建新的 MDB 文件有什么关系???真是惊人的并发症!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-28
  • 1970-01-01
  • 1970-01-01
  • 2015-07-05
  • 2018-08-04
  • 1970-01-01
相关资源
最近更新 更多