0

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

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

我目前的代码是:

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);
4

2 回答 2

1

该语句SELECT INTO tbl_name用于创建一个新表,因为您的表已经存在于 SQL 数据库中,您可以链接到它;阅读有关如何使用链接表向导链接 Access 项目中的表的页面。

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

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

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

于 2013-01-05T21:31:30.390 回答
0

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

于 2013-01-05T21:25:29.940 回答