ACCESS数据库向MySQL快速迁移小程序(二)


1以下为 import.php 源程序   
  1<html>
  2<head>
  3<style type="text/css">   
  4body,td,li,div,p,pre,a,b,h1,h2,h3,h4 {font-family:verdana;font-size:9pt;line-height : 18px;color:#a00000 }   
  5</style>
  6</head>
  7<body bgcolor="#f0f0f0" leftmargin="0" text="#a00000" topmargin="0">
  8<center>
  9<br/>
 10<div style="font-size:24pt;font-family:times;font-weight:bold;color:#008000">ODBC --&gt; MySQL Migrant</div>
 11<hr color="#900000" size="1"/>
 12<?   
 13  
 14$dbconnection = @mysql_connect("yourmysqlserver", "mysqlaccount", "mysqlpassword")   
 15  
 16or die ("can not connect to database server");   
 17  
 18@mysql_select_db("yourdatabase")   
 19  
 20or die("<p style='font-size:9pt;font-family:verdana;color:#803333;font-weight:bold'>No Database,") ;   
 21  
 22  
 23$conn = odbc_connect("task", "", "");   
 24  
 25$fp = fopen ("fdlist.txt","r") ;   
 26  
 27$table1 = fgets($fp,200);   
 28  
 29$fd1 = fgets($fp,1024) ;   
 30  
 31$table2 = fgets($fp,200);   
 32  
 33$fd2 = fgets($fp,1024) ;   
 34  
 35  
 36$query1 = "select " . $fd1 . " from " . $table1 ;   
 37  
 38$query2 = "select " . $fd2 . " from " . $table2 . " where 1=2 " ;   
 39  
 40$result = mysql_query ($query2) ;   
 41  
 42mysql_query ("delete from " .$table2 ) ;   
 43  
 44echo "sql=". $query1;   
 45  
 46$recordsid = odbc_exec($conn, $query1);   
 47  
 48$idcounts = odbc_num_fields( $recordsid ) ;   
 49  
 50$idcount2 = mysql_num_fields($result) ;   
 51  
 52if ( $idcounts != $idcount2 )   
 53die (" The fields of two tables doesn't match ") ;   
 54  
 55echo "<table border="1" bordercolordark="#ffffff" bordercolorlight="#000000" cellpadding="3" cellspacing="0" width="90%">n" ;   
 56  
 57  
 58  
 59echo "<tr align="center"><td> n " ;   
 60  
 61for ( $i = 1 ; $i &lt;= $idcounts ; $i ++)   
 62  
 63echo "n<td>" . odbc_field_name($recordsid,$i) ;   
 64  
 65$theno = 1 ;   
 66  
 67echo "<tr>n" ;   
 68  
 69  
 70  
 71while (odbc_fetch_row($recordsid) ) {   
 72  
 73  
 74  
 75$runsql = "insert into " . $table2 . "(" . $fd2 . ") values (" ;   
 76  
 77for ( $i = 1 ; $i &lt;= $idcounts ; $i ++) {   
 78  
 79$fdv = odbc_result($recordsid,$i) ;   
 80  
 81  
 82if ( mysql_field_type($result,$i-1) == "string")   
 83  
 84$runsql .= "'". $fdv . "'," ;   
 85else   
 86$runsql .= $fdv. "," ;   
 87  
 88}   
 89  
 90$runsql = substr($runsql,0,strlen($runsql)-1) ;   
 91  
 92$runsql .= ")" ;   
 93  
 94mysql_query ($runsql) ;   
 95  
 96$theno++ ;   
 97}   
 98  
 99  
100echo "Total Convert : " . $theno -- ;   
101  
102  
103  
104odbc_close($conn);   
105  
106?&gt;   
107  
108</tr></td></td></tr></table></center></body>
109</html>
1有经验的网友可能看了两个小程序,可能觉得如在ACCESS数据库   
2中各表的字段是英文的话,fdlist.php有点多余,其实在这里,我的   
3本意是在迁移时,可以很方便地删除某些不用的字段,只要将fdlist.php的生成文件fdlist.txt中对应的字段Delete掉即可。还算是很方便的,反正,有了这两个小程序,我以前放在ACCESS中的几十个表格的数据,二十分钟全部迁移完毕,包括对其中四、五个表格字段的修改。   
4  
5当然,虽然两个程序达到了我预定的功能,但要将其扩展为所有人可用其将ODBC数据库迁移至MySQL数据库,且使用更加方便一些,还有一些方面可以改进,如根据ODBC表格的结构自动建立MySQL表格,如不能建立,给出一步一步用户建立表格的向导功能;检测源表和目的表格数据类型的差异...等等,不过,我的数据迁移任务已完成,编这样的程序失去了一半的原动力,各位要是给我一点鼓励的话,我也许会做出一个更加完美的程序来,精神上的鼓励也行,当然物质上的就更佳了(喂!不是西红柿和香蕉皮)。
Published At
Categories with 数据库类
Tagged with
comments powered by Disqus