仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4316|回复: 18
打印 上一主题 下一主题

[学习教程] 绝无经由的ACCESS数据库向MySQL疾速迁徙小法式(一)

[复制链接]
谁可相欹 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-16 00:23:20 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
如果你需要额外的功能的话,MySQL的普及性实际上可以让你发现总有一个厂商会提供准确的解决方案,而这个方案会满足你的需要和需求。近日,自己为了将为公司开辟的一个信息办理体系从之前试运转的开辟机械上(Windows NT + IIS4.0 + access)迁徙至一台真实的linux办事器上(Apache1.3.12 + php 4.03 + MySQL 3.23.26),个中数据库中的几十个表的内容迁徙,入手下手让我小费了一些周折,从网上也下载了一些MySqL的客户软件或是数据库办理软件,写得较好的软件均无数据迁徙功效,但其迁徙体例不过乎两种,一种是采取文件引入体例,此种体例在处置数据库中有和分隔符不异的字符时,会发生毛病,特别是在处置ACCESS中的Memo字段,很轻易失足,最初招致导出后的数据不是多了就是少了。而另外一种撑持ODBC直接导入的功效较强,根基可无毛病地导入各个表的内容,但很遗憾,这必需是创立在ACCESS中表格的字段是英文是才可以,如在ACCESS中字段是中文名,普通也失足,不克不及胜利导入。
为此我只好花了点工夫写了两个小法式,用于将ACCESS数据库的内容向MySQL迁徙,经利用,后果还不错,特在此写出贡献给列位一试或评判。

先概述一下利用办法,
1,将ACCESS的数据库创立一个"system DSN";
    2,依据ACCESS数据库中各表的称号,在MySQL中创立响应的各个空表;
3,运转fdlist.php;
    4,运转import.php;
    5,每运转一次3,4步可迁徙一个表,然后修正fdlist.php中的ACCESS源表名和MySQL中的方针表名,再运转3,4步,直至迁徙一切的表,

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
以下为 fdlist.php源法式
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~      
<html>
<head>
<style type=text/CSS>
body,td,li,div,p,PRe,a,b,h1,h2,h3,h4 {font-family:verdana;font-size:9pt;line-height : 18px;color:#a00000 }  
</style>
</head>
<?  

     $dbconnection = @mysql_connect("yourmysqlserver", "mysqlaccount", "mysqlpassWord")  
      
         or die ("can not connect to database server");
      
     @mysql_select_db("yourdatabase")   
               
              or die("<p style='font-size:9pt;font-family:verdana;color:#803333;font-weight:bold'>No Database,</p>") ;  

     $odbc_table = "youroriginaltable" ;    // The original table name in your ODBC database

     $mysql_table = "yournewtable" ;        // The new table name in your Mysql Database.


      
?>

<body bgcolor=#f0f0f0 topmargin=0 leftmargin=0 text=#a00000>

<br>
<div style="font-size:24pt;font-family:times;font-weight:bold;color:#00a000">Fields List of Two tables</div>
<hr size=1 color=#900000>

<?

     $conn = odbc_connect("task", "", "");
      
     $odbc_query = "select * from " . $odbc_table . " where 1=2";
      
     $recordsid = odbc_exec($conn, $odbc_query);
      
     $idcounts = odbc_num_fields( $recordsid ) ;

     $fdlist1 = "" ;
      
     for ( $i = 1 ; $i <= $idcounts ; $i ++)  
      
         $fdlist1 .=   odbc_field_name($recordsid,$i)."," ;
      
     echo "<div> Fd1 = " . $fdlist1 ;
      
     $fdlist1 = substr($fdlist1,0,strlen($fdlist1)-1) ;
      
     $fdlist2 = "" ;

         
     $sqlquery = "select * from " . $mysql_table . " where 1=2 " ;  
      
     $records2 = mysql_query ($sqlquery) ;
                  
     $idcount2 = mysql_num_fields ( $records2 ) ;
      
      
      
     for ( $i = 0 ; $i < $idcount2 ; $i++)
      
         $fdlist2 .= mysql_field_name($records2,$i )."," ;
         
     echo "<div> FD2 = " . $fdlist2 ;

     $fdlist2 = substr($fdlist2,0,strlen($fdlist2)-1) ;
         
     $fp = fopen ("fdlist.txt","w") ;
      
     fwrite ($fp,$ctable) ;
      
     fwrite ($fp,"n");
      
     fwrite ($fp,$fdlist1) ;
      
     fwrite ($fp,"n");
      
     fwrite ($fp,$etable) ;
      
     fwrite ($fp,"n") ;
      
     fwrite ($fp,$fdlist2) ;
      
     fclose($fp) ;
         
     odbc_close($conn);

     if ( $idcount2 != $idcounts )  {
      
         echo "<hr size=1 color=#900000>".  
              
             "<div style='font-size:20pt;font-family:times;font-weight:bold'> The fields of two tables doesn't match" ;

         echo "<br><br>ODBC_table Fields = " . $idcounts;

         echo "<br><br>MySQL_table Fields = " . $idcount2;
     }
?>


</body>
</html>

~~~~~~~~~~~~~~~~~~~
未完接(二)
~~~~~~~~~~~~~~~~~~~ 这种服务也提供了足够的监控功能来跟踪性能和使用情况,在问题发生时将发出通知并生成一定深度的分析报告。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-4 21:05

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表