PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile (précédentes versions) → [WDMobile21] - Requete HFSQL avec UNION et RAND
[WDMobile21] - Requete HFSQL avec UNION et RAND
Débuté par bgc42, 15 aoû. 2019 00:30 - 1 réponse
Membre enregistré
11 messages
Popularité : +1 (1 vote)
Posté le 15 août 2019 - 00:30
Bonjour à tous,

J'ai fraichement installé WinDev Mobile 21 et attaqué le développement d'une application. Je connais pas mal de langages, mais je redébute en WinDev, j'ai eu il y a une dizaine d'année une expérience avec un WinDev pour PC (probablement 12 - 14) dont j'ai très peu de souvenirs.

J'ai créé une base de données HFSQL classique, basée sur l'importation d'une base de données SQLite (ma config fait que mes drivers ODBC Excel et Access ne fonctionnent pas).

Je recherche un moyen de récupérer dans une base de données un nombre précis de ligne par thèmes.

Ma requête ressemble à :
SELECT Col1, Col2, Col3, RANDOM() AS idRow FROM Table WHERE idTheme=1 ORDER BY idRow LIMIT 5
UNION
SELECT Col1, Col2, Col3, RANDOM() AS idRow FROM Table WHERE idTheme=2 ORDER BY idRow LIMIT 10
UNION
SELECT Col1, Col2, Col3, RANDOM() AS idRow FROM Table WHERE idTheme=3 ORDER BY idRow LIMIT 3
...

Sauf que cette requête est dans un projet pour une application Android et qu'elle n'est pas reconnue.

J'ai regardé côté code, utiliser des vue et par exemple HFusionneVue pour mettre tous les résultats dans le même "tableau" de lignes. Mais cette instruction n'est pas disponible dans les app Android visiblement.

J'espère que les experts WinDevMobile parmis vous pourrons éclairer ma lanterne et m'aider à réaliser mon application.

Bonne soirée à tous !

--
Développeur C, C++, Java, C#, Python, Asm, Windev Mobile 21
Membre enregistré
11 messages
Popularité : +1 (1 vote)
Posté le 13 novembre 2019 - 12:04
Bonjour,

Pour ceux qui sont intéressé par la solution, j'ai trouvé mon bonheur en effectuant la requête en SQLite, via les fonctions HFSQL, et sans vérifications.

La requête ressemble à ça désormais :

sMaReq est une chaîne = [
SELECT id, vOrderId, champs1, champs2, champs3, champs4, champs5, champs6
FROM ( SELECT id, abs(random()) % 32768 AS vOrderId, champs1, champs2, champs3, champs4, champs5, champs6
FROM mesChamps
WHERE categorie="1"
ORDER BY vOrderId
LIMIT 5)
UNION ALL
SELECT id, vOrderId, champs1, champs2, champs3, champs4, champs5, champs6
FROM (SELECT id, abs(random()) % 32768 AS vOrderId, champs1, champs2, champs3, champs4, champs5, champs6
FROM mesChamps
WHERE categorie="2"
ORDER BY vOrderId
LIMIT 7)
UNION ALL
SELECT id, vOrderId, champs1, champs2, champs3, champs4, champs5, champs6
FROM (SELECT id, abs(random()) % 32768 AS vOrderId, champs1, champs2, champs3, champs4, champs5, champs6
FROM mesChamps
WHERE categorie="3"
ORDER BY vOrderId
LIMIT 9)
UNION ALL
SELECT id, vOrderId, champs1, champs2, champs3, champs4, champs5, champs6
FROM (SELECT id, abs(random()) % 32768 AS vOrderId, champs1, champs2, champs3, champs4, champs5, champs6
FROM mesChamps
WHERE categorie="4"
ORDER BY vOrderId
LIMIT 10)
UNION ALL
SELECT id, vOrderId, champs1, champs2, champs3, champs4, champs5, champs6
FROM (SELECT id, abs(random()) % 32768 AS vOrderId, champs1, champs2, champs3, champs4, champs5, champs6
FROM mesChamps
WHERE categorie="5"
ORDER BY vOrderId
LIMIT 3)
UNION ALL
SELECT id, vOrderId, champs1, champs2, champs3, champs4, champs5, champs6
FROM (SELECT id, abs(random()) % 32768 AS vOrderId, champs1, champs2, champs3, champs4, champs5, champs6
FROM mesChamps
WHERE categorie="6"
ORDER BY vOrderId
LIMIT 2)
UNION ALL
SELECT id, vOrderId, champs1, champs2, champs3, champs4, champs5, champs6
FROM (SELECT id, abs(random()) % 32768 AS vOrderId, champs1, champs2, champs3, champs4, champs5, champs6
FROM mesChamps
WHERE categorie="7"
ORDER BY vOrderId
LIMIT 6);
]

SI PAS HExécuteRequêteSQL(gsdRequete, SQLiteCnx, hRequêteSansCorrection, sMaReq) ALORS
Erreur(HErreurInfo())
gnRowCount = 0
SINON
gnRowCount = HNbEnr(gsdRequete)
FIN


Voilà,

Bonne journée à tous

--
Développeur C, C++, Java, C#, Python, Asm, Windev Mobile 21