Accueil > > > CONVERTIR BASE FIREBIRD EN MYSQL
CONVERTIR BASE FIREBIRD EN MYSQL
Information sur la source
Description
Voici une petit bout de code pour "convertir" une base Firebird en une base MySQL. Ce code permet: - de créer une base MySQL ou d'écraser une existante - de copier les tables Firebird dans MySQL - d'importer les données Ce code ne gère pas: (un jour peut etre) - les clefs des tables! L'accès aux base ce fait via PDO. Dans mon cas j'avais juste besoin de créer une base MySQL à partir d'une base Firebird, et de copier les données. Je n'effectue aucune mise à jour sur ma base MySQL (d'où l’absence de gestion des clefs), sont unique but est d'être une copie de la base Firebird mise en ligne sur un futur site, puisque apparemment très peu d'hébergeur propose la gestion de base Firebird. Ce code est une adaptation de : http://www.phpcs.com/codes/CONVERTISSEUR-INTERBASE -MYSQL_44643.aspx un grand merci à son auteur.
Source
- <?php
-
- #######################################################
- # SCRIPT DE CONVERSION DE BDD #
- # INTERBASE -> MYSQL #
- # #
- # original: le 08/11/2007 par Silk #
- # (trooper@libertysurf.fr) #
- # adaptation le 25/05/2011 par F CASTEL #
- #######################################################
- //source: http://www.phpcs.com/codes/CONVERTISSEUR-INTERBASE-MYSQL_44643.aspx
-
- #script
- /*
- * Fonction: Copier une base Firebird (existante) dans une base MySQL
- * Copie des tables (sauf system) et des données
- * Créer la base MySQL ou écraser celle existante
- *
- * Config des Tests:
- * - WampServer 2.0 (extension php_interbase : actif)
- * - Windows 7
- * - Firebird Server 2.5
- * - PHP 5.2
- * - FireFox 4
- *
- * pas de gestion des clefs des tables!!!!! TODO
- * gestion propre des erreurs : TODO
- */
-
- //chrono
- $temps_debut = microtime(true);
-
- //plus de limite de temps
- set_time_limit(0); //pas tres classe mais sinon sa bloque si > 30sec
- echo '<div class="Titre"><h1>' . 'Firebird vers MySQL' . '</h1></div>';
-
- //CREER base MySQL
- if ($_POST['MySQLNew'] == 'new') {
- echo "<h2>" . 'Création de la base MySQL' . "</h2>";
- $pdo = new PDO('mysql:host=localhost', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
- $requete = 'CREATE DATABASE ' . $_POST['MySQLDBName'] . ' DEFAULT CHARACTER SET latin1 COLLATE latin1_general_ci';
- echo "<p>" . $requete . "</p>";
- $pdo->prepare($requete)->execute();
-
- }
-
- echo "<h2>" . 'Les Bases de données' . "</h2>";
-
- //PARAMETRES INTERBASE
- $utilisateur_interbase = $_POST['FirebirdUser'];
- $passe_interbase = $_POST['FirebirdPassword'];
- $dsn_interbase = "firebird:dbname=" . $_POST['FirebirdHost'] . ":" . str_ireplace('\\', '\\\\', $_POST['FirebirdDBName']); //il faut doubler les \
- $bdd_interbase = new PDO($dsn_interbase, $utilisateur_interbase, $passe_interbase);
- //$bdd_interbase->exec("SET CHARACTER SET ISO8859_1");
- echo "<h3>" . 'Firebird' . "</h3>";
- echo "<p>" . $dsn_interbase . "</p>";
-
- //PARAMETRES MYSQL
- $utilisateur_mysql = $_POST['MySQLUser'];
- $passe_mysql = $_POST['MySQLPassword'];
- $dsn_mysql = 'mysql:host=' . $_POST['MySQLHost'] . ';dbname=' . $_POST['MySQLDBName'];
- $bdd_mysql = new PDO($dsn_mysql, $utilisateur_mysql,$passe_mysql);
- //$bdd_mysql->exec("SET CHARACTER SET latin1");
- echo "<h3>" . 'MySQL' . "</h3>";
- echo "<p>" . $dsn_mysql . "</p>";
-
- //RAZ base MySQL
- if ($_POST['MySQLNew'] == 'erase') {
- echo "<h2>" . 'Supprimer toutes les tables MySQL' . "</h2>";
- // lister les tables
- $requete = 'SHOW TABLES FROM test1';
- $statement = $bdd_mysql->prepare($requete, array(PDO::ATTR_CURSOR, PDO::CURSOR_FWDONLY));
- $statement->execute();
- $tables = $statement->fetchAll(PDO::FETCH_ASSOC );
- echo "<p>" . count($tables) . ' Tables à traiter' . "</p>";
-
- // virer chaque table
- echo '<p>';
- foreach($tables as $table){
- $requete = 'DROP TABLE ' . $table['Tables_in_test1'];
- echo $requete . '<br />';
- $bdd_mysql->exec($requete);
- }
- echo '</p>';
- }
-
- //LISTE TABLES FIREBIRD
-
- //liste les tables de la BDD
- $requete = 'SELECT DISTINCT rdb$relation_name FROM rdb$relation_fields
- WHERE rdb$view_context IS NULL
- AND rdb$system_flag = 0'; //Injection de la requête permettant de récupérer les tables
- $statement = $bdd_interbase->prepare($requete, array(PDO::ATTR_CURSOR, PDO::CURSOR_FWDONLY));
- $statement->execute();
- $tables = $statement->fetchAll(PDO::FETCH_ASSOC );
-
- //traiter chaque table
- echo "<h2>" . 'Creation des tables FIREBIRD dans la base MySQL' . "</h2>";
- echo "<p>" . count($tables) . ' Tables à traiter' . "</p>";
- foreach ($tables as $table) {
- //traiter une table
- echo "<h3>" . $table['RDB$RELATION_NAME'] . "</h3>";
-
- //lire la structure de la table
- $requete = 'SELECT rel_field.rdb$field_position, rel_field.rdb$field_name, field.RDB$FIELD_TYPE, field.RDB$FIELD_LENGTH, rel_field.RDB$NULL_FLAG
- FROM rdb$relations rel
- JOIN rdb$relation_fields rel_field
- ON rel_field.rdb$relation_name = rel.rdb$relation_name
- JOIN rdb$fields field
- ON rel_field.rdb$field_source = field.rdb$field_name
- WHERE rel.rdb$relation_name = \'' .$table['RDB$RELATION_NAME'] .'\'
- ORDER BY rel_field.rdb$field_position, rel_field.rdb$field_name';
- $statement = $bdd_interbase->prepare($requete, array(PDO::ATTR_CURSOR, PDO::CURSOR_FWDONLY));
- $statement->execute();
- $res_struc_table = $statement->fetchAll(PDO::FETCH_ASSOC);
-
- //Construction de la requête de création de la table dans MySQL
- $req_create_table = "CREATE TABLE `".trim($table['RDB$RELATION_NAME'])."` (";
- $first = true;
-
- //pour chaque champ
- foreach ($res_struc_table as $field) {
- $struct_champ = TypeChamp($field['RDB$FIELD_TYPE'] ,$field['RDB$FIELD_LENGTH']);
- //si field 1 pas de virgule
- if (!$first) {
- $req_create_table .= " , ";
- }
- $first = false; //c'est plus le 1er champ
-
- $req_create_table .= "`".trim($field['RDB$FIELD_NAME'])."` ".$struct_champ[0];
- if ($struct_champ[1]) {
- $req_create_table .= "(".$struct_champ[1].")";
- }
- if ($field['RDB$NULL_FLAG'] == 0) {
- $req_create_table .= " NULL";
- } else {
- $req_create_table .= " NOT NULL";
- }
- }
- $req_create_table .= ") ENGINE = MyISAM"; //clore instruction
- echo '<p>';
- print_r($req_create_table);
- echo '</p>';
-
- //créer la table dans MySQL
- $bdd_mysql->exec($req_create_table);
-
- }
-
- //importer les données
- if (isset($_POST['Import'])) {
- echo "<h2>" . 'Import des données FIREBIRD dans la base MySQL' . "</h2>";
- foreach ($tables as $table) {
- echo "<h3>" . $table['RDB$RELATION_NAME'] . "</h3>";
- //selections des données firebird
- $requete = 'SELECT * FROM ' . $table['RDB$RELATION_NAME'];
- $statement = $bdd_interbase->prepare($requete, array(PDO::ATTR_CURSOR, PDO::CURSOR_FWDONLY));
- $statement->execute();
- $data = $statement->fetchAll(PDO::FETCH_ASSOC );
- echo '<p>' . count($data) . ' entrées' . '</p>';
-
- //Construction de la requête d'insertion des données
- foreach ($data as $row) { //chaque ligne de table
- $req_insert = "INSERT INTO `" . trim($table['RDB$RELATION_NAME']) . "` SET ";
- $first = true;
- $key = key($row);
- $val = current($row);
- reset($row);
- while(list ($key, $val) = each ($row)) //chaque champ
- {
- if (!$first) {
- $req_insert .= " , ";
- }
- $first = false;//c'est plus le 1er champ
- //Correction des valeurs texte
- $val = str_replace("'","\'",$val);
- //$val = utf8_decode($val);
- $req_insert .= "`" . $key . "`='" . addslashes($val) . "'";
- }
- //insert LA ligne dans MySQL
- $bdd_mysql->exec($req_insert);
- }
- }
-
- }
-
-
- //FIN
- echo '<h1>' . 'Script executé !' . '</h1>';
- $temps_fin = microtime(true);
- echo '<p><strong>' . 'Temps d\'execution : '.round($temps_fin - $temps_debut, 0) . ' secondes' . '</strong></p>';
-
- ?>
- </body>
- </html>
-
- <?php
-
- #FONCTIONS
- function TypeChamp ($champ,$taille) {
- switch ($champ) {
- case 7:
- return array('SMALLINT',$taille);
- break;
- case 8:
- return array('INT',$taille);
- break;
- case 16:
- return array('BIGINT',$taille);
- break;
- case 10:
- return array('FLOAT','');
- break;
- case 11:
- //return 'D_Float';
- return 'erreur';
- break;
- case 27:
- return array('DOUBLE','');
- break;
- case 9:
- //return 'Quad';
- return 'erreur';
- break;
- case 14:
- return array('CHAR',$taille);
- break;
- case 37:
- return array('VARCHAR',$taille);
- break;
- case 40:
- //return 'CString';
- return 'erreur';
- break;
- case 13:
- return array('TIME','');
- break;
- case 12:
- return array('DATE','');
- break;
- case 35:
- return array('TIMESTAMP','');
- break;
- case 261:
- return array('BLOB','');
- break;
- }
- }
- #FIN FONCTIONS
-
-
- ?>
<?php
#######################################################
# SCRIPT DE CONVERSION DE BDD #
# INTERBASE -> MYSQL #
# #
# original: le 08/11/2007 par Silk #
# (trooper@libertysurf.fr) #
# adaptation le 25/05/2011 par F CASTEL #
#######################################################
//source: http://www.phpcs.com/codes/CONVERTISSEUR-INTERBASE-MYSQL_44643.aspx
#script
/*
* Fonction: Copier une base Firebird (existante) dans une base MySQL
* Copie des tables (sauf system) et des données
* Créer la base MySQL ou écraser celle existante
*
* Config des Tests:
* - WampServer 2.0 (extension php_interbase : actif)
* - Windows 7
* - Firebird Server 2.5
* - PHP 5.2
* - FireFox 4
*
* pas de gestion des clefs des tables!!!!! TODO
* gestion propre des erreurs : TODO
*/
//chrono
$temps_debut = microtime(true);
//plus de limite de temps
set_time_limit(0); //pas tres classe mais sinon sa bloque si > 30sec
echo '<div class="Titre"><h1>' . 'Firebird vers MySQL' . '</h1></div>';
//CREER base MySQL
if ($_POST['MySQLNew'] == 'new') {
echo "<h2>" . 'Création de la base MySQL' . "</h2>";
$pdo = new PDO('mysql:host=localhost', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
$requete = 'CREATE DATABASE ' . $_POST['MySQLDBName'] . ' DEFAULT CHARACTER SET latin1 COLLATE latin1_general_ci';
echo "<p>" . $requete . "</p>";
$pdo->prepare($requete)->execute();
}
echo "<h2>" . 'Les Bases de données' . "</h2>";
//PARAMETRES INTERBASE
$utilisateur_interbase = $_POST['FirebirdUser'];
$passe_interbase = $_POST['FirebirdPassword'];
$dsn_interbase = "firebird:dbname=" . $_POST['FirebirdHost'] . ":" . str_ireplace('\\', '\\\\', $_POST['FirebirdDBName']); //il faut doubler les \
$bdd_interbase = new PDO($dsn_interbase, $utilisateur_interbase, $passe_interbase);
//$bdd_interbase->exec("SET CHARACTER SET ISO8859_1");
echo "<h3>" . 'Firebird' . "</h3>";
echo "<p>" . $dsn_interbase . "</p>";
//PARAMETRES MYSQL
$utilisateur_mysql = $_POST['MySQLUser'];
$passe_mysql = $_POST['MySQLPassword'];
$dsn_mysql = 'mysql:host=' . $_POST['MySQLHost'] . ';dbname=' . $_POST['MySQLDBName'];
$bdd_mysql = new PDO($dsn_mysql, $utilisateur_mysql,$passe_mysql);
//$bdd_mysql->exec("SET CHARACTER SET latin1");
echo "<h3>" . 'MySQL' . "</h3>";
echo "<p>" . $dsn_mysql . "</p>";
//RAZ base MySQL
if ($_POST['MySQLNew'] == 'erase') {
echo "<h2>" . 'Supprimer toutes les tables MySQL' . "</h2>";
// lister les tables
$requete = 'SHOW TABLES FROM test1';
$statement = $bdd_mysql->prepare($requete, array(PDO::ATTR_CURSOR, PDO::CURSOR_FWDONLY));
$statement->execute();
$tables = $statement->fetchAll(PDO::FETCH_ASSOC );
echo "<p>" . count($tables) . ' Tables à traiter' . "</p>";
// virer chaque table
echo '<p>';
foreach($tables as $table){
$requete = 'DROP TABLE ' . $table['Tables_in_test1'];
echo $requete . '<br />';
$bdd_mysql->exec($requete);
}
echo '</p>';
}
//LISTE TABLES FIREBIRD
//liste les tables de la BDD
$requete = 'SELECT DISTINCT rdb$relation_name FROM rdb$relation_fields
WHERE rdb$view_context IS NULL
AND rdb$system_flag = 0'; //Injection de la requête permettant de récupérer les tables
$statement = $bdd_interbase->prepare($requete, array(PDO::ATTR_CURSOR, PDO::CURSOR_FWDONLY));
$statement->execute();
$tables = $statement->fetchAll(PDO::FETCH_ASSOC );
//traiter chaque table
echo "<h2>" . 'Creation des tables FIREBIRD dans la base MySQL' . "</h2>";
echo "<p>" . count($tables) . ' Tables à traiter' . "</p>";
foreach ($tables as $table) {
//traiter une table
echo "<h3>" . $table['RDB$RELATION_NAME'] . "</h3>";
//lire la structure de la table
$requete = 'SELECT rel_field.rdb$field_position, rel_field.rdb$field_name, field.RDB$FIELD_TYPE, field.RDB$FIELD_LENGTH, rel_field.RDB$NULL_FLAG
FROM rdb$relations rel
JOIN rdb$relation_fields rel_field
ON rel_field.rdb$relation_name = rel.rdb$relation_name
JOIN rdb$fields field
ON rel_field.rdb$field_source = field.rdb$field_name
WHERE rel.rdb$relation_name = \'' .$table['RDB$RELATION_NAME'] .'\'
ORDER BY rel_field.rdb$field_position, rel_field.rdb$field_name';
$statement = $bdd_interbase->prepare($requete, array(PDO::ATTR_CURSOR, PDO::CURSOR_FWDONLY));
$statement->execute();
$res_struc_table = $statement->fetchAll(PDO::FETCH_ASSOC);
//Construction de la requête de création de la table dans MySQL
$req_create_table = "CREATE TABLE `".trim($table['RDB$RELATION_NAME'])."` (";
$first = true;
//pour chaque champ
foreach ($res_struc_table as $field) {
$struct_champ = TypeChamp($field['RDB$FIELD_TYPE'] ,$field['RDB$FIELD_LENGTH']);
//si field 1 pas de virgule
if (!$first) {
$req_create_table .= " , ";
}
$first = false; //c'est plus le 1er champ
$req_create_table .= "`".trim($field['RDB$FIELD_NAME'])."` ".$struct_champ[0];
if ($struct_champ[1]) {
$req_create_table .= "(".$struct_champ[1].")";
}
if ($field['RDB$NULL_FLAG'] == 0) {
$req_create_table .= " NULL";
} else {
$req_create_table .= " NOT NULL";
}
}
$req_create_table .= ") ENGINE = MyISAM"; //clore instruction
echo '<p>';
print_r($req_create_table);
echo '</p>';
//créer la table dans MySQL
$bdd_mysql->exec($req_create_table);
}
//importer les données
if (isset($_POST['Import'])) {
echo "<h2>" . 'Import des données FIREBIRD dans la base MySQL' . "</h2>";
foreach ($tables as $table) {
echo "<h3>" . $table['RDB$RELATION_NAME'] . "</h3>";
//selections des données firebird
$requete = 'SELECT * FROM ' . $table['RDB$RELATION_NAME'];
$statement = $bdd_interbase->prepare($requete, array(PDO::ATTR_CURSOR, PDO::CURSOR_FWDONLY));
$statement->execute();
$data = $statement->fetchAll(PDO::FETCH_ASSOC );
echo '<p>' . count($data) . ' entrées' . '</p>';
//Construction de la requête d'insertion des données
foreach ($data as $row) { //chaque ligne de table
$req_insert = "INSERT INTO `" . trim($table['RDB$RELATION_NAME']) . "` SET ";
$first = true;
$key = key($row);
$val = current($row);
reset($row);
while(list ($key, $val) = each ($row)) //chaque champ
{
if (!$first) {
$req_insert .= " , ";
}
$first = false;//c'est plus le 1er champ
//Correction des valeurs texte
$val = str_replace("'","\'",$val);
//$val = utf8_decode($val);
$req_insert .= "`" . $key . "`='" . addslashes($val) . "'";
}
//insert LA ligne dans MySQL
$bdd_mysql->exec($req_insert);
}
}
}
//FIN
echo '<h1>' . 'Script executé !' . '</h1>';
$temps_fin = microtime(true);
echo '<p><strong>' . 'Temps d\'execution : '.round($temps_fin - $temps_debut, 0) . ' secondes' . '</strong></p>';
?>
</body>
</html>
<?php
#FONCTIONS
function TypeChamp ($champ,$taille) {
switch ($champ) {
case 7:
return array('SMALLINT',$taille);
break;
case 8:
return array('INT',$taille);
break;
case 16:
return array('BIGINT',$taille);
break;
case 10:
return array('FLOAT','');
break;
case 11:
//return 'D_Float';
return 'erreur';
break;
case 27:
return array('DOUBLE','');
break;
case 9:
//return 'Quad';
return 'erreur';
break;
case 14:
return array('CHAR',$taille);
break;
case 37:
return array('VARCHAR',$taille);
break;
case 40:
//return 'CString';
return 'erreur';
break;
case 13:
return array('TIME','');
break;
case 12:
return array('DATE','');
break;
case 35:
return array('TIMESTAMP','');
break;
case 261:
return array('BLOB','');
break;
}
}
#FIN FONCTIONS
?>
Historique
- 26 mai 2011 19:42:04 :
- Modifs mineures
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Astuce du jour #1: Comment configurer une erreur de la base de donné MySql [ par SmallToad ]
Quand vous avez de des erreurs de la base de donnée, êtes-vous déjà demander comment configurer le message d'erreur de la base de donnée MySql C'est
Convertir Access en MySQL - Help ! [ par iubito ]
Slt!G une base Access et pour m'entraîner sur MySQL je veux foutre le contenu de mes tables dans MySQL.J'arrive à créer des tables, entrer des données
connexions mysql multiples [ par eax ]
salutj'ai des pb avec des connexions multiples en mysql:je souhaite updater mes tables localhost <> sql.free.fr mais voilà, sur mon serveur apac
Retour à la ligne [ par philagui ]
Bonjour,je fais afficher tous les resultats d'un champ d'une DB MySQL par l'intermédiaire du script suivant:$sql="SELECT Titre FROM Tableaux WHERE 1";
Convertir un nombre en expression literrale en PL/SQL [ par ThReM ]
bonjour je cherche une source pour convertir un nombre en ce meme nombre mais ecris en toutes lettre (99 ==> quatre vingt dix neuf) en langage PL/S
*** où est lerreur ? [ par kodiask ]
$db = mysql_connect('******', '******', ''); mysql_select_db('*****',$db); $sql = 'SELECT nom,prenom FROM *****'; $req = mysql_query($sql) or die('Err
besoin d'aide pour cree encore des tablo [ par agentTMORT ]
je veut que lorsque une requete sql soit post& un tableau soit cree pour cette source voici mon codemysql_select_db('rockmagazine',$db) or die ("conne
conseil et pb en sql avec mysql [ par herveguedj ]
j'ai sur une page rech.php des liste pour le sexe sans bd et une liste qui liste les regions de ma table regionquand je fais une requete$sql="select
Erreur Mysql [ par FearBlue ]
Slt a tous!!!!jai une erreur mysql :je v vous montrer mon code c en rapport avec LIKEif(isset($HTTP_POST_VARS['recherche'])){$db = mysql_connect('loca
## Où est l'erreur ???? bon diou !! [ par kodiask ]
voila dite moi pourkoi lorsque je met le code la, il n'y a rien ki saffiche ? (c un système de citation aléatoire)mysql_select_db('cit_tbl',$db); $que
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
GOOGLE MAPGOOGLE MAP par fatmanajjar
Cliquez pour lire la suite par fatmanajjar
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|