Page 1 sur 1
[R] Autoit,sqlite et select where substr
Posté : lun. 13 oct. 2014 10:46
par aulus
Bonjour,
Ma base sqlite possède un champ "ladate" dont les valeurs sont sous la forme JJ MOIS AAAA, telle que "2 janvier 2014".
Je souhaiterais récupérer tous les enregistrements datés de l'année saisie par l'utilisateur dans un input.
J'ai essayé ce code :
Code : Tout sélectionner
_SQLite_Query($Base_SQLite, "SELECT * FROM matable WHERE SUBSTR(ladate,-4,4) = " & GUICtrlRead($inputAnnee), $hQuery )
Je n'obtiens rien. Où est l'incorrection ?
Je vous remercie de votre éclairage.
Re: [..] autoit,sqlite et select where substr
Posté : lun. 13 oct. 2014 11:02
par aulus
Mes multiples tâtonnements m'ont conduit à la solution (quotes de part et d'autre de GUICtrlRead($inputAnnee):
Code : Tout sélectionner
_SQLite_Query($Base_SQLite, "SELECT * FROM matable WHERE SUBSTR(ladate,-4,4) = '" & GUICtrlRead($inputAnnee) & "'" , $hQuery )
Re: [..] autoit,sqlite et select where substr
Posté : lun. 13 oct. 2014 11:04
par jchd
C'est un format à proscrire à tout prix. Tu tries comment par date avec un format pareil ?
Il y a deux formats de dates qui ne posent aucun problème : juliandate avec ou pas de partie fractionnaire et aaaa-mm-jj hh:mm:ss
On ne stocke que des formats manipulables facilement, quite à utiliser des fonctions internes ou externes pour la saisie et l'affichage.
Les litéraux chaîne en SQL doivent figurer entre sinples quotes.
Eviter _SQLite_Query et préférer _SQLite_GetTable2d et consort.
Code : Tout sélectionner
_SQLite_GetTable2d($hDB, "SELECT * FROM matable WHERE SUBSTR(ladate,-4,4) = '" & $annee & "'", $aRows, $iRows, $iCols)
Re: [..] autoit,sqlite et select where substr
Posté : lun. 13 oct. 2014 14:12
par aulus
Merci jchd pour ces conseils.
jchd a écrit :C'est un format à proscrire à tout prix. Tu tries comment par date avec un format pareil ?
Il y a deux formats de dates qui ne posent aucun problème : juliandate avec ou pas de partie fractionnaire et aaaa-mm-jj hh:mm:ss
On ne stocke que des formats manipulables facilement, quite à utiliser des fonctions internes ou externes pour la saisie et l'affichage.
J'en conviens. Toutefois j'ai fait ça parce que la saisie des données qui entreront dans la table MySql est faite par un grand nombre de personnes (une association) plus ou moins branchées informatique. Pour leur faciliter le travail, je leur demande d'entrer les données sous un banal éditeur de texte (NotaPad), et les dates de la manière la plus vulgaire possible. Ensuite ces personnes m'expédient leurs fichiers texte. Les données étant séparées par une virgule, je traite ces fichiers avec un petit programme AutoIt pour créer la base SQLite.
jchd a écrit :
Les litéraux chaîne en SQL doivent figurer entre sinples quotes.
Mes tâtonnements m'ont conduit à découvrir ce codage.
jchd a écrit :
Eviter _SQLite_Query et préférer _SQLite_GetTable2d et consort.
Code : Tout sélectionner
_SQLite_GetTable2d($hDB, "SELECT * FROM matable WHERE SUBSTR(ladate,-4,4) = '" & $annee & "'", $aRows, $iRows, $iCols)
Merci de me faire découvrir cette fonction. Toutefois, je l'ai testée mais je n'obtiens pas de résultats.
Re: [R] autoit,sqlite et select where substr
Posté : lun. 13 oct. 2014 15:11
par jchd
Code, pour voir !
Re: [R] autoit,sqlite et select where substr
Posté : lun. 13 oct. 2014 16:38
par aulus
Code : Tout sélectionner
Local $aRows, $iRows, $iCols
$Base_SQLite = _SQLite_Open($fichSql)
If @error > 0 Then Exit MsgBox(16, "Erreur", "La base ne peut être ouverte.")
_SQLite_GetTable2d($Base_SQLite, "SELECT * FROM matable WHERE SUBSTR(ladate,-4,4) = '" & $annee & "'", $aRows, $iRows, $iCols)
ReDim $Tablo[1]
$k = -1
While _SQLite_FetchData($hQuery, $aRows) = $SQLITE_OK & "'"
$k = $k + 1
ReDim $Tablo[UBound($Tablo) + 1]
$Tablo[$k] = $aRows[0] & "," & $aRows[1] & "," & $aRows[2] & "," & $aRows[3] & "," & $aRows[4]
WEnd
La variable $hQuery n'est plus un argument de la fonction _SQLite_GetTable2d, alors que _SQLite_FetchData la réclame... L'os est peut-être là...
Re: [R] autoit,sqlite et select where substr
Posté : lun. 13 oct. 2014 17:14
par jchd
_SQLite_GetTable2d fait tout et produit un tableau 2D avec les données, s'il y en a.
Mais en fait, tu sembles vouloir à la fin un tableau 1D avec les colonnes séparées par des virgules. Est-ce bien ça ?
Dans ce cas, utilise SQL à ton profit !
Code : Tout sélectionner
Local $aRows, $iRows, $iCols
$Base_SQLite = _SQLite_Open($fichSql)
If @error > 0 Then Exit MsgBox(16, "Erreur", "La base ne peut être ouverte.")
_SQLite_GetTable($Base_SQLite, "SELECT col1 || ',' || col2 || ',' || col3 || ',' || col4 || ',' || col5 AS titre FROM matable WHERE SUBSTR(ladate,-4,4) = '" & $annee & "'", $aRows, $iRows, $iCols)
_ArrayDisplay($aRows)
$aRows[0] contient le nombre de rangs + 1
$aRows[1] contient 'titre' puisque c'est le nom que j'ai donné à la colonne résultat
$aRows[2]... les rangées avec les colonnes séparées par des virgules.
Re: [R] autoit,sqlite et select where substr
Posté : lun. 13 oct. 2014 17:39
par aulus
Oui je veux un tableau 1 D dont chaque ligne contient des éléments séparés par des virgules. Ensuite par un StringSplit, et traitement des différentes valeurs, je remplis ma ListView. Je dois traiter les valeurs entrées, car pour rendre plus rapide la saisie des données dans le fichier texte (CSV), on entre beaucoup d'abréviations qu'il faut développer à l'affichage de la ListView.
Cette fonction _SQLite_GetTable est une découverte pour moi.
Grand merci jchd !