Lire sql select puis afficher la resultat sous forme d`excel [Résolu]

Signaler
Messages postés
10
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
28 septembre 2011
-
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
-
bonjours les amis ,
je fait une application en j# (visual studio 2005 ) qui sert a lire une requette sql (select) puis afficher la resultat sous forme excel
le code sql est ecrie par l`utilsateur dans le textbox

ceci la code :
conexion marche tres bien il menque l`execution de requette :



mport System.Collections.Generic.*;
import System.Data.*;
import System.Drawing.*;
import System.ComponentModel.*;
import System.Windows.Forms.*;
import java.sql.*;
import java.sql.SQLException;
import java.io.*;
import java.sql.*;
import java.util.*;
import java.lang.Integer;
/**
* Summary description for Form1.
*/


void select(String b)
{
String a = textBox2.get_Text();
a = "jdbc:odbc:" + a;

try
{
Connection c = getConnection(a);
Statement s = c.createStatement();
ResultSet r = null;
s.executeQuery(b);
r = s.getResultSet();
}
catch (SQLException e)
{
System.out.println("Erreur requête : " + e.getMessage());
}

}



void other(String b){
String a = textBox2.get_Text();
a = "jdbc:odbc:" + a;

try
{
Connection c = getConnection(a);
Statement s = c.createStatement();
ResultSet r = null;
s.executeUpdate(b);
r = s.getResultSet();
}
catch (SQLException e)
{
System.out.println("Erreur requête : " + e.getMessage());
}

}


public static Connection getConnection(String a)
{
Connection con = null;

String nDriver = "com.ms.jdbc.odbc.JdbcOdbcDriver";
try
{
Class.forName(nDriver).newInstance();
}
catch (Exception e)
{
MessageBox.Show("La classe " + nDriver + " n'a pas été trouvée");
e.printStackTrace();
}

try
{
String url = a;
String lg = "";
String pwd = "";
con = DriverManager.getConnection(url, lg, pwd);
MessageBox.Show("conexion etablie");
}
catch (java.sql.SQLException e)
{
MessageBox.Show("probleme de connexion");

}
return con;
}

private void button4_Click(Object sender, System.EventArgs e)throws SQLException,ClassNotFoundException
{

String c = textBox2.get_Text();
int i;
if (c.equals("")) MessageBox.Show("vous n`avez pas donner le nom de base de donne demmander") ;
else {

String b = textBox1.get_Text();

for(i =0 ; i<( b.length()-7);i++)

{ if (b.length()> 6 ) {if (b.Substring(i,6).equals("SELECT")) select(b);
if (b.Substring(i,6).equals("UPDATE")) other(b);
if( b.Substring(i,6).equals("DELETE")) other(b);
if (b.Substring(i,6).equals("INSERT" )) other(b);

}
else (MessageBox.Show("ereur"));

}}}


private void button4_Click_1(Object sender, System.EventArgs e)
{
Close();
}

16 réponses

Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
295
Si tu veux afficher le résultat avec excel, une solution simple (sans JExcelAPi) consiste à créer un fichier .csv (comme un fichier texte mais avec l'extension .csv). Les colonnes sont séparées par des ;

Tu pourras alors l'ouvrir facilement avec excel qui permet de lire ce type de contenu
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
295
Pour creer ton fichier csv, tu peux faire ceci :

   String separateur=";";
   String sautLigne="\n";
   ResultSet r = s.executeQuery(a);
   StringBuilder sb = new StringBuilder();
   while(r.next()){
      for(int i=0, i<r.getMetaData().getColumnCount()-1; i++){
         sb.append(r.get(i)).append(separateur);
      }
      sb.append(r.get(r.getMetaData().getColumnCount()-1)).append(sautLigne);
   }
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
295
Et apres, il te suffit d'écrire un fichier texte qui contient sb.toString() et de definir .csv comme extension.

Tu trouveras sur internet comment écrire un fichier texte.

Bon courage
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
295
Bonjour,

Oui, ca doit être possible, à la limite, tu peux exécuter une ligne de commande en bat qui ouvre le fichier excel, fais des recherches sur internet, et tu trouveras surement (je ne sais pas le faire).

si tu as des soucis, ouvre un nouveau sujet et il y aura surement quelqu'un pour te répondre.

Bon courage
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
295
Bonjour,

Quelle est ta question ? Tu ne sais pas comment relier ton application à une base de données. Tupeux chercher des tutoriels sur odbc, tu en trouveras beaucoup sur internet.
Messages postés
10
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
28 septembre 2011

nn je sais bien comment relier mon base de donne avec java , mais je sais pas comment exécuté une raquette écrit par l`utilisateur
svp lie bien mon message
Messages postés
10
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
28 septembre 2011

je veut aussi afficher le resultat sous forme d`axcel
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
295
Si tu exposais clairement ton problème, les réponses seraient plus pertinentes.

Regarde du côté d'odbc pour faire la connexion à ta base de données et de JExcelApi pour ce qui concerne Excel. Ces deux libraires sont bien documentées sur internet, tu n'auras pas de mal à comprendre leur fonctionnement.
Messages postés
10
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
28 septembre 2011

bonjours
est que je doit télécharger une bibliothèque qui s`appelle JExcelApi ??
la seul problème et de met mon resultat dans une fichier excel
svp est que tu peut me donne une tuto sur JExcelApi ou je peut le télécharger et comment je peut l`installer sur j# (visual studio 2005 )
svp j`un juste une semaine pour complété se travail
merci d`avance
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
295
Oui, il faut que tu telecharges JExcelApi et pour la doc, ouvres google, tu trouveras tout de suite par contre ce sera en anglais.
Messages postés
10
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
28 septembre 2011

merci julien est que tu peut me donne une code qui crée une fichier de l`extension .cv puis ecrire sur cette fichier la resultat de :

ResultSet r = s.executeQuery(a);



j`ai aussi un petite problème pour l`affichage de résultat dans la listebox1 puisque il return a la ligne dans chaque attribut par exemple :
nom = achraf
prenon = quell
nom = sami
prenom = aaaa
je veut que l`affichage sois comme ca :
nom prenom
achraf quell
sami aaaa

le code :

ResultSet r = s.executeQuery(a);
ResultSetMetaData metaData = r.getMetaData();
int nbCols = metaData.getColumnCount();
listBox1.get_Items().Clear();
listBox1.BeginUpdate();
while (r.next())
{for (i = 1; i <= nbCols; i++ )
{String nomCol = metaData.getColumnName(i);
listBox1.get_Items().Add("\t" + nomCol +" "+ r.getString(i) + ""+"\t");}
listBox1.EndUpdate();
Messages postés
10
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
28 septembre 2011

monsieur je te merci tres largement mais j`ai quelque probleme telque :
* .append(sautLigne); ne fonctionne pas
* r.get je le remplacer par getString()
il ya une faute lors d`execution de requette => je pense que le probleme dans writer.write(sb.toString());
svp monsieur fait avec mois + d`efforte et je vous remercie bien
rq : la conexion l`affichage dans le listebox marche tres bien mais je sais comment ecrire la resutat sb.toString() dans la fichier


try{
FileWriter writer = null;
try{writer = new FileWriter("fichier.txt", true);
Connection cx = getConnection(n, l, p);
Statement s = cx.createStatement();
ResultSet r = s.executeQuery(a);
ResultSetMetaData metaData = r.getMetaData();
int nbCols = metaData.getColumnCount();
StringBuilder sb = new StringBuilder(" ");
while (r.next())
{for (i = 1; i <= nbCols; i++)
{sb.Append(r.getString(i));
String nomCol = metaData.getColumnName(i); sb.Append(r.getString(r.getMetaData().getColumnCount()));
writer.write(sb.toString());
}

}
}catch (IOException ex)
{ex.printStackTrace();
}
}
catch (SQLException E)
{
MessageBox.Show("fause requette ");
}
Messages postés
10
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
28 septembre 2011

c`est mon dernier version tout sa marche 5 sur 5 mais je trouve une fichier vide :


Connection cx = getConnection(n, l, p);
Statement s = cx.createStatement();
ResultSet r = s.executeQuery(a);
ResultSetMetaData metaData = r.getMetaData();
int nbCols = metaData.getColumnCount();
FileWriter writer = null;
try
{
writer = new FileWriter("fichier.csv", true);

StringBuilder sb = new StringBuilder(" ");

while (r.next())
{
for(i=1; i<nbCols; i++)
{
sb.Append(r.getString(i)).Append(separateur);

}

sb.Append(r.getString(r.getMetaData().getColumnCount())).Append(sautLigne);


}


writer.write(sb.toString());
Messages postés
10
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
28 septembre 2011

j`ai terminer mon programme c`est grâce a toi
merci largement
seulement un dernier service est qu`il ya une commande qui affiche la fichier excel tout seul de que je registre l`information sur elle
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
295
Bonjour,

Alors ton fichier csv est enregistré si je comprends bien ?

Je ne comprends pas vraiment ta dernière question ?
Messages postés
10
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
28 septembre 2011

ui elle marche bien
mais je demande est qu`il ya une commande pour que la fichier .csv s`ouvre tout seule sans que l`utilisateur clique 2 fois sur elle