[R] Autoit,sqlite et select where substr

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

[R] Autoit,sqlite et select where substr

#1

Message 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.
Modifié en dernier par aulus le lun. 13 oct. 2014 11:03, modifié 1 fois.
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

Re: [..] autoit,sqlite et select where substr

#2

Message 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 )
 
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] autoit,sqlite et select where substr

#3

Message 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)
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

Re: [..] autoit,sqlite et select where substr

#4

Message 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.
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [R] autoit,sqlite et select where substr

#5

Message par jchd »

Code, pour voir !
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

Re: [R] autoit,sqlite et select where substr

#6

Message 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à...
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [R] autoit,sqlite et select where substr

#7

Message 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.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

Re: [R] autoit,sqlite et select where substr

#8

Message 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 !
Répondre