Page 1 sur 1
[R] Problème avec une requète SQLite
Posté : jeu. 28 nov. 2013 09:19
par vilsafur
Bonjour,
Depuis quelques jours, j'ai un problème avec mes requêtes SQLite, dès que j'insère un 'WHERE', la requête ne me retourne aucune valeur.
Voici les 3 fonctions utilisées à la suite :
Code : Tout sélectionner
_SQLite_Query($bdd, "SELECT * FROM VISITE WHERE Id = '" & $id & "';", $hQuery)
_SQLite_FetchData($hQuery, $aRow)
_SQLite_QueryFinalize($hQuery)
Si je fait un _arrayDisplay($aRow), ça me renvoie un tableau vide.
Avez-vous une idée ?
Merci d'avoir pris le temps de lire mon problème.
Cordialement
Re: [..] Problème avec une requète SQLite
Posté : jeu. 28 nov. 2013 10:09
par jchd
Etant donné que tu ne donnes aucun indice ni sur le schéma ni sur le contenu de la table, on n'est guère avancé !
Les meilleures boules de cristal doivent subir une maintenance et une calibration annuelles et il se trouve que la mienne est encore à l'atelier.
Néanmoins je me lance à te demander de tester la requête suivante :
Code : Tout sélectionner
Local $aRows, $nRows, $nCols
_SQLite_GetTable2d($bdd, "SELECT * FROM VISITE WHERE Id = " & $id & ";", $aRows, $nRows, $nCols)
_ArrayDisplay($aRows)
des fois que Id soit numérique...
Bannir les fonctions bas-niveau au profit de _SQLite_GetTable[2d] ou *_QuerySingleRow.
Re: [..] Problème avec une requète SQLite
Posté : jeu. 28 nov. 2013 12:30
par vilsafur
jchd a écrit :Etant donné que tu ne donnes aucun indice ni sur le schéma ni sur le contenu de la table, on n'est guère avancé
Excuse moi pour le manque d'information, je ne sais pas lesquels il vous faut.
Après meilleur analyse, il se figure que le where fonctionne pour cette requête mais pas pour une autre. désolé.
Voici la requête :
Code : Tout sélectionner
_SQLite_QuerySingleRow($bdd, 'SELECT * FROM ENTREPRISE WHERE CUSTOMER_KEY = '&$customKey&';', $aRow)
la table contient les champs suivants :
► Afficher le texte
- Customer_Key
- Client_Adresse 1
- Client_Adresse 2
- Client_Adresse 3
- Client_Adresse 4
- Client_Adresse 5
- Client_Code Postal
- Client_Groupe clients
- Client_Désignation Groupe clients
- Client_Ville Client
- Client_Département Client
- Client_Désignation Classe Client
- Client_Nom Client
- RP_ADV_Nom Client
- RP_CTC_Nom Client
- Client_Organisation commerciale Client
- Client_Téléphone
Aucun champs n'a de type définit.
$customKey retourne bien la custom Key demandée.
La requête que tu m'a demandée me retourne bien le nom des champs mais aucune valeur ensuite.
Re: [..] Problème avec une requète SQLite
Posté : jeu. 28 nov. 2013 17:11
par jchd
Code : Tout sélectionner
_SQLite_QuerySingleRow($bdd, "SELECT * FROM ENTREPRISE WHERE CUSTOMER_KEY = '" & $customKey & "';", $aRow)
Et je dirais même, au cas où $customKey puisse contenir une simple quote :
Code : Tout sélectionner
_SQLite_QuerySingleRow($bdd, "SELECT * FROM ENTREPRISE WHERE CUSTOMER_KEY = " & _SQLITE_FastEscape($customKey) & ";", $aRow)
Aucun champ n'a de type défini.
Mauvais choix : ça ouvre la voie à une foultitude de bogues tous plus impénétrables les uns que les autres.
Après meilleur analyse, il se figure que le where fonctionne pour cette requête mais pas pour une autre. désolé.
...
La requête que tu m'a demandée me retourne bien le nom des champs mais aucune valeur ensuite.
Bon, soyons clair comme du cristal : quelle requête ne fonctionne pas, du coup ?
Re: [..] Problème avec une requète SQLite
Posté : jeu. 28 nov. 2013 17:24
par mikell
Peut-être aussi
ça aiderait de savoir ce que contient exactement $customKey
Re: [..] Problème avec une requète SQLite
Posté : jeu. 28 nov. 2013 18:27
par jchd
Non mikell, je ne pense pas que la table contienne une colonne ayant pour nom la valeur de la variable $customKey et qu'il y ait un sens à ce que ces deux colonnes soient égales.
select * from matable where colA = [123];
Ici, 123 (ou toute autre valeur contenue dans la variable $customKey) sera évalué comme nom de colonne.
Re: [..] Problème avec une requète SQLite
Posté : jeu. 28 nov. 2013 19:17
par mikell
Ok je n'avais pas percuté sur le fait que cette syntaxe était réservée aux noms d'objets
Reste quand même que savoir ce que contient $customKey permettrait peut-être de comprendre pourquoi il obtient une erreur
Re: [..] Problème avec une requète SQLite
Posté : jeu. 28 nov. 2013 19:23
par jchd
++
Re: [..] Problème avec une requète SQLite
Posté : dim. 01 déc. 2013 11:15
par vilsafur
Merci pour vos réponses.
jchd a écrit :Code : Tout sélectionner
_SQLite_QuerySingleRow($bdd, "SELECT * FROM ENTREPRISE WHERE CUSTOMER_KEY = '" & $customKey & "';", $aRow)
Et je dirais même, au cas où $customKey puisse contenir une simple quote :
Code : Tout sélectionner
_SQLite_QuerySingleRow($bdd, "SELECT * FROM ENTREPRISE WHERE CUSTOMER_KEY = " & _SQLITE_FastEscape($customKey) & ";", $aRow)
J'ai déjà testé le code avec les simple quote, il ne me retourne également aucune valeur, je vais essayer avec le _SQLITE_FastEscape().
jchd a écrit :Aucun champ n'a de type défini.
Mauvais choix : ça ouvre la voie à une foultitude de bogues tous plus impénétrables les uns que les autres.
Entendu, je vais définir l'ensemble de mes champs dans ce cas, mais en définissant le champ Custom_Key en INT, l'erreur persistait.
Pour répondre à ta dernière question, c'est bien la requête _SQLITE_QuerySingleRow() qui ne fonctionne pas.
mikell a écrit :Reste quand même que savoir ce que contient $customKey permettrait peut-être de comprendre pourquoi il obtient une erreur
$customKey contient un identifiant unique, numérique sous la forme XXXXXX.
Re: [..] Problème avec une requète SQLite
Posté : dim. 01 déc. 2013 12:45
par mikell
Peut-être que c'est au remplissage des champs qu'il faudrait utiliser _SQLITE_FastEscape
► Afficher le texte
Code : Tout sélectionner
#include <SQLite.au3>
#include <SQLite.dll.au3>
#Include <Array.au3>
Local $aRow
_SQLite_Startup()
_SQLite_Open() ; open :memory: Database
_SQLite_Exec(-1, "CREATE TEMP TABLE settings ('key', 'value 1', 'value 2');")
$customKey = "123456"
$data = 'setting /one'
$adresse = "setting' two" ; <<<<
;_SQLite_Exec(-1, "INSERT INTO settings VALUES ('123456', 'setting /one', '" & $adresse & "');") ; marche pas
_SQLite_Exec(-1, "INSERT INTO settings VALUES ('" & _
$customKey & "', " & _
_SQLITE_FastEscape($data) & ", " & _
_SQLITE_FastEscape($adresse) & ");")
_SQLite_QuerySingleRow(-1, "SELECT * FROM settings WHERE key ='" & $customKey & "';", $aRow)
_ArrayDisplay($aRow)
_SQLite_Close()
_SQLite_Shutdown()
Re: [..] Problème avec une requète SQLite
Posté : dim. 01 déc. 2013 13:33
par jchd
Quite à me répéter, je préconise fortement, fermement, sévèrement, impérativement, brutalement l'emploi de SQLite Expert (la version gratuite fait déjà beaucoup de choses) pour débusquer les problèmes potentiels ou avérés.
Une fois la rangée problématique localisée, l'éditeur hexa permet de savoir ce que le champ contient en réalité.
Sinon, on peut ausi avoir à convertir le type de données précédemment enregistrées.
Par exemple : update maTable set maColonne = cast(maColonne as integer) where typeof(maColonne) = 'text';
Re: [..] Problème avec une requète SQLite
Posté : lun. 02 déc. 2013 10:30
par vilsafur
Problème résolu,
J'ai correctement ajouté les types de champs à la base et fait quelques essai grâce à SQLITE Expert.
@jchd : Je l'utilisait déjà, mais uniquement pour voir mes datas.
Merci à tous pour l'aide précieuse que vous m'avez apporté.
Cordialement