Bonjour à tous et à toutes,
Je souhaite qu'Actionaz communique avec une base de donnée SQL mais je suis confronté à un léger problème.
Je parviens à me connecter à ma base de donnée et à écrire dedans, mais dès lors que je souhaite y récupérer des données, cela ne fonctionne pas. Ou plutôt, cela ne fonctionne qu'à moitié.
La fonction fetchResult() me renvoie des valeurs vides ("") dans ce que je suppose être un tableau, mais en renvoie autant qu'il y a de valeurs à renvoyer.
Voici un exemple (parmi tant d'autres) de requête SQL que j'ai testé :
"SELECT data FROM bdd.user WHERE id = 1", où la BDD s'appelle "bdd", contient la table "user" et les colonnes "id" et "data".
Ma requête semble être formulée convenablement, et les données me sont d'ailleurs bien retournées si je passe par phpMyAdmin par exemple. S'agirait-il d'un bug?
Dans le cas contraire quel devrait être le format de ma requête SQL?
D'avance, merci.
[Résolu] Récupérer des données SQL
[Résolu] Récupérer des données SQL
Last edited by Aangrod on 19 Sep 2013, 10:24, edited 1 time in total.
Re: Récupérer des données SQL
C'est un bug, en fait le problème c'est que les données ne sont pas interprétées comme une chaîne de caractères mais comme des données brutes.
Une solution de contournement, exécuter ce bout de code au début du script :
Avec ce code tu devrais pouvoir afficher le résultat de la requête.
Une solution de contournement, exécuter ce bout de code au début du script :
Code: Select all
QByteArray.prototype.toString = function()
{
ts = new QTextStream(this, QIODevice.ReadOnly);
return ts.readAll();
}
"My software never has bugs. It just develops random features."
Re: Récupérer des données SQL
Mais non, ce n'est pas un bug. Ton logiciel a simplement développé une nouvelle caractéristique aléatoire
Et merci pour ta réponse rapide. Je viens d'essayer ta solution de contournement mais cela ne fonctionne toujours pas. Je mets le bout de code qui vient de me servir de test, au cas où je n'aurais pas compris ce qu'il fallait faire :
Et merci pour ta réponse rapide. Je viens d'essayer ta solution de contournement mais cela ne fonctionne toujours pas. Je mets le bout de code qui vient de me servir de test, au cas où je n'aurais pas compris ce qu'il fallait faire :
Code: Select all
QByteArray.prototype.toString = function()
{
ts = new QTextStream(this, QIODevice.ReadOnly);
return ts.readAll();
}
var SQL = new Sql(Sql.MySQL);
SQL.connect({
hostName : "127.0.0.1",
pot : "8888",
databaseName : "mysql",
userName : "root",
});
SQL.prepare("INSERT INTO bdd.user (id, data) VALUES(:id, :data)", {
id: 1,
data: "data"
});
SQL.execute();
SQL.execute("SELECT data FROM bdd.user WHERE id = 1");
var result = SQL.fetchResult();
SQL.disconnect();
Re: Récupérer des données SQL
Je pense que c'est port : "8888" plutôt que pot : "8888".
Ensuite j'ai l'impression que ça fonctionne mieux avec les index pour récupérer les résultats, je n'ai pas le temps de vérifier mais il me semble que c'est une limitation du pilote MySQL.
Du coup, fait plutôt ça :
Et ensuite tu peut récupérer le résultat avec :
Comme tu veux le résultat de la première colonne.
Ensuite j'ai l'impression que ça fonctionne mieux avec les index pour récupérer les résultats, je n'ai pas le temps de vérifier mais il me semble que c'est une limitation du pilote MySQL.
Du coup, fait plutôt ça :
Code: Select all
var result = SQL.fetchResult(Sql.IndexNumber);
Code: Select all
result[0]
"My software never has bugs. It just develops random features."
Re: Récupérer des données SQL
Merci beaucoup, en précisant le type d'indexation Sql.IndexNumber, la fonction fetchResult me renvoie désormais correctement le résultat de la requête SQL
Je précise que cela fonctionne même sans le morceau de code que tu m'avais fourni initialement.
Pour le port, c'est bien le port 8888 chez moi. Encore merci, je ne m'attendais pas à ce que mon problème soit résolu si rapidement.
Je précise que cela fonctionne même sans le morceau de code que tu m'avais fourni initialement.
Pour le port, c'est bien le port 8888 chez moi. Encore merci, je ne m'attendais pas à ce que mon problème soit résolu si rapidement.
Re: [Résolu] Récupérer des données SQL
Non je voulais dire que tu as écrit "pot" au lieu de "port" dans le code que tu m'as donné. Si le port n'est pas précisé alors c'est le port par défaut qui est utilisé, il me semble que c'est 8888 pour MySQL, c'est pour ça que ça marche quand même.Pour le port, c'est bien le port 8888 chez moi. Encore merci, je ne m'attendais pas à ce que mon problème soit résolu si rapidement.
"My software never has bugs. It just develops random features."
Re: [Résolu] Récupérer des données SQL
Ahah, je n'avais même pas remarqué. Bien vu.