Gambas France BETA


Pas de compte ? Incription

SQL et SQlite3

Ce sujet est résolu.

1
AuteurMessages
valaquarus#1 Posté le 26/9/2021 à 16:03:39
-- Unus Ex Altera --Bonjour à tous,

savez vous comment faire pour que la fonction mathématique LOG10 ou même LOG soit reconnu par une requête SQL avec une base de données SQLite3?
J'ai systématiquement une erreur comme quoi la fonction Log (ou LOG10) n'est pas reconnue:
Query failed : nos such function : log10

Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
jeanyvon#2 Posté le 27/9/2021 à 13:15:24
Gambas? Ma! Et gustoSalut!
Je n'ai pas trouvé de fonction 'log' dans ma base de données des fonctions SQL
ça existe peut être mais pas chez moi...
Vieillir? On peut retarder mais pas y échapper!
valaquarus#3 Posté le 27/9/2021 à 16:39:16
-- Unus Ex Altera --Merci jeanyvon,
voici un lien :SQL et fonctions mathématiques
Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
jeanyvon#4 Posté le 30/9/2021 à 06:45:05
Gambas? Ma! Et gustoHi!
J'ai essayé : Même message d'erreur que toi.....
question : ne faut-il pas un moteur sqlite plus performant pour ce genre de fonction?
Vieillir? On peut retarder mais pas y échapper!
valaquarus#5 Posté le 30/9/2021 à 09:00:53
-- Unus Ex Altera --Bonjour jeanyvon,
sur le site du lien il parle des fonctions mathématiques qui ne seraient pas, par défaut, activées. Il faudrait lancer une macro pour le faire mais je ne sais pas faire.
Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
valaquarus#6 Posté le 30/9/2021 à 12:55:58
-- Unus Ex Altera --Rebonjour,
voici ce qu'on nous dit :
The math functions shown below are part of the SQLite amalgamation source file but are only active if the amalgamation is compiled using the -DSQLITE_ENABLE_MATH_FUNCTIONS compile-time option.

Mais moi pas ténor ni cador ni médor ni ...
Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
spheris#7 Posté le 30/9/2021 à 20:54:06
Valaquarus,
N'est-il pas possible que tu le gères autrement?

Réalise l'opération mathématique LOG10 sous GB puis stocke ton résultat dans ta bdd.
Tu peux même ajouter un champs String dans ta bdd qui détaille l'opération réalisée et pourquoi ce résultat.
;-)
valaquarus#8 Posté le 1/10/2021 à 11:32:25
-- Unus Ex Altera --Bonjour sphéris,
j'y ai déjà pensé mais j'ai un souci car il s'agit d'un champ calculé à partir d'autres champs de la base que je peux pas stocké (car la base est déjà bien assez conséquente) dans la base et mon souci est de faire un tri sur ce champ calculé.
Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
valaquarus#9 Posté le 1/10/2021 à 12:06:25
-- Unus Ex Altera --
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
PUBLIC SUB GridView1_ColumnClick(Column AS INTEGER)

DIM Values, ValueSorted AS NEW String[]
DIM Nx, iNx AS INTEGER
DIM ordre AS STRING = " ORDER BY "

IF db.Current.Opened = FALSE THEN
db.Current.Open
ENDIF
triEncours = "SELECT * FROM hautparleur" & ordre

SELECT CASE Column
CASE 16 'eff 'ne fonctionne ne reconnait pas LOG ni LN ni LOG10 sur ma machine SQlite3
IF monTri = "10 * Log10((fr * fr * fr * (1.18 * 344 * 344 / ((2 * 3.1416 * fr) * (2 * 3.1416 * fr) * (mms / (sd * sd)))) * 0.00000096 * 100 / (qm / ((qm / qt) - 1))) / 0.065 ) + 80 " THEN
triEnCours = triEnCours & monTri & " DESC"
monTri = ""
FMain.leTri = "EFF DESC"
ELSE
monTri = "10 * Log10((fr * fr * fr * (1.18 * 344 * 344 / ((2 * 3.1416 * fr) * (2 * 3.1416 * fr) * (mms / (sd * sd)))) * 0.00000096 * 100 / (qm / ((qm / qt) - 1))) / 0.065)+ 80"
triEnCours = triEnCours & monTri & " ASC"
FMain.leTri = "EFF ASC"
END IF

CASE 17 'rend
IF monTri = "fr * fr *fr * (1.18 * 344 *344 / ((2 * 3.1416 * fr) * (2 * 3.1416 * fr)* (mms / (sd * sd)))) * 0.00000096 * 100 / (qm / ((qm / qt) - 1))" THEN
triEnCours = triEnCours & monTri & " DESC"
monTri = ""
FMain.leTri = "Rend DESC"
ELSE
monTri = "fr * fr *fr * (1.18 * 344 *344 / ((2 * 3.1416 * fr) * (2 * 3.1416 * fr)* (mms / (sd*sd)))) * 0.00000096 * 100 / (qm / ((qm / qt) - 1))"
triEnCours = triEnCours & monTri & " ASC"
FMain.leTri = "Rend ASC"
END IF

le case 16 est celui qui ne fonctionne pas en renvoyant l'erreur énoncée plus haut. Où l'on voit que d'autres fonctions mathématiques ne fonctionnent pas comme les carrés, les cubes ce qui obligent à les contourner.
J'ai un autre souci avec ces tris, comme ils s'effectuent sur du texte pour la machine 1.111 ou 11.11 c'est kif kif et là je ne sais pas être plus intelligent que ça.

Philippe



Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
Patrick#10 Posté le 4/10/2021 à 06:57:53
Bonjour,
Pour les fonctions mathématiques je ne sais pas mais pour les tris tu peux forcer le type des données avec la fonction CAST() : https://sql.sh/fonctions/cast
valaquarus#11 Posté le 4/10/2021 à 17:20:47
-- Unus Ex Altera --Bonsoir et merci patrick,
pour cette fonction qui me parait bien pratique et que je vais tenter d'utiliser à bon escient.
Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
1