PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV Mobile (versiones precedentes) → [WDMobile21] - Requete HFSQL avec UNION et RAND
[WDMobile21] - Requete HFSQL avec UNION et RAND
Iniciado por bgc42, 15,ago. 2019 00:30 - 1 respuesta
Miembro registrado
11 mensajes
Popularité : +1 (1 vote)
Publicado el 15,agosto 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
Miembro registrado
11 mensajes
Popularité : +1 (1 vote)
Publicado el 13,noviembre 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