Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Execution de requete TROP rapide

4 réponses
Avatar
Ataya
.=2E.ou bien exection d'une autre trop lente, c'est au choix!

Je m'explique,

En fait je travaille en local sur une BD access.

Disons que j'ai une premiere page qui contient elle meme une grille qui
contient une liste d'entreprises, appellons cette page frm_liste.
Une deuxieme page qui contient, les informations d=E9taill=E9es d'une
entreprise pr=E9cise: appellons cette page frm_entreprise.

En cliquant sur une ligne de la grillle de frm_liste, on ferme
frm_liste et on ouvre frm_entreprise

Frm_entreprise contient un bouton valider qui lance l'enregistrement
des donn=E9es de Frm_entreprise dans la base de donn=E9es, ferme
frm_entreprise et reouvre frm_liste.

J'espere avoir =E9t=E9 clair dans la description...

Entrons dans le detail des action qui suivent l'appui sur le bouton
valider:

_1/ Il lance l'enregistrement des donn=E9es dans la BD
_2/ Il ferme frm_entreprise
_3/ Il ouvre frm_liste
_4/ Il interroge la BD pour avoir de quoi alimenter la grille

Mon probleme est le suivant: les donn=E9e cr=E9es ou modifi=E9es =E0
l'=E9tape 1/ ne sont pas repercut=E9es lorsqu'il effectue l'=E9tape 4/.

Apres avoir cherch=E9, j'ai compris que c'=E9tait un probleme de
rapidit=E9 d'execution. En effet la 4/ semble beaucoup plus rapide que
la 1/, ainsi le resultat de la 4/ ne contient pas encore les resultats
de la 1/.

Comment j'en suis sur?
En fait j'ai ajout=E9 une =E9tape (d=E9bile mais efficace) entre l'=E9tape
1/ et 2/:
Cette =E9tape =E0 pour unique objectif de 'perdre' du temps avant de
passer =E0 l'=E9tape /2.

for(int i=3D0; i<400000000; i++){
int x=3D1;
}

Et l=E0 ca marche! ...mais c'est laid comme solution non?

Je reste donc en attente de vos propositions.

4 réponses

Avatar
Bruno CAUSSE
dans l'article , Ataya à
a écrit le 23/10/06 13:14 :

...ou bien exection d'une autre trop lente, c'est au choix!


Je m'explique,

En fait je travaille en local sur une BD access.

Disons que j'ai une premiere page qui contient elle meme une grille qui
contient une liste d'entreprises, appellons cette page frm_liste.
Une deuxieme page qui contient, les informations détaillées d'une
entreprise précise: appellons cette page frm_entreprise.

En cliquant sur une ligne de la grillle de frm_liste, on ferme
frm_liste et on ouvre frm_entreprise

Frm_entreprise contient un bouton valider qui lance l'enregistrement
des données de Frm_entreprise dans la base de données, ferme
frm_entreprise et reouvre frm_liste.

J'espere avoir été clair dans la description...

Entrons dans le detail des action qui suivent l'appui sur le bouton
valider:

_1/ Il lance l'enregistrement des données dans la BD
_2/ Il ferme frm_entreprise
_3/ Il ouvre frm_liste
_4/ Il interroge la BD pour avoir de quoi alimenter la grille

Mon probleme est le suivant: les donnée crées ou modifiées à
l'étape 1/ ne sont pas repercutées lorsqu'il effectue l'étape 4/.

Apres avoir cherché, j'ai compris que c'était un probleme de
rapidité d'execution. En effet la 4/ semble beaucoup plus rapide que
la 1/, ainsi le resultat de la 4/ ne contient pas encore les resultats
de la 1/.

Comment j'en suis sur?
En fait j'ai ajouté une étape (débile mais efficace) entre l'étape
1/ et 2/:
Cette étape à pour unique objectif de 'perdre' du temps avant de
passer à l'étape /2.

for(int i=0; i<400000000; i++){
int x=1;
}

Et là ca marche! ...mais c'est laid comme solution non?

Je reste donc en attente de vos propositions.



ne pas interroger la bd avant la fin de l'enregistrement :-)

Un simple probleme de synchronisation.

Avatar
Ataya
Oui en effet...dans ce cas comment savoir QUAND l'enregistrement est
terminé?
Avatar
TestMan
...ou bien exection d'une autre trop lente, c'est au choix!

Je m'explique,

En fait je travaille en local sur une BD access.

Disons que j'ai une premiere page qui contient elle meme une grille qui
contient une liste d'entreprises, appellons cette page frm_liste.
Une deuxieme page qui contient, les informations détaillées d'une
entreprise précise: appellons cette page frm_entreprise.

En cliquant sur une ligne de la grillle de frm_liste, on ferme
frm_liste et on ouvre frm_entreprise

Frm_entreprise contient un bouton valider qui lance l'enregistrement
des données de Frm_entreprise dans la base de données, ferme
frm_entreprise et reouvre frm_liste.

J'espere avoir été clair dans la description...

Entrons dans le detail des action qui suivent l'appui sur le bouton
valider:

_1/ Il lance l'enregistrement des données dans la BD
_2/ Il ferme frm_entreprise
_3/ Il ouvre frm_liste
_4/ Il interroge la BD pour avoir de quoi alimenter la grille

Mon probleme est le suivant: les donnée crées ou modifiées à
l'étape 1/ ne sont pas repercutées lorsqu'il effectue l'étape 4/.

Apres avoir cherché, j'ai compris que c'était un probleme de
rapidité d'execution. En effet la 4/ semble beaucoup plus rapide que
la 1/, ainsi le resultat de la 4/ ne contient pas encore les resultats
de la 1/.

Comment j'en suis sur?
En fait j'ai ajouté une étape (débile mais efficace) entre l'étape
1/ et 2/:
Cette étape à pour unique objectif de 'perdre' du temps avant de
passer à l'étape /2.

for(int i=0; i<400000000; i++){
int x=1;
}

Et là ca marche! ...mais c'est laid comme solution non?

Je reste donc en attente de vos propositions.



Pouvez vous postez un exemple de code concis démontrant la difficulté
rencontrez ?

A+
TM

Avatar
Ataya
Heu...je pensait avoir bien expliqué mon problème...

En fait ce n'est pas un probleme de code, c'est un probleme de vitesse
d'execution de requete.

A toutes fin utiles je joint le code qui interroge la BD pour la liste
d'entreprise:
DM correspond a une instance de l'objet DataManager (voir code ci
dessous)

public void remplissage(int col, String orderStatut){
// On vide avant de remplir
_modele.vidage();

mySql="SELECT * FROM Rqy_grid_Jf_Entreprise_ctc WHERE
IdEntreprise="+fMere.idEnt;

// le tri sur la colonne
switch(col){

case 1:
mySql+=" ORDER BY TypeContact.libelle";
break;
case 2:
mySql+=" ORDER BY IdPersonne";
break;

default:
mySql+=" ORDER BY IdPersonne";
break;
}
//l'ordre
mySql+=orderStatut;


//Ensuite on execute puis on remplis la grille
fMere.DM.open(); //Ouverture
ResultSet MyRes = fMere.DM.GetRs(mySql); //executuion du rs


try{
MyRes.first(); //Mise au depart du curseur
//Boucle de remplissage
while(MyRes.isAfterLast()=úlse){
ajouteLigne(MyRes.getString(1),MyRes.getString(2),
MyRes.getString(3));

MyRes.next();
}

}catch(SQLException sqle){
System.err.println("erreur d'execution : "+sqle);
}

fMere.DM.close(); //fermeture


et le code qui sauvegarde les données:
public void saveThis(){
String SQL="UPDATE Entreprise SET ";

SQL+="RaisonSociale='"+DM.absoluteString(txt_nomEnt.getText())+"'";
SQL+=", IdPays="+cmb_pays.getIndex();
SQL+=", IdTypeEntreprise="+cmb_type.getIndex();

if(txt_adr.getText().length()>0){
SQL+=", Adr='"+DM.absoluteString(txt_adr.getText())+"'";
}

if(txt_cp.getText().length()>0){
SQL+=", CP='"+DM.absoluteString(txt_cp.getText())+"'";
}

if(txt_ville.getText().length()>0){
SQL+=",
Ville='"+DM.absoluteString(txt_ville.getText())+"'";
}

if(txt_tel.getText().length()>0){
SQL+=", Tel='"+DM.absoluteString(txt_tel.getText())+"'";
}

if(txt_url.getText().length()>0){
SQL+=", Site='"+DM.absoluteString(txt_url.getText())+"'";
}

if(txt_mailG.getText().length()>0){
SQL+=",
EmailPrincipal='"+DM.absoluteString(txt_mailG.getText())+"'";
}

if(txt_mailRh.getText().length()>0){
SQL+=",
EmailRH='"+DM.absoluteString(txt_mailRh.getText())+"'";
}

if(txt_nbEmp.getText().length()>0){
SQL+=", NombreEmployes='"+txt_nbEmp.getText()+"'";
}

if(txt_com.getText().length()>0){
SQL+=",
Commentaire='"+DM.absoluteString(txt_com.getText())+"'";
}

SQL+=" WHERE id="+numEnt;
DM.execute(SQL);
//System.out.println("Sauvé");

}



Enfin l'objet datamanager:

public class DataManager {


/**
*
VARIABLES////////////////////////////////////////////////////////////

**/
private Statement st;
private ResultSet rec;
private String data;

/**
*
CONSTRUCTEUR/////////////////////////////////////////////////////////
**/
public DataManager(String NomDeOdbc){
data ="jdbc:odbc:"+NomDeOdbc;
//System.out.println("construction OK");
}

/**
*
METHODES/////////////////////////////////////////////////////////////
**/
public void open(){
//Le driver
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch(ClassNotFoundException e){
System.err.println("erreur driver : "+e);
}

//la connection
try{
Connection maCon = DriverManager.getConnection(data, "",
"");
st = maCon.createStatement(rec.TYPE_SCROLL_SENSITIVE,
rec.CONCUR_READ_ONLY);


}catch(SQLException sqle){
System.err.println("erreur conn : "+sqle);
}
//System.out.println("Open OK");
}


public void close(){
try{
st.close();
}catch(SQLException sqle){
System.err.println("erreur fermeture connexion : "+sqle);
}
//System.out.println("Close OK");
}

public void execute(String SQL){
open();
try{
System.out.println("la requete est: "+SQL);
st.executeUpdate(SQL);
}catch(SQLException sqle){
System.err.println("erreur d'execution : "+sqle);
}
close();

}


public ResultSet GetRs(String Sql){
//rec=null;//on s'assure d'avoir un rec vide
//open();
try{
System.out.println("la requete est: "+Sql);
rec = st.executeQuery(Sql);

}catch(SQLException sqle){
System.err.println("erreur d'execution : "+sqle);
}
//close();
return rec;
}

public String absoluteString(String S){
String resultat="";

for(int i=0; i<(S.length()); i++){
//int y="'";
if(S.charAt(i)=='''){
resultat+=''';//on double le caractère pour
echappement suos access
resultat+=S.charAt(i);

}else{
resultat+=S.charAt(i);
}
}

return resultat;
}