2011-08-14 54 views
4

我正在重建基於Symfony1.4和MySQL 5.1的ERP系統。面臨的挑戰是以前的系統是建立在Filemaker Pro上的,我必須將所有以前的數據遷移到當前系統。爲此,首先我需要將所有數據移動到前一個模式結構完整的MySQL DB中,然後通過根據需要編寫腳本將數據映射到當前系統模式。如何將數據庫從Filemaker遷移到Mysql?

我應該如何繼續第一步?有沒有現有的工具或流程來做到這一點?

任何幫助將不勝感激!提前致謝!

回答

4

最簡單的方法是將數據從FileMaker導出到一些通用格式。要做到這一點,您需要在FileMaker中打開文件,並且需要爲每個表格轉到與表格關聯的佈局,並使用菜單顯示所有記錄和導出。

確保只導出數據字段(文本,數字,日期,時間和時間戳),因爲FileMaker有很多計算字段(計算和摘要)是典型情況。 (要做到這一點首先去文件 - 定義數據庫,然後到一些表,按類型排序文件,並注意最後一個數據字段。

這將不會導出容器字段,但大多數應用程序不存儲這樣的數據它仍然可以將它們導出太多,但它需要一個自定義腳本。

下一個選項是使用ODBC。這是「下一個」,因爲它是不太方便,通常速度較慢。

如果沒有一個FileMaker的副本,您可以從他們的網站下載30天的試用版;它的功能完全可以使用。

2

我在Java中使用此刻JDBC。您需要將JDBC驅動程序和MySQL導入到庫中。我目前正在查看我的其他帖子,以獲取處理這些大量數據的最佳做法。

你可能不得不自己在MySQL中創建表,我可能會推薦它,因爲FMPro通常有一個奇怪的設置,你可能不想完全複製(我注意到最近的一個文本字段也必須設置爲一個長度或事情只是乾瞪眼..)。一個簡單的下午在MySQL Developer(或者現在稱爲它的任何東西)中繪製一些漂亮的圖表?

下面是一些騙子:

public static String dbaseURL = "jdbc:filemaker://machineIP:2399/database"; 

public static void FMProConnect() { 

// Load the JDBC to ODBC driver 
try { 

    Class.forName("com.filemaker.jdbc.Driver"); 

} catch(java.lang.ClassNotFoundException e) { 
     System.err.print("ClassNotFoundException: "); 
     System.err.println(e.getMessage()); 
} 
} 
public static void copyTable(){ 
FMProConnection.FMProConnect(); 
Connection dbConnection = null; 
Statement query = null; 
PreparedStatement stmt = null; 
    try { 
     // Create a database connection 
    dbConnection = 
    DriverManager.getConnection(dbaseURL, "fmprouser", "fmpropassword"); 
    // Create a statement and execute the SQL query 
    query = dbConnection.createStatement(); 
} 
catch (SQLException e) { 
    System.out.println("Error connecting to dbase."); 
    e.printStackTrace(); 
    //System.exit(1); 
} 

ResultSet results = null; 
try { 

    results = 
    query.executeQuery("SELECT * from table"); 

    // Iterate through the results and print them to standard output 
    Connection con = DriverManager.getConnection("jdbc:mysql://mysqlserver.com/database","username","password"); 

    while (results.next()) { 
    String fname = results.getString("field"); 
    String lname = results.getString("field1"); 
// System.out.println("Found user \"" + fname + " " + lname + "\""); 
    stmt = con.prepareStatement("INSERT ignore INTO table (field, field1 values (?, ?)"); 
    stmt.setString(1, fname); 
    stmt.setString(2, lname); 
    stmt.executeUpdate(); 

    } 
    System.out.println("Completed Customers"); 
} 
catch (SQLException e) { 
    System.out.println("Error retrieving data from database."); 
    e.printStackTrace(); 
    //System.exit(1); 
} 


} 
0

無軟件轉換: 這裏是一個展示如何將數據從使用的FileMaker沒有軟件Pro的所有轉移寫得很好的文章的鏈接。

[http://drilix.com/en/tutorial/sql-migrate-filemaker-mysql-without-any-software][1]

文件訪問權限: 它可能有不可見的出口能力的FileMaker數據庫文件。在FileMaker中,可以實現自定義菜單以禁用導出功能。要解決此類問題,您需要使用具有[完全訪問權限]的管理員帳戶密碼登錄數據庫。然後您可以選擇菜單:工具 - >自定義菜單 - > [FileMaker Standard FileMaker菜單] 一旦您選擇此菜單,所有常規菜單將可用。

FileMaker二進制文件格式: 認識到FileMaker數據庫使用專有二進制文件格式存儲其數據很重要。這些文件都不能直接在任何Linux或UNIX操作系統上讀取,因爲文件格式尚未公開。我只知道一個公司的FileMaker外面的人誰已經成功地反向工程的文件格式(.fp7,.fmp12版本)的現代版。

這意味着,從一個的FileMaker數據庫中提取數據,你必須始終有MacOSX上或Windows上運行的軟件的FileMaker以提取數據。這與讀取Access .mdb/.accdb文件完全不同,因爲這些文件可以使用開源替代方法。

ODBC與文件導出: 將數據從FileMaker導出到任何非本機文件格式有一些重要限制。可能會丟失UTF8格式的數據,截斷某些格式的數據,以及重複字段數據的問題。這就是爲什麼我建議通過ODBC直接連接到FileMaker,並將數據直接傳輸到MySQL(或您選擇的任何其他數據庫)。

什麼是重複的領域? 中的FileMaker重複字段類似於存儲單個記錄的單個字段內的數據的數組。我通常建議將這些數據分離到相關記錄中,這些記錄與父記錄的主鍵相關。上面鏈接的perl腳本完成這個任務。但是您必須提前在FileMaker中準備數據。由於的FileMaker不再支持通過重複的ODBC驅動程序領域,你需要創建的FileMaker腳本所有的重複值的移動到第一重複值。 所以如果你有重複值的這樣一個領域:

Field1[1]="abc" 
 
Field1[2]="def" 
 
Field1[3]="ghi"

您的數據移動到:

Field1[1]="abc"<TAB>"def"<TAB>"ghi"

然後你可以遍歷直通TAB在Field1 [1]內分隔數值以寫入數據i進入相關表格。

相關問題