OVH Cloud OVH Cloud

Requette conditionée

10 réponses
Avatar
infomaroc
j'ai une table comme suit

Qté Prix
20 500
0 0
30 0

et je veux qu'à l'affichage je demande a la requette si la quantité <>0 et
prix=0 k'elle m'affiche le mot "ouv" dans prix, et comme ca j'aurrai ce
resultat

Qté Prix
20 500
0 0
30 Ouv
le grid d'affichage est lié a un recordset donc il faut k'une seule requete
me donne ce resultat, et je ne sais pas comment dire a l'interieur de select
si le prix =0 et qté<>0 , remplacer a valeur de prix par "ouv"

si qqun peut m'aider c trés urgent svp
merci bcp

10 réponses

Avatar
Jean-Marc
Hello,

ca va être très simple: on ne peut pas faire ça en SQL.
Qui plus est, "ouv" est un texte alorq ue Prix est un nombre
ce qui violerait l'intégrité des types du dbGrid.

Ce qu'on pourrait faire, c'est faire la première requete normalement
(Qté, prix), puis lire le recordset résultant record par record et
construire
une table temporaire vec 2 colonnes 'Qté' et 'PrixCalc' (de type texte);
on remplirait alors cette table en mettant dans la colonne PrixCalc le
prix si la qté est <>0 et "ouv" dans le cas contraire.

Il suffit alors d'utiliser cette table temporaire comme source pour le
dbGrid. Moche, mais ça marchera.

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;


"infomaroc" a écrit dans le message de
news:
j'ai une table comme suit

Qté Prix
20 500
0 0
30 0

et je veux qu'à l'affichage je demande a la requette si la quantité


<>0 et
prix=0 k'elle m'affiche le mot "ouv" dans prix, et comme ca j'aurrai


ce
resultat

Qté Prix
20 500
0 0
30 Ouv
le grid d'affichage est lié a un recordset donc il faut k'une seule


requete
me donne ce resultat, et je ne sais pas comment dire a l'interieur de


select
si le prix =0 et qté<>0 , remplacer a valeur de prix par "ouv"

si qqun peut m'aider c trés urgent svp
merci bcp






Avatar
infomaroc
bonsoir! merci ca a l'air de marcher car elle me donne le resultat , reste a
lier le grid avec la tableau ! j'ai une erreur!
voila le code ke j'ai
Dim rs As New Recordset
Dim rs2 As New Recordset
Dim tb(200, 200) As String

rs.Open "select f.Mne Val,Cloture Clôt,PTO,Ouverture Ouv,D_cours,QtéA,
Prix_acht,QtéV,Prix_vent Pvent ,SeuillH ,SeuillB from Flux f, limites
l,valeur v where l.Mne=f.Mne and f.Mne=v.Mnémonique and v.MC='C' and f.Dt='"
& Date & "' and l.datej='" & Date & "' and l.num='1' order by f.Mne", cn, 3
For j = 0 To rs.RecordCount - 1
For i = 0 To 12
If i <> 0 Then
If ((rs.Fields(i).Name = "Prix_acht" And rs(i) = 0 And rs(i - 1) <> 0)
Or (rs.Fields(i).Name = "Prix_vent" And rs(i) = 0 And rs(i - 1) <> 0)) Then
tb(j, i) = "Ouv"
MsgBox rs(0)
Else

tb(j, i) = IIf(IsNull(rs(i)), "", rs(i))
End If
Else
tb(j, 0) = rs(0)
End If
Next i
rs.MoveNext
Next j
Set db.DataSource = tb
db.Columns.RetrieveFields

a ce niveau " Set db.DataSource = tb", on me dit k'un objet est requis!
vous avez une idée?
Avatar
Jean-Marc
La démarche est bonne.
La construction de ton tableau (tb) est +/- ok dans le principe.

tu ne peux pas avoir un tableau comme datasource,
ce doit être une table ou un recordset, d'ou l'erreur.

Ce que tu dois faire, c'est :

- au lieu de remplir un tableau tb(), tu dois juste remplir
une table. Tu dois créer une table, ayant autant de champs qu'il
y en a dans ta requete SELECT et remplir cette table, exactement
comme tu remplis ton tableau, en faisant des Addnew.

tu vides la table temporaire
tu fais un recorset sur cette table temporaire
tu parcours comme tu le fais
au lieu de faire tb(i,j) = truc

tu fais (exemple)

rsTemp.Addnew
rsTemp.Fields(i) = rs(i)
rsTemp.Update

puis a lafin:

Set db.DataSource = rsTemp

Ne pas oublier de bien vider la table temporaire avant chaque
remplissage.

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;

"infomaroc" a écrit dans le message de
news:
bonsoir! merci ca a l'air de marcher car elle me donne le resultat ,


reste a
lier le grid avec la tableau ! j'ai une erreur!
voila le code ke j'ai
Dim rs As New Recordset
Dim rs2 As New Recordset
Dim tb(200, 200) As String

rs.Open "select f.Mne Val,Cloture Clôt,PTO,Ouverture Ouv,D_cours,QtéA,
Prix_acht,QtéV,Prix_vent Pvent ,SeuillH ,SeuillB from Flux f, limites
l,valeur v where l.Mne=f.Mne and f.Mne=v.Mnémonique and v.MC='C' and


f.Dt='"
& Date & "' and l.datej='" & Date & "' and l.num='1' order by f.Mne",


cn, 3
For j = 0 To rs.RecordCount - 1
For i = 0 To 12
If i <> 0 Then
If ((rs.Fields(i).Name = "Prix_acht" And rs(i) = 0 And rs(i - 1)


<> 0)
Or (rs.Fields(i).Name = "Prix_vent" And rs(i) = 0 And rs(i - 1) <> 0))


Then
tb(j, i) = "Ouv"
MsgBox rs(0)
Else

tb(j, i) = IIf(IsNull(rs(i)), "", rs(i))
End If
Else
tb(j, 0) = rs(0)
End If
Next i
rs.MoveNext
Next j
Set db.DataSource = tb
db.Columns.RetrieveFields

a ce niveau " Set db.DataSource = tb", on me dit k'un objet est


requis!
vous avez une idée?



Avatar
Jean-Marc
Je voulais dire bien sur:

NON PAS rsTemp.Fields(i) = rs(i)

MAIS rsTemp.Fields(i) = rs.fields(i)


--
Jean-marc
Avatar
infomaroc
merci bcp Jean-Marc
j'ai fait comme vous m'avez indiquer, ça marche impécablement:):)
a plus
Avatar
Jean-Marc
"infomaroc" a écrit dans le message de
news:
merci bcp Jean-Marc
j'ai fait comme vous m'avez indiquer, ça marche impécablement:):)
a plus



content d'avoir pu aider :-)

A+

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
infomaroc
A l"aideeeeeeeeeeee jean-marc :)
ton idée marche bien, mais au fait cette application jl'installe sur des
poste client et elle se connecte a un serveur sql pr les données, donc la
creation de table temporaire se fait sur le serveur, et puisque j'ai plusieur
client il se peut ke le premier cree la table et aprés la suprime en mm temps
ke le deuxieme essaie d'extraire ses données! cki mdonne erreur!
la table doit etre créer localment ou bien la creer sans k'elle soit
phisikement sur le serveur!
jsais pas cmt :s:s:s
les postes client ne contiennent rien, ni excel ni accées donc cmt proceder?
si vous avez une idée venez a mon secours, jdois finir ca lplus tot
possible pr une démo devant mon client
merci
Avatar
Jean-Marc
hello,

essaie de créer dynamiquement ta table avec un nom unique à chaque fois,
en concaténant la date et l'heure par exemple.

le programme doit donc faire:

1/ calculer un nom
nomTemporaire = "TABLETEMP" & date & time
2/ remplir cette table
3/ s'en servir
4/ détruire cette table.

Ainsi, 2 clients ne créeront jamais la même table, et chacun
s'occupe dans l'odre de créer, utiliser, détruire.

C'est juste une idée comme ça, mais ca doit le faire je pense.

bonne prog !
--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;

"infomaroc" a écrit dans le message de
news:
A l"aideeeeeeeeeeee jean-marc :)
ton idée marche bien, mais au fait cette application jl'installe sur


des
poste client et elle se connecte a un serveur sql pr les données, donc


la
creation de table temporaire se fait sur le serveur, et puisque j'ai


plusieur
client il se peut ke le premier cree la table et aprés la suprime en


mm temps
ke le deuxieme essaie d'extraire ses données! cki mdonne erreur!
la table doit etre créer localment ou bien la creer sans k'elle soit
phisikement sur le serveur!
jsais pas cmt :s:s:s
les postes client ne contiennent rien, ni excel ni accées donc cmt


proceder?
si vous avez une idée venez a mon secours, jdois finir ca lplus tot
possible pr une démo devant mon client
merci



Avatar
infomaroc
merci bcp
le nom de la table sera par exemple tmp& referenceClient
cme ca j'aurrai auttant de tables ke mes clients! j'evite les dates et times
pr ne pas avoir trop de tables temporaires! car cke je fais c detruire si
existance et aprés creer, et non pas creer et detruire!
merxci bcp, vous me donnez des diées :):)
a plus avec d'autres problemes :):):):)
Avatar
infomaroc
j'ai oublié! j'aimerai vous poser un autre ptit probleme!
j'ai une table ou il y'a des dates:
06/12/2005
12/12/2005
si je fais le tri par date desc ca mdonne
12/12/2005
06/12/2005
juske la c ok!
mais si j'ai
06/12/2005
12/12/2005
03/01/2006
et ke je fasse le tri desc, je n'ai pas le resultat 03/01/2006
ca vous dis qqchose?
merci