IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Transactions et paramètres


Sujet :

JavaScript

  1. #1
    Membre expérimenté Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Points : 1 414
    Points
    1 414
    Par défaut Transactions et paramètres
    Je mets les mains dans le cambouis HTML5 et je découvre mon incompétence en JS !!!

    J'ai plusieurs questions.
    Un bout du code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    function affiche(transaction, results) {  
    	for (var i=0; i<results.rows.length; i++) { 
    		var row = results.rows.item(i); 
    		string = string + row['untuple'] + '--' ; 
    	}
    }
     
     
    function read_Data(db){
    	db.transaction(
    		function (transaction) { 
    			transaction.executeSql("SELECT * from Install;", [], affiche, errorHandler); 
    		} 
    	);
    }
    1/ d'ou sort l'objet results qui apparaît en paramètre dans la fonction affiche()?

    2/ Comment pourrais-je passer un paramètre à read_Data(db, ID_Destination) pour que celui-ci puisse être exploité dans affiche().

    Merci

  2. #2
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    Par défaut
    Bonjour,

    Je suis un peu confus quand tu parles de HTML 5 avec des connexions à la BDD ; le code que tu présentes ici tourne côté serveur non ? ou bien tu as une librairie javascript qui encapsule des requetes SQL ?

    Pour répondre à tes questions :
    1/ l'objets results est fourni à affiche (de même que transaction) par la méthode executeSql de l'objet transaction : visiblement, la methode executeSql prend en 3ème parametre une fonction. C'est dans le code de executeSql qu'est appelée affiche avec au moins 2 paramètres.

    2/ Pour passer un paramètre supplémentaire, tu dois pouvoir passer par une fonction anonyme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    function affiche(transaction, results, tonParametre) {  
    	for (var i=0; i<results.rows.length; i++) { 
    		var row = results.rows.item(i); 
    		string = string + row['untuple'] + '--' ; 
    	}
    }
     
     
    function read_Data(db, tonParametre){
    	db.transaction(
    		function (transaction) { 
    			transaction.executeSql("SELECT * from Install;", [], function(transaction, results) {
                            affiche(transaction, results, tonParametre);
    }, errorHandler); 
    		} 
    	);
    }

  3. #3
    Membre expérimenté Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Points : 1 414
    Points
    1 414
    Par défaut
    Citation Envoyé par gwyohm Voir le message
    Bonjour,

    Je suis un peu confus quand tu parles de HTML 5 avec des connexions à la BDD ; le code que tu présentes ici tourne côté serveur non ? ou bien tu as une librairie javascript qui encapsule des requetes SQL ?
    non, non pas coté serveur, coté client, il s'agit de code qui fonctionne sur des navigateurs qui intègre WebKit. Je travail sur du travail 'offline'.
    Citation Envoyé par gwyohm Voir le message
    Pour répondre à tes questions :
    1/ l'objets results est fourni à affiche (de même que transaction) par la méthode executeSql de l'objet transaction : visiblement, la methode executeSql prend en 3ème parametre une fonction. C'est dans le code de executeSql qu'est appelée affiche avec au moins 2 paramètres.
    Donc si je comprends bien, result est un objet qui hérite de la class db ? peut être que je dis une grosse bétise
    Par contre, ce que je ne comprends toujours pas, c'est comment affiche() qui est un paramètre de la méthode executeSql() est fournit comme un simple paramètre et ensuite dans la déclaration de la fonction, elle se retrouve avec 2 paramètres ??

    Citation Envoyé par gwyohm Voir le message
    2/ Pour passer un paramètre supplémentaire, tu dois pouvoir passer par une fonction anonyme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    function affiche(transaction, results, tonParametre) {  
    	for (var i=0; i<results.rows.length; i++) { 
    		var row = results.rows.item(i); 
    		string = string + row['untuple'] + '--' ; 
    	}
    }
     
     
    function read_Data(db, tonParametre){
    	db.transaction(
    		function (transaction) { 
    			transaction.executeSql("SELECT * from Install;", [], function(transaction, results) {
                            affiche(transaction, results, tonParametre);
    }, errorHandler); 
    		} 
    	);
    }
    Pour ce code là, je vais essayer, réfléchir et je reviens te donner le résultat. Mais j'avoue être un peu perdu.

    --- Message éditer ---
    Je viens de faire le test, ta solution fonctionne. Je n'aimes pas ne pas comprendre pourquoi cela fonctionne sans que je maitrise pourquoi. Voilà ce qui me tracasse: dans ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    transaction.executeSql(SqlQuery, [], function(transaction, results) {
                            affiche(transaction, results, tonParametre);
    }, errorHandler);
    Tu redéfinis le 3eme paramètre de la fonction executeSql comme étant une fonction qui elle même appelle une fonction dont la déclaration est faite plus haut dans le code. Là pas de problème, j'ai appris qqchose (au passage merci).
    Mais là ou je ne comprends pas c'est comment dans le code source que j'ai fournit au départ nous avons affiche qui semble être un paramètre de type variable, mais qui est une fonction qui en plus prends 2 paramètres qu'on ne lui passe même pas ??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function affiche(transaction, results) {
    ....
    }
     
    ....transaction.executeSql(SqlQuery, [], affiche, errorHandler);

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Quand un paramètre ou une affectation de fonction ou de méthode attend une fonction, il s'attend à la référence à la fonction.
    Si tu lui passes des paramètres, dans ce cas, JavaScript interprète cela non pas comme une référence, mais comme le résultat de l'appel de cette fonction.
    A titre d'exemple, les gestionnaires d'événements de type onevent.
    onevent attend qu'on lui affecte une référence à une fonction, donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objet.onevent = ma_fonction;
    exécutera ma_fonction() au déclenchement de l'événement event sur objet, en revanche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objet.onevent = ma_fonction();
    affectera à l'événement event le résultat de l'exécution de ma_fonction au moment où ce gestionnaire est défini. C'est pour cela que pour passer des paramètres au callback, on est obligé de l'englober dans une fonction anonyme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objet.onevent = function(){ma_fonction(param)}
    dans ce cas, c'est bien la référence à la fonction anonyme qui est affecté.

  5. #5
    Membre expérimenté Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Points : 1 414
    Points
    1 414
    Par défaut
    Je crois que je comprends.

    Avez vous un bon bouquin JS à me recommander ou je pourrais approfondir tous ces sujets ?

    En tous cas merci à vous.

    A chaque pas que nous franchissons, cela nous permet de découvrir l'étendu de notre ignorance. Je ne sais plus qui à dit cela, mais je le constate chaque jour. Apprenons donc a rester modeste.

    ******************
    Question subsidiaire
    ******************
    Plutôt que d'utiliser la technique qui consiste à passer en paramètre l'ID de la destination à la fonction principale. Je pense qu'il serait préférable de retourner une variable ou un tableau (en cas de besoin) qui contient les résultats escomptés. Mais je ne sais pas quoi faire de 'string' pour que Query_Single_Data() puisse le retourner.

    En clair comment récupérer la valeur de retour de singleHandler() dans Query_Single_Data() ?

    Est-ce plus judicieux ?

    Voici le nouveau code que j'imagine:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    function singleHandler(transaction, results) { 
    	var string = "<b>"; 
    	for (var i=0; i<results.rows.length; i++) { 
    		var row = results.rows.item(i); 
    		string = string + row['Nom1']; 
    	} 
    	return string;
    }
     
    function Query_Single_Data(db, table){
    	db.transaction(
    		function (transaction) {
    			transaction.executeSql("SELECT * from " + table ';", [], singleHandler, errorHandler); 
    		} 
    	);
    return string; // c'est ici que le retour devrait se faire, mais comment récuper string ??
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Paramètres d'une transaction (CALL)
    Par Hiraa dans le forum SAP
    Réponses: 2
    Dernier message: 17/06/2011, 14h34
  2. [TRANSACT] Base de données comme paramètre d'un curseur
    Par |DUCATI| DesMo dans le forum Développement
    Réponses: 5
    Dernier message: 13/02/2009, 08h12
  3. Paramètres pour transaction
    Par looping dans le forum Bases de données
    Réponses: 3
    Dernier message: 11/09/2008, 18h37
  4. [SqlServer 2005] Transaction en paramètre
    Par tatou10 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 20/11/2007, 16h42
  5. [FireBird][Transaction] A quoi servent ces paramètres
    Par aityahia dans le forum Bases de données
    Réponses: 3
    Dernier message: 06/06/2007, 10h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo