Erreur d'execution 94 avec MS VB ==> besoin aide requete SQL - VB/VBA/VBS - Programmation
Marsh Posté le 15-04-2003 à 20:58:50
ben en fait c'est clair
tu dois tester la valeur de retour qui est Null, genre en faisant:
Code :
|
parce que tu peux pas taper la valeur Null dans une variable d'un type autre que Variant, voilà
Marsh Posté le 15-04-2003 à 21:04:56
En fait si ta requête marche en SQL Server, c'est que tu as un problème dans l'interprétation de tes données retournées en VB. A ta place, je regarderais déjà que je pointe le bon field du recordset.
Petite remarque: je vois que tu fais une utilisation outrancière des propriétés par défaut. C'est mal car pas lisible et moins performant.
Tu devrais donc écrire: ChoixComm.TextComm(3).Text et RSCAComm!Resultat (ou RSCAComm.Fields("Resultat" ).Value)
Pour que la deuxième expression fonctionne, il faut nommer ton champ en ajoutant "as Resultat" juste après ton expression de total, tu ne courreras ainsi aucun risque d'erreur de pointer vers un mauvais champ. Donc:
Code :
|
D'autre part, les valeurs 2, 3 que tu passes en paramètre à la méthode Open ne sont pas parlantes, préfère les constantes qui sont beaucoup plus explicites et lisibles
Marsh Posté le 15-04-2003 à 21:06:30
OK ...
mais ca marche toujours pas ...
là il me trouve aucun resultat
alors que en faisant cette requête dans SQLserver il me met le bon résultat ...
c trop le bordel ...
tu vois ce que je veux dire ?
Marsh Posté le 15-04-2003 à 21:10:42
j'ai fais tte tes modifs mes tjrs rien ...
keske je peux faire pour que tu m'aides ?
Marsh Posté le 15-04-2003 à 21:12:13
Il est possible que ce soit la manière d'ouvrir ton recordset qui pose problème: remplace tes paramètres (2, 3) par (adOpenForwardOnly, adLockReadOnly) car ce sont les constantes les plus appropriées pour ce traitement précis. Je pense que le pointeur n'est simplement pas positionné sur le premier (et unique) enregistrement de ton recordset.
Marsh Posté le 15-04-2003 à 21:13:00
le truc que je comprend pas ...
c que en faisant la requete sous SQLserver ...
on trouve le bon résultat
mais impossible de la rapatrier dans cette **** de textbox
Marsh Posté le 15-04-2003 à 21:15:52
tjrs ke dal ...
ca marche pas ...
je precise kil ne fait plus l'erreur 94
ya moyen que je te send mon code pour que tu y jettes un oeil ?
Marsh Posté le 15-04-2003 à 21:17:34
Dans un programme du type query analyser, il te donne les données brutes et basta.
En VB, c'est une autre paire de manches. Il faut utiliser les types de curseur et lock les plus appropriés. C'est pour ça que je t'ai donné ces deux constantes: d'un côté tu n'as qu'un seul enregistrement, donc le forward only est mieux car tu ne dois même pas parcourir ton recordset, qui est positionné automatiquement sur le premier enregistrement (dans un autre cas, tu pourrais juste parcourir le recordset du premier au dernier puis fini). Ensuite, c'est une information non modifiable, le readonly est le mode de verrouillage qui convient le mieux puisque le plus léger.
Marsh Posté le 15-04-2003 à 21:18:26
c'est quoi l'erreur, et sur quelle ligne? Si ton code ne fait que quelques dizaines de lignes, tu peux balancer sur le forum
Marsh Posté le 15-04-2003 à 21:19:51
Code :
|
Marsh Posté le 15-04-2003 à 21:20:26
tout est la ...
avec mes potes ...
on galere depuis 16h30 sur cette erreur
Marsh Posté le 15-04-2003 à 21:21:27
drasche a écrit : c'est quoi l'erreur, et sur quelle ligne? Si ton code ne fait que quelques dizaines de lignes, tu peux balancer sur le forum |
la ya plus d'erreur
le seul hic c que ca nous affiche pas le resultat
Marsh Posté le 15-04-2003 à 21:23:19
t'as oublié de mentionner sur quelle ligne tombe l'erreur ainsi que le message
ah au fait, quand tu déclares plusieurs variables sur la même ligne, tu dois associer un type explicitement à chaque variable, sinon c'est considéré comme Variant, car seule la dernière sera du type voulu.
Marsh Posté le 15-04-2003 à 21:25:31
avec le forward only, tu peux virer les Recordset.MoveFirst, c'est déjà fait
Marsh Posté le 15-04-2003 à 21:25:45
drasche a écrit : t'as oublié de mentionner sur quelle ligne tombe l'erreur ainsi que le message |
ya pas d'erreur ...
Marsh Posté le 15-04-2003 à 21:30:44
des news ?
Marsh Posté le 15-04-2003 à 21:38:56
Pour la dernière fonction:
Soit tu sais que tu reçois un seul row et le code ressemblera à ceci:
Code :
|
soit t'en reçois plusieurs et ce sera
Code :
|
J'ai viré le test du Null parce que sur une fonction Sum, tu ne peux pas recevoir cette valeur. Au pire un zéro. Si tu recevais tout de même un Null, ce sera sans doute parce qu'il y a une erreur dans la requête SQL.
Edit: note qu'à chaque fois que tu voudras lancer cette fonction, il te faudra relancer le recordset car le forward only ne supporte pas le movefirst ou moveprevious.
Bon et là dessus
Marsh Posté le 15-04-2003 à 21:41:58
je recois un null ...
merci qd meme
c t tres cool de ta part
bonne nuit
Marsh Posté le 15-04-2003 à 21:43:47
drasche a écrit : ben en fait c'est clair
|
'' = '' en VB et Access, contrairement à Oracle ou s'est égal à NULL
Marsh Posté le 15-04-2003 à 21:49:13
Essaie :
Select isnull(sum(MONTANTHT),0) as Resultat from FACTURE F, CLIENT CL, COMMERCIAL CO where F.NUMCLIENT=CL.NUMCLIENT and CL.NUMCOMMERCIAL=CO.NUMCOMMERCIAL and NOMCOMMERCIAL='" & ChoixComm.ComboComm.Text + "'", CN, 2, 3
mais ça me semble bizarre.
Sinon, n'utilise JAMAIS
sql = "... '" & ChoixComm.ComboComm.Text + "' ..."
Mais :
function quote(str as string)
if isnull(str) then
quote = "''"
elseif len(str) = 0 then
quote = "''"
else
quote = "'" & replace(str, "'", "''" ) & "'"
end if
end function
sql = "... " & quote(ChoixComm.ComboComm.Text) + " ..."
Mais bon, ton problème doit pas venir de là à priori.
Marsh Posté le 15-04-2003 à 20:50:16
hello tt le monde
voici ma requete :
RSCAComm.Open "Select sum(MONTANTHT) from FACTURE F, CLIENT CL, COMMERCIAL CO where F.NUMCLIENT=CL.NUMCLIENT and CL.NUMCOMMERCIAL=CO.NUMCOMMERCIAL and NOMCOMMERCIAL='" & ChoixComm.ComboComm.Text + "'", CN, 2, 3
et je voudrais afficher le resultat ( donc la somme des montant HT dans cette textbox ) en faisant ca :
ChoixComm.TextComm(3) = RSCAComm(0)
choixComm est le nom de ma form
Textcomm(3) est le nom de ma textbox
RSCAComm est le nom de mon recordset
il me met comme erreur 94 : utilisation non autorisée de Null
je précise que la requête fonctionne sur SQL server t me renvoie le resultat correct ...
mais erreur ur VB
Besoin d'aide !
Merci d'avance
Message édité par Soluce le 15-04-2003 à 20:52:05
---------------
Elle est belle de loin, mais loin d'être belle ....