2010-12-14 38 views
2

Je crée un site Web pour un client qui utilise un système de base de données de bureau FoxPro.FoxPro -> MySQL

Les données qui doivent être partagées entre la base de données et le site Web est essentiellement une liste des membres (structure assez plat: leurs coordonnées, quelques champs de drapeau, etc.)

Ils aimeraient des modifications apportées à ces détails des membres seront automatiquement synchronisés sur le site Web (base de données mysql). Il n'a pas besoin d'être totalement instantané mais le processus doit être facile.

Ma question est quelles sont les approches les plus simples qui pourraient être utilisées ici? ils sont prêts à faire un compromis pour économiser du temps et de l'argent.

Existe-t-il un moyen facile pour FoxPro de parler directement à ma base de données en ligne MySQL?

FoxPro peut-il créer un fichier de type XML ou CSV et le transmettre à un script Web? (que je puis analyser et mettre à jour MySQL avec)

Toutes les suggestions ont apprécié.

+0

FoxPro n'a-t-il pas encore acquis la connectivité ODBC? –

+0

Euh, un peu. Vous pouvez faire une connexion avec un DSN. –

Répondre

-1

Je dirais que votre pari le plus rapide/plus simple est sans doute de faire ce qui suit via un script de nuit:

  1. export your FoxPro data to XML
  2. pousser les données dans la base de données MySQL en utilisant quelque chose comme Python ou Java

À long terme cependant, vous feriez probablement mieux d'abandonner totalement FoxPro après l'importation initiale;)

+0

Merci, l'ensemble de données n'est pas énorme, donc je me demande si cela pourrait même se produire sur un bouton de la base de données (le client est enthousiaste). Je développe en PHP tant qu'il peut obtenir le XML ou même un fichier CSV envoyé à un script .php, je peux facilement mettre à jour la base de données. – gio

+0

Peut-être envoyer votre XML à partir de l'application FoxPro via une requête HTTP POST à ​​votre serveur? Côté serveur, vous devez vous connecter à la base de données et importer le code XML à l'aide de PHP. – splicer

+1

Au sujet de l'abandon de son application de bureau FoxPro, très facile à dire, bien sûr, mais vous pourriez trouver que cela fonctionne parfaitement et fait tout ce que le client veut, comme toutes les applications COBOL, pour citer un autre exemple. Aucun sens dans les plates-formes d'amerrissage pour l'enfer. –

2

Vous pouvez utiliser soit ODBC ou OLE DB à partir de Visual FoxPro. L'utilisation d'ODBC est généralement assez simple.

+0

@gio, je suis d'accord avec Mark, il suffit de créer votre site directement interroger et mettre à jour la base de données VFP via des connexions OleDB ... – DRapp

+0

@DRapp, Parfois, le site est hébergé sur une boîte non-Windows ... ce qui rend ODBC intéressant affaire. –

0

Foxpro a une CURSORTOXML fonction intrinsèque, qui prendra une table et le convertir en XML Il est assez bien documenté dans les fichiers d'aide, mais voici un exemple simple de son utilisation

LOCAl lcXML,lnRecords 

use my_table 

lnRecords=CURSORTOXML('my_table','lcXML',0) 

? lnRecords 
? lcXML 

Espérons que cela aide

0

vous pouvez utiliser XML pour envoyer des informations à l'application Web par HTTP REQUEST. pour créer/lire du XML dans foxpro, vous pouvez utiliser CURSORTOXML/XMLTOCURSOR. Dans votre application Web, vous pouvez créer un service Web pour recevoir/envoyer des données XML dans votre application Web.

Si vous voulez un autre type de données, vous pouvez utiliser des données JSON.Utilisez QDFOXJSON https://qdfoxjson.codeplex.com/

0

Essayez ceci:

  1. Créez un dossier partagé sur votre serveur Web.
  2. Créez un fichier CSV de vos données et enregistrez-le dans le dossier partagé.
  3. Créez un Cron Jobs/Scheduler pour analyser et vider les données sur votre Mysql.

Cela fonctionne pour moi.

0

Obtenez le pilote odbc d'ici: https://dev.mysql.com/downloads/connector/odbc/

Vous pouvez aussi avoir besoin de Microsoft Visual C++ 2010 Redistributable Package (x86) vcredist_x86.exe

Utilisez ce code pour établir la connexion mysql

PUBLIC server,port,db,uid,pw 
server="" & use mysql ip 
port="" & port mysql is open on 
db="" & db name 
uid="" & user anme 
pw="" & password 

mysql = SQLSTRINGCONNECT('Driver={MySQL ODBC 5.3 Unicode Driver};Server=' + server + ';Port=' + port + ';Database=' + db + ';uid=' + uid + ';Pwd=' + pw + ';',.T.) 
IF VARTYPE(mysql) == 'L' OR m.mysql < 0 
    MESSAGEBOX('MySQL Connection Failed. Logging will be disabled for this session.',16,'MySQL Error',3500) 
ENDIF 

Voici un exemple pour faire un insert dans une table mysql. Je l'utilise pour consigner les actions de l'utilisateur dans mysql.

IF VARTYPE(mysql) != 'L' AND m.mysql >= 0 
    SQLPREPARE (; 
     m.mysql; 
     ,'INSERT INTO logging (computer,operator,application,program,version,action) VALUES (; 
      ?COMPUTERNAME ; 
      ,?OPERATOR ; 
      ,?thisApplication ; 
      ,?thisProgram ; 
      ,?thisVersion ; 
      ,?logMessage; 
      );'; 
     ) 
    SQLEXEC(m.mysql) 
ENDIF