include_once("include.php")
$card=445//接收$card
//英文字段转中文字段
function field_conv($en,$card){
global $DbUseDatabase,$DbMHost,$DbMUser,$DbMPass
$db = new newquery($DbUseDatabase,$DbMHost,$DbMUser,$DbMPass)
$db->query("select fieldname from t_cardinfo where cardkind=$card and field ='$en'")
if($db->next_record()){
return $db->f(0)
}
else
return false
}
function mysql_to_dbf($mysql_datasource,$source_table,$destination_dbf)
{
global $DbUseDatabase,$DbMHost,$DbMUser,$DbMPass,$card
$link=mysql_connect($DbMHost,$DbMUser,$DbMPass) or exit("不能链接到数据库")
$operate=mysql_select_db($mysql_datasource,$link)
//连mysql数据源
$rs=mysql_query("SELECT * from ".$source_table." limit 0,1")
$number_of_fields=mysql_num_fields($rs)//取字段数量
//不要前面5个底层字段
for($field_counter=5$field_counter<$number_of_fields$field_counter++)
{
$dbf_field_type=mysql_field_type($rs,$field_counter)
$dbf_field_name=mysql_field_name($rs,$field_counter)
$dbf_field_len=mysql_field_len($rs,$field_counter)
//print($dbf_field_name)
if(isset($point)){
unset($point)
array_pop($field)
}
switch($dbf_field_type)
{
case "string":
$dbf_field_name=substr(mysql_field_name($rs,$field_counter),0,10)
$dbf_field_len=mysql_field_len($rs,$field_counter)
if($dbf_field_len>=255)
{
$dbf_field_len--
}
$dbf_field_type="C"
break
case "varchar":
$dbf_field_name=substr(mysql_field_name($rs,$field_counter),0,10)
//自由表的字段名不能超过10,请注意
$dbf_field_len=mysql_field_len($rs,$field_counter)
if($dbf_field_len>=255)
{
$dbf_field_len--
}
$dbf_field_type="C"
break
case "decimal":
$dbf_field_name=substr(mysql_field_name($rs,$field_counter),0,10)
//自由表的字段名不能超过10,请注意
$dbf_field_len=mysql_field_len($rs,$field_counter)
if($dbf_field_len>=255)
{
$dbf_field_len--
}
$dbf_field_type="C"
break
case "real":
$dbf_field_name=substr(mysql_field_name($rs,$field_counter),0,10)
//自由表的字段名不能超过10,请注意
$dbf_field_len=mysql_field_len($rs,$field_counter)
if($dbf_field_len>=255)
{
$dbf_field_len--
}
$dbf_field_type="N"
$dbf_field_len="10"
$point="0"
break
case "date":
$dbf_field_type="D"
break
}
$fieldname=field_conv($dbf_field_name,$card)
$fieldname=subcnstr($fieldname, 9, '')//字段最长10个字符
$field[0]=$fieldname
$field[1]=$dbf_field_type
$field[2]=$dbf_field_len
if(isset($point)) {
$field[3]=$point
}
$dbf[]=$field
}
$d = array_map(null, $dbf)
if (!dbase_create($destination_dbf,$dbf)){
print "<strong>Error!</strong>"
exit
}
//else
// print "<strong>ok!</strong>"
//写入字段名完成!
$dbfp=dbase_open ($destination_dbf,2)
$rs=mysql_query("SELECT * from ".$source_table)
$field=mysql_num_fields($rs)
while($row = mysql_fetch_array($rs))
{
$i=0
for($fieldcounter=5$fieldcounter<$field$fieldcounter++)//不要前面5个底层字段
{
$field_name=mysql_field_name($rs,$fieldcounter)
$rows[$i]=$row[$field_name]
$i++
}
dbase_add_record ($dbfp,$rows)//写入记录
}
//print_r($dbffield)
dbase_close($dbfp)
mysql_close($link)
}
mysql_to_dbf("nbw1-SY","t_cardcontent445","c:\a.dbf")
echo "<script>alert('导出完成!')</script>"
?>
你双击dbf是什么程序打开的?vfp吗?你可以使用set printer to file abc.sql
list to print
然后使用一个文本编辑器,如emeditor,编辑这个abc.sql,将内容构造为标准的sql语句:
insert into mytable (a,b,c,d,e) values ('dbf_field1','dbf_field2','dbf_field3','dbf_field4','dbf_field5')
然后在mysql administrtor中,将这个abc.sql导入到数据库中就可以了。
要是FOXBASE/FOXPRO的库文件可以直接用EXCEL打开,然后保存为TXT文件,再用sqlldr导入oracle。不过EXCEL有行数限制,大概是8W行也可以直接把DBF文件COPY到FOXPRO环境。然后在FOXPRO里把这个DBF(库)打印到文本即可,就可以sqlldr导入ORacle。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)