将记录从Access复制到SQL

时间:2013-01-05 21:21:35

标签: php sql ms-access odbc

是否有更快的方法将记录从Access数据库复制到SQL数据库?

目前我正在一次检索一条记录并将其插入SQL,但这需要很长时间。我知道有“SELECT INTO tbl_name”但据我所知,这只有在查询位于“发送”数据库(在本例中为Access数据库)时才有用。

我目前的代码是:

if (isset($_POST['odbc_connect'])){
$odbc_conn = $_POST['odbc_connect'];
}else{
exit ($noODBC);
}
$conn=odbc_connect($odbc_conn,'','') or die ($errorODBC);
$shell = new COM("WScript.Shell");
$odbcServer = $shell->RegRead("HKEY_LOCAL_MACHINE\\SOFTWARE\\ODBC\\ODBC.INI\\JuniorDSN\\DBQ");

$sql="SELECT * FROM [Cost Centre Hierarchy]";
$rs=odbc_exec($conn,$sql); 

// Connect to your database
mysql_select_db($database_budgetstatementconnection, $budgetstatementconnection);

// Delete contents of table
$sql = "TRUNCATE TABLE tblcostcentrehierarchy";
mysql_query($sql) or die ( mysql_error() );

while (odbc_fetch_row($rs))
{
// Retrieve the record from Junior
$strCostCentre = odbc_result($rs,1);
$strCCDescription = odbc_result($rs,2);
$enabled = odbc_result($rs,3);
$path = odbc_result($rs,4);
$level1 = odbc_result($rs,5);
$level2 = odbc_result($rs,6);
$level3 = odbc_result($rs,7);
$level4 = odbc_result($rs,8);
$level5 = odbc_result($rs,9);
$level6 = odbc_result($rs,10);
$level7 = odbc_result($rs,11);
$level8 = odbc_result($rs,12);

// Parse the data
$strCCDescription = str_replace("'","\'",$strCCDescription);
$strCCDescription = str_replace('"',"",$strCCDescription);
$level1 = str_replace("'","\'",$level1);
$level1 = str_replace('"',"",$level1);
$level2 = str_replace("'","\'",$level2);
$level2 = str_replace('"',"",$level2);
$level3 = str_replace("'","\'",$level3);
$level3 = str_replace('"',"",$level3);
$level4 = str_replace("'","\'",$level4);
$level4 = str_replace('"',"",$level4);
$level5 = str_replace("'","\'",$level5);
$level5 = str_replace('"',"",$level5);
$level6 = str_replace("'","\'",$level6);
$level6 = str_replace('"',"",$level6);
$level7 = str_replace("'","\'",$level7);
$level7 = str_replace('"',"",$level7);
$level8 = str_replace("'","\'",$level8);
$level8 = str_replace('"',"",$level8);
$level8 = trim(preg_replace('/\n\r|\r\n/', "", $level8 ));

 // Save the record to the database
 $sql = "insert into `budgetstatements`.`tblcostcentrehierarchy` (`CostCentreCode`, `CostCentreDescription`, `Enabled`, `Path`, `Level1`, `Level2`, `Level3`, `Level4`, `Level5`, `Level6`, `Level7`, `Level8`) values ('".$strCostCentre."', '".$strCCDescription."', '".$enabled."', '".$path."', '".$level1."', '".$level2."', '".$level3."', '".$level4."', '".$level5."', '".$level6."', '".$level7."', '".$level8."')";

// Execute the sql
mysql_query($sql);

}

//Close the connections
odbc_close($conn);
mysql_close($budgetstatementconnection);

2 个答案:

答案 0 :(得分:1)

语句SELECT INTO tbl_name用于创建新表,因为您的表已经存在于可以链接到它的SQL数据库中;在How to link tables in an Access project by using the Link Table Wizard上阅读此页面。

将SQL数据库中的表链接到Access数据库后,您可以针对Access数据库发出SQL语句,它会将链接表视为存在于同一数据库中:

INSERT INTO [tblcostcentrehierarchy] -- linked table name
SELECT * FROM [Cost Centre Hierarchy] -- local Access table

假设您的字段名称相同。如果字段名称不同,或者顺序不同,则需要在INSERTSELECT语句中指定它们。

答案 1 :(得分:0)

假设您需要手动执行此操作,可以查看Access to MySQL