Accueil > > > OBJETS JDBC
OBJETS JDBC
Information sur la source
Description
L'objet Database encapsule l'ensemble des objets nécessaires à la connexion à une base de données, et dispose de méthodes simples pour l'exécution de requêtes et l'accès aux métadonnées. L'objet DataSet (renvoyé par la méthode executeQuery de Database) encapsule un objet ResultSet et renvoie les données sous forme d'un tableau de valeurs. Il contient également des méthodes permettant d'accéder aux métadonnées du ResultSet.
Source
- //Classe Database
-
- import java.sql.*;
- import java.io.*;
- import java.util.*;
- import javax.swing.JOptionPane;
-
- public class Database {
- private
- Connection cnt;
- DataSet results;
- ResultSetMetaData rsmd;
- DatabaseMetaData dma;
- String[] types;
- String productName;
- String productVersion;
-
- public Database(String driver) {
- try{
- types = new String[1];
- types[0] = "TABLE";
- Class.forName(driver);
- }
- catch (Exception ex){
- JOptionPane.showMessageDialog(null, "Erreur lors du chargement du driver :"+ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
- }
- }
-
- public void open(String url, String username, String password) {
- try{
- cnt = DriverManager.getConnection(url, username, password);
- dma = cnt.getMetaData();
- productName = dma.getDatabaseProductName();
- productVersion = dma.getDatabaseProductVersion();
- results = new DataSet(dma.getCatalogs());
- String s[] = null;
- while(results.hasMoreElements()) {
- s = results.nextElement();
- }
- }
- catch (SQLException ex){
- JOptionPane.showMessageDialog(null, "Echec d'ouverture :"+ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
- }
- }
-
- public void close(){
- try{
- cnt.close();
- }
- catch (SQLException ex){
- JOptionPane.showMessageDialog(null, "Echec lors de la fermeture :"+ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
- }
- }
-
- public String[] getTableNames() {
- String[] tbnames = null;
- Vector tname = new Vector();
-
- try{
- results = new DataSet(dma.getTables(null, null, "%", types));
- while (results.hasMoreElements())
- tname.addElement(results.getColumnValue("TABLE_NAME"));
- }
- catch (SQLException ex){
- JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
- }
- tbnames = new String[tname.size()];
- for(int i=0;i<tname.size();i++)
- tbnames[i] = (String)tname.elementAt(i);
- return tbnames;
- }
-
- public String[] getTableMetaData() {
- results = null;
-
- try{
- results = new DataSet(dma.getTables(null, null, "%", types));
- }
- catch (SQLException ex){
- JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
- }
- return results.getMetaData();
- }
-
- public String[] getColumnMetaData(String tablename) {
- results = null;
-
- try{
- results = new DataSet(dma.getColumns(null, null, tablename, null));
- }
- catch (SQLException ex){
- JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
- }
- return results.getMetaData();
- }
-
- public String[] getColumnNames(String table) {
- String[] tbnames = null;
- Vector tname = new Vector();
-
- try{
- results = new DataSet(dma.getTables(null, null, table, null));
- while (results.hasMoreElements())
- tname.addElement(results.getColumnValue("COLUMN_NAME"));
- }
- catch (SQLException ex){
- JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
- }
- tbnames = new String[tname.size()];
- for(int i=0;i<tname.size();i++)
- tbnames[i] = (String)tname.elementAt(i);
- return tbnames;
- }
-
- public void getColumnValue(String table, String columnName) {
- try{
- if (table.length()>0)
- results = executeQuery("Select "+columnName+" from "+table+" order by "+columnName);
- }
- catch (Exception ex){
- JOptionPane.showMessageDialog(null, "Erreur sur la valeur de la colonne "+columnName+ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
- }
- }
-
- public String getNextValue(String columnName) {
- String res = "";
- try{
- if (results.hasMoreElements())
- res = results.getColumnValue(columnName);
- }
- catch (Exception ex){
- JOptionPane.showMessageDialog(null, "Erreur sur la valeur suivante "+columnName+ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
- }
- return res;
- }
-
- public DataSet executeQuery(String sql){
- results = null;
- try{
- Statement stmt = cnt.createStatement();
- results = new DataSet(stmt.executeQuery(sql));
- }
- catch (SQLException ex){
- JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
- }
- return results;
- }
-
- public void executeUpdate(String sql){
- try{
- Statement stmt = cnt.createStatement();
- stmt.executeUpdate(sql);
- }
- catch (SQLException ex){
- JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
- }
- }
-
- public String getProductName(){
- return productName;
- }
-
- public String getProductVersion(){
- return productVersion;
- }
- }
-
- //Classe DataSet
-
- import java.sql.*;
- import javax.swing.JOptionPane;
-
- public class DataSet {
- ResultSet results;
- ResultSetMetaData rsmd;
- int columnCount;
- String[] columnNames;
-
- public DataSet(ResultSet results){
- try {
- this.results = results;
- rsmd = results.getMetaData();
- columnCount = rsmd.getColumnCount();
- }
- catch (SQLException ex){
- JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
- }
- }
-
- public boolean hasMoreElements() {
- try{
- return results.next();
- }
- catch (SQLException ex){
- JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
- return false;
- }
- }
-
- public String[] getMetaData() {
- String[] s;
- s = new String[columnCount+1];
- try{
- results.next();
- for (int i=1; i<=columnCount; i++){
- s[i] = results.getString(i);
- }
- }
- catch (SQLException ex){
- JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
- }
- return s;
- }
-
- public String[] nextElement() {
- String[] line;
- line = new String[columnCount+1];
- try{
- for (int i = 1; i <= columnCount; i++){
- line[i] = results.getString(i);
- }
- }
- catch (SQLException ex){
- JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
- }
- return line;
- }
-
- public String getColumnValue(String columnName) {
- try{
- return results.getString(columnName);
- }
- catch (SQLException ex){
- JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
- return "";
- }
- }
-
- public int getColumnCount(){
- return columnCount;
- }
-
- public String getColumnName(int i) {
- try{
- return rsmd.getColumnName(i);
- }
- catch (SQLException ex){
- JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
- return "";
- }
- }
-
- public String getColumnLabel(int i) throws SQLException {
- try{
- return rsmd.getColumnLabel(i);
- }
- catch (SQLException ex){
- JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
- return "";
- }
- }
-
- public int getColumnDisplaySize(int i) throws SQLException {
- try{
- return rsmd.getColumnDisplaySize(i);
- }
- catch (SQLException ex){
- JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
- return 0;
- }
- }
-
- public int getColumnType(int i) throws SQLException{
- try{
- return rsmd.getColumnType(i);
- }
- catch (SQLException ex){
- JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
- return 0;
- }
- }
-
- public String getColumnTypeName(int i) throws SQLException{
- try{
- return rsmd.getColumnTypeName(i);
- }
- catch (SQLException ex){
- JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
- return "";
- }
- }
-
- public String getCatalogName(int i) throws SQLException{
- try{
- return rsmd.getCatalogName(i);
- }
- catch (SQLException ex){
- JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
- return "";
- }
- }
-
- public boolean isAutoIncrement(int i) throws SQLException{
- try{
- return rsmd.isAutoIncrement(i);
- }
- catch (SQLException ex){
- JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
- return false;
- }
- }
-
- public String getSchemaName(int i) throws SQLException{
- try{
- return rsmd.getSchemaName(i);
- }
- catch (SQLException ex){
- JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
- return "";
- }
- }
- }
-
-
//Classe Database
import java.sql.*;
import java.io.*;
import java.util.*;
import javax.swing.JOptionPane;
public class Database {
private
Connection cnt;
DataSet results;
ResultSetMetaData rsmd;
DatabaseMetaData dma;
String[] types;
String productName;
String productVersion;
public Database(String driver) {
try{
types = new String[1];
types[0] = "TABLE";
Class.forName(driver);
}
catch (Exception ex){
JOptionPane.showMessageDialog(null, "Erreur lors du chargement du driver :"+ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
}
}
public void open(String url, String username, String password) {
try{
cnt = DriverManager.getConnection(url, username, password);
dma = cnt.getMetaData();
productName = dma.getDatabaseProductName();
productVersion = dma.getDatabaseProductVersion();
results = new DataSet(dma.getCatalogs());
String s[] = null;
while(results.hasMoreElements()) {
s = results.nextElement();
}
}
catch (SQLException ex){
JOptionPane.showMessageDialog(null, "Echec d'ouverture :"+ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
}
}
public void close(){
try{
cnt.close();
}
catch (SQLException ex){
JOptionPane.showMessageDialog(null, "Echec lors de la fermeture :"+ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
}
}
public String[] getTableNames() {
String[] tbnames = null;
Vector tname = new Vector();
try{
results = new DataSet(dma.getTables(null, null, "%", types));
while (results.hasMoreElements())
tname.addElement(results.getColumnValue("TABLE_NAME"));
}
catch (SQLException ex){
JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
}
tbnames = new String[tname.size()];
for(int i=0;i<tname.size();i++)
tbnames[i] = (String)tname.elementAt(i);
return tbnames;
}
public String[] getTableMetaData() {
results = null;
try{
results = new DataSet(dma.getTables(null, null, "%", types));
}
catch (SQLException ex){
JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
}
return results.getMetaData();
}
public String[] getColumnMetaData(String tablename) {
results = null;
try{
results = new DataSet(dma.getColumns(null, null, tablename, null));
}
catch (SQLException ex){
JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
}
return results.getMetaData();
}
public String[] getColumnNames(String table) {
String[] tbnames = null;
Vector tname = new Vector();
try{
results = new DataSet(dma.getTables(null, null, table, null));
while (results.hasMoreElements())
tname.addElement(results.getColumnValue("COLUMN_NAME"));
}
catch (SQLException ex){
JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
}
tbnames = new String[tname.size()];
for(int i=0;i<tname.size();i++)
tbnames[i] = (String)tname.elementAt(i);
return tbnames;
}
public void getColumnValue(String table, String columnName) {
try{
if (table.length()>0)
results = executeQuery("Select "+columnName+" from "+table+" order by "+columnName);
}
catch (Exception ex){
JOptionPane.showMessageDialog(null, "Erreur sur la valeur de la colonne "+columnName+ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
}
}
public String getNextValue(String columnName) {
String res = "";
try{
if (results.hasMoreElements())
res = results.getColumnValue(columnName);
}
catch (Exception ex){
JOptionPane.showMessageDialog(null, "Erreur sur la valeur suivante "+columnName+ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
}
return res;
}
public DataSet executeQuery(String sql){
results = null;
try{
Statement stmt = cnt.createStatement();
results = new DataSet(stmt.executeQuery(sql));
}
catch (SQLException ex){
JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
}
return results;
}
public void executeUpdate(String sql){
try{
Statement stmt = cnt.createStatement();
stmt.executeUpdate(sql);
}
catch (SQLException ex){
JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
}
}
public String getProductName(){
return productName;
}
public String getProductVersion(){
return productVersion;
}
}
//Classe DataSet
import java.sql.*;
import javax.swing.JOptionPane;
public class DataSet {
ResultSet results;
ResultSetMetaData rsmd;
int columnCount;
String[] columnNames;
public DataSet(ResultSet results){
try {
this.results = results;
rsmd = results.getMetaData();
columnCount = rsmd.getColumnCount();
}
catch (SQLException ex){
JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
}
}
public boolean hasMoreElements() {
try{
return results.next();
}
catch (SQLException ex){
JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
return false;
}
}
public String[] getMetaData() {
String[] s;
s = new String[columnCount+1];
try{
results.next();
for (int i=1; i<=columnCount; i++){
s[i] = results.getString(i);
}
}
catch (SQLException ex){
JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
}
return s;
}
public String[] nextElement() {
String[] line;
line = new String[columnCount+1];
try{
for (int i = 1; i <= columnCount; i++){
line[i] = results.getString(i);
}
}
catch (SQLException ex){
JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
}
return line;
}
public String getColumnValue(String columnName) {
try{
return results.getString(columnName);
}
catch (SQLException ex){
JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
return "";
}
}
public int getColumnCount(){
return columnCount;
}
public String getColumnName(int i) {
try{
return rsmd.getColumnName(i);
}
catch (SQLException ex){
JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
return "";
}
}
public String getColumnLabel(int i) throws SQLException {
try{
return rsmd.getColumnLabel(i);
}
catch (SQLException ex){
JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
return "";
}
}
public int getColumnDisplaySize(int i) throws SQLException {
try{
return rsmd.getColumnDisplaySize(i);
}
catch (SQLException ex){
JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
return 0;
}
}
public int getColumnType(int i) throws SQLException{
try{
return rsmd.getColumnType(i);
}
catch (SQLException ex){
JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
return 0;
}
}
public String getColumnTypeName(int i) throws SQLException{
try{
return rsmd.getColumnTypeName(i);
}
catch (SQLException ex){
JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
return "";
}
}
public String getCatalogName(int i) throws SQLException{
try{
return rsmd.getCatalogName(i);
}
catch (SQLException ex){
JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
return "";
}
}
public boolean isAutoIncrement(int i) throws SQLException{
try{
return rsmd.isAutoIncrement(i);
}
catch (SQLException ex){
JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
return false;
}
}
public String getSchemaName(int i) throws SQLException{
try{
return rsmd.getSchemaName(i);
}
catch (SQLException ex){
JOptionPane.showMessageDialog(null, ex.getMessage(), "Exception SQL", JOptionPane.ERROR_MESSAGE);
return "";
}
}
}
Conclusion
Je me suis inspiré d'un code proposé sur le site www.commentcamarche.net que j'ai corrigé, complété et amélioré.
Je n'ai pas encore beaucoup testé ce code mais tout a l'air de fonctionner, à l'exception des méthodes qui renvoient les métadonnées, qui ne sont pas au point...
Exemple d'utilisation :
Database database = new Database("sun.jdbc.odbc.JdbcOdbcDriver"); database.open("jdbc:odbc:customers","",""); System.out.println(database.getProductName()+" "+database.getProductVersion());
DataSet data = database.executeQuery("select * from t_Customer");
database.getColumnMetaData("t_Customer");
String[] line = null; int i = 0 ;
if (data.hasMoreElements()) { i++ ; line = data.nextElement(); System.out.println(line[i]); }
database.close();
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
connexion à une base de données MySQL [ par malbackt ]
Bonjour;J'essaye depuis deux jous de me connecter à une base de données mysql mais je ne parvien toujours pas;mon code est le suivant:import
etablir une connexion a la base de données avec une applet [ par ghezella ]
salut; j'ai essayé d'établir une connexion a une base de données mysql sous une applet mais il m'affiche une erreur de connexion voici mon code: pac
Ouvrir une base des données MySQL en utilisant jpasswordfield en JAVA [ par Manyanya ]
Salut, J'utilise MySQL comme base des données. Dans sa gestion, j'ai défini des utilisateurs avec naturellment leur login et password respectifs. De
connection a une base de données oracle 10g express édition avec eclipse [ par bamoune ]
Slam alikom[^^happy13] je suis débutant en programmation et je vient d'établir ma première base de données avec oracle 10g express édition,j'ai devell
netbeans et connexion base de données mysql [ par afeftelecom ]
salut, comment on peut faire une connexion avec netbeans et une base de données Mysql? m'envoyer le code source ou les etapes de la configuration auto
connexion base données avec hiobernate et spring [ par hamzvb ]
Bonjour; je développe une application j2ee avec les frameworks(hibernate, spring, jsf et richfaces), et l'application est connecté a une base de donné
[clos] Connexion avec Base de Données [ par vengence09 ]
bonjour a tous je veux créer une interface graphique avec éclipse et cette interface lorsque je clic sur un bouton afficher j'aurai mon base de donné
Java Oracle_pools connexions [ par betty555 ]
Bonjour, J'ai une question à propos de la gestion de la connexion à une base de données oracle. Normalement, on doit pouvoir connecter plusieurs util
connection a une base de données ProgreSql [ par Consty25 ]
Salut a tous excuse moi mais je suis un debutant en JAVA et je ne sais pas comment Connecter mes JFrames a ma base de données j'utilise Netbeen comme
connection à une base de données distante [ par mouaddauom ]
salut, SVP, si quelqu'un peut me guider ; j'ai réalisé une application en java avec base de données mysql, et je dois l'installer sur deux ordinateurs
|
Derniers Blogs
[SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson
Forum
RE : CODE GéNéRé RE : CODE GéNéRé par am4sys
Cliquez pour lire la suite par am4sys RE : CODE GéNéRé RE : CODE GéNéRé par Julien39
Cliquez pour lire la suite par Julien39 CODE GéNéRé CODE GéNéRé par am4sys
Cliquez pour lire la suite par am4sys
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|