8
votes

Comment migrer la base de données de FileMaker vers MySQL?

Je reconstruisant un système ERP basé sur Symfony1.4 et MySQL 5.1. Le défi est que le système précédent a été construit sur FileMaker Pro et je dois migrer toutes les données précédentes vers le système actuel. Pour cela, j'ai d'abord besoin de déplacer toutes les données sur un dB mysql ayant la structure de schéma précédente intacte, puis je peux mapper les données sur le schéma système actuel en écrivant un script au besoin.

Comment devrais-je procéder avec cette première étape? Existe-t-il des outils ou processus existants pour le faire?

Toute aide sera appréciée! Merci d'avance!


0 commentaires

3 Réponses :


8
votes

Le moyen le plus simple est d'exporter des données de FileMaker en un format commun. Pour ce faire, vous devez ouvrir le fichier dans FileMaker et pour chaque table dont vous avez besoin, accédez à la mise en page associée à la table et utilisez le menu pour afficher tous les enregistrements et exporter.

Assurez-vous uniquement d'exporter des champs de données (texte, numéro, date, heure et horodatage), car il est typique de FileMaker d'avoir beaucoup de champs calculés (calcul et résumé). (Pour ce faire, allez-y au fichier - Définir la base de données, puis sur une table, trier les fichiers par type et notez le dernier champ de données.

Cela n'exportera pas les champs de conteneurs, mais la plupart des applications ne stockent pas de telles données. Il est toujours possible de les exporter aussi mais il nécessiterait un script personnalisé.

L'option suivante consiste à utiliser ODBC. C'est "Suivant" parce que c'est moins pratique et généralement plus lent.

Si vous n'avez pas de copie de FileMaker, vous pouvez télécharger un essai de 30 jours de leur site; C'est pleinement fonctionnel.


1 commentaires

Ma première pensée était XML et les grammaires, ils ont l'air un peu complexe. Toute suggestion sur les applications qui aident au processus?



3
votes

Je fais cela en Java pour le moment avec JDBC. Vous devez importer le pilote JDBC et MySQL dans votre bibliothèque. Je regarde actuellement dans mes autres messages pour les meilleures pratiques nécessaires au traitement de cette grande quantité de données.

Vous devrez peut-être faire les tables vous-même dans MySQL, et je pourrais aller aussi loin que de le recommander, car la FMPro a typiquement Une configuration étrange, que vous ne voudrez peut-être pas copier exactement (j'ai remarqué que les champs de texte les plus récents doivent être définis sur une longueur aussi ou que les choses vont simplement devenir Haywire ..). Un après-midi facile au développeur de MySQL (ou tout ce qu'ils l'appellent maintenant) Dessinez de jolis schémas? P>

Voici quelques tricheurs: P>

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 commentaires

1
votes

conversion sans logiciel: Voici un lien vers un article bien écrit indiquant comment transférer des données de FileMaker Pro, sans logiciel.

[ http://drilix.com/fr/Tutorial/sql-migrate-filemaker-mysql-without-any-software] [1] p>

Autorisations d'accès au fichier: Il est possible d'avoir des fichiers de base de données FileMaker sans possibilité d'exportation visible. Dans FileMaker, les menus personnalisés peuvent être mis en œuvre pour désactiver les fonctionnalités d'exportation. Pour résoudre ce type de problème, vous devez vous connecter à la base de données à l'aide du mot de passe de compte administrateur, à avoir des privilèges [d'accès complet]. Ensuite, vous pouvez sélectionner le menu: Outils-> Menus personnalisés -> [Menus de filemaker standard de FileMaker] Une fois que vous avez sélectionné ce menu, tous les menus réguliers seront disponibles. P>

FileMaker Format de fichier binaire: Il est important de réaliser que la base de données FileMaker utilise un format de fichier binaire propriétaire pour stocker ses données. Aucun de ces fichiers ne peut être lu directement sur un système d'exploitation Linux ou Unix directement, car le format de fichier n'a pas été rendu public. Je ne connais qu'une seule personne à l'extérieur de FileMaker Inc. qui a révergée avec succès la version moderne du format de fichier (versions .fp7, .fmp12). P>

Cela signifie que d'extraire des données d'une base de données FileMaker, Vous devez toujours avoir le logiciel FileMaker exécuté sur MacOSX ou Windows afin d'extraire les données. Ceci est complètement différent des fichiers d'accès à la lecture .MDB / .Accdb, pour lesquels des alternatives open source sont disponibles. P>

ODBC VS Fichier Exportations: Il existe quelques limitations importantes pour exporter des données de FileMaker vers n'importe quel format de fichier non natif. Il peut y avoir une perte de données formatées UTF8, une troncature de données avec certains formats et des problèmes avec les données de champs répétitives. C'est pourquoi je vous recommande de créer une connexion directe à FileMaker via ODBC et de transférer les données directement sur MySQL (ou de toute autre base de données que vous choisissez). P>

Quels sont les champs répétitifs? Un champ répétitif dans FileMaker est similaire à la conservation d'une gamme de données dans un seul champ d'un seul enregistrement. Je recommande généralement de séparer ces données dans des enregistrements associés, liés à la clé principale de l'enregistrement parent. Les scripts Perl liés ci-dessus, accomplissent cette tâche. Mais vous devez préparer les données dans FileMaker à l'avance. Étant donné que FileMaker ne prend plus en charge les champs de répétition via leur pilote ODBC, vous devez créer un script dans FileMaker pour déplacer toutes les valeurs de répétition dans la première valeur de répétition. Donc, si vous avez un champ de répétition de valeurs comme celui-ci: p>

p>

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


0 commentaires