0

AccessデータベースからSQLデータベースにレコードをコピーするより速い方法はありますか?

現在、一度に1つのレコードを取得して、SQLに挿入していますが、これには長い時間がかかります。「SELECTINTOtbl_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);
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

これを手動で行う必要があると仮定すると、MySQLへのアクセスを確認できます。

于 2013-01-05T21:25:29.940 に答える