Erreur d'execution 94 avec MS VB ==> besoin aide requete SQL

Erreur d'execution 94 avec MS VB ==> besoin aide requete SQL - VB/VBA/VBS - Programmation

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 ....
Reply

Marsh Posté le 15-04-2003 à 20:50:16   

Reply

Marsh Posté le 15-04-2003 à 20:58:50    

ben en fait c'est clair :D
 
tu dois tester la valeur de retour qui est Null, genre en faisant:

Code :
  1. If IsNull(RSCAComm(0)) Then
  2.     ChoixComm.TextComm(3) = ""
  3. Else
  4.     ChoixComm.TextComm(3) = RSCAComm(0)
  5. End If


 
parce que tu peux pas taper la valeur Null dans une variable d'un type autre que Variant, voilà ;)


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

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 :
  1. Select sum(MONTANTHT) as Resultat from ...


 
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 ;)


Message édité par drasche le 15-04-2003 à 21:06:48

---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

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 ... :pt1cable:  
 
c trop le bordel ...
 
tu vois ce que je veux dire ?


---------------
Elle est belle de loin, mais loin d'être belle ....
Reply

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 ?


---------------
Elle est belle de loin, mais loin d'être belle ....
Reply

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.


Message édité par drasche le 15-04-2003 à 21:12:51

---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

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


---------------
Elle est belle de loin, mais loin d'être belle ....
Reply

Marsh Posté le 15-04-2003 à 21:15:52    

tjrs ke dal ...
 
ca marche pas ...
je precise kil ne fait plus l'erreur 94  :love:  
 
ya moyen que je te send mon code pour que tu y jettes un oeil ?


---------------
Elle est belle de loin, mais loin d'être belle ....
Reply

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.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

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 [:banzai]


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 15-04-2003 à 21:18:26   

Reply

Marsh Posté le 15-04-2003 à 21:19:51    

Code :
  1. Public CN As Connection
  2. Public RSConc, RSComm, RSComm2, RSCAComm As Recordset
  3. Public temp As Double
  4. Public Sub InitConc()
  5.     Set CN = New Connection
  6.     CN.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Peunault\modif.MDB"
  7.     CN.Open
  8.     Set RSConc = New Recordset
  9.     RSConc.Open "Select * from CONCESSION C, SECTEUR_GEO S where C.NUMSECTEUR=S.NUMSECTEUR", CN, 2, 3
  10. End Sub
  11. Public Sub InitComm()
  12.     Set RSComm = New Recordset
  13.     RSComm.Open "Select distinct NOMCOMMERCIAL from COMMERCIAL CO, CONCESSION C where CO.NUMCONCESSION=C.NUMCONCESSION and C.NOMCONCESSION='" & ChoixConc.ComboConc.Text + "'", CN, 2, 3
  14.     Set RSComm2 = New Recordset
  15.     RSComm2.Open "Select * from CONCESSION C,COMMERCIAL CO,CLIENT CL,FACTURE F where C.NUMCONCESSION=CO.NUMCONCESSION and CO.NUMCOMMERCIAL=CL.NUMCOMMERCIAL and CL.NUMCLIENT=F.NUMCLIENT and C.NOMCONCESSION='" & ChoixConc.ComboConc.Text + "'", CN, 2, 3
  16.     Set RSCAComm = New Recordset
  17.     RSCAComm.Open "Select sum(MONTANTHT) 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, adOpenForwardOnly, adLockReadOnly
  18. End Sub
  19. Public Sub RempliComboConc()
  20.     ChoixConc.ComboConc.Clear
  21.     RSConc.MoveFirst
  22.     Do Until RSConc.EOF
  23.         ChoixConc.ComboConc.AddItem RSConc!NOMCONCESSION
  24.         RSConc.MoveNext
  25.     Loop
  26. End Sub
  27. Public Sub RemplicComboComm()
  28.     ChoixComm.ComboComm.Clear
  29.     RSComm.MoveFirst
  30.     Do Until RSComm.EOF
  31.         ChoixComm.ComboComm.AddItem RSComm!NOMCOMMERCIAL
  32.         RSComm.MoveNext
  33.     Loop
  34. End Sub
  35. Public Sub RempliInfosConc()
  36.     RSConc.MoveFirst
  37.     Do Until RSConc.EOF
  38.         If RSConc!NOMCONCESSION = ChoixConc.ComboConc.Text Then
  39.             Exit Do
  40.         End If
  41.         RSConc.MoveNext
  42.     Loop
  43.     ChoixConc.TextConc(0) = RSConc!NOMCONCESSION
  44.     ChoixConc.TextConc(1) = RSConc!LIBELSECTEUR
  45.     ChoixConc.TextConc(2) = RSConc!ADRESSECONCESSION
  46.     ChoixConc.TextConc(3) = RSConc!NOMDIRECTEUR
  47. End Sub
  48. Public Sub RempliInfosComm()
  49.     RSComm2.MoveFirst
  50.     Do Until RSComm2.EOF
  51.         If RSComm2!NOMCOMMERCIAL = ChoixComm.ComboComm.Text Then
  52.             Exit Do
  53.         End If
  54.         RSComm2.MoveNext
  55.     Loop
  56.     ChoixComm.TextComm(0) = RSComm2!NOMCOMMERCIAL
  57.     ChoixComm.TextComm(1) = RSComm2!PRENOMCOMMERCIAL
  58.     ChoixComm.TextComm(2) = RSComm2!PORTCOMMERCIAL
  59. End Sub
  60. Public Sub CalcCAComm()
  61. 'temp = 0
  62. '   RSCAComm.MoveFirst
  63.   '  Do Until RSCAComm.EOF
  64.    '     temp = temp + RSCAComm!MONTANTHT
  65.     '    RSCAComm.MoveNext
  66.     'Loop
  67. If IsNull(RSCAComm(0)) Then
  68.    ChoixComm.TextComm(3) = ""
  69. Else
  70.    ChoixComm.TextComm(3).Text = RSCAComm.Fields("Resultat" ).Value
  71. End If
  72. End Sub


---------------
Elle est belle de loin, mais loin d'être belle ....
Reply

Marsh Posté le 15-04-2003 à 21:20:26    

tout est la ...
 
avec mes potes ...
on galere depuis 16h30 sur cette erreur


---------------
Elle est belle de loin, mais loin d'être belle ....
Reply

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 [:banzai]


 
la ya plus d'erreur
le seul hic c que ca nous affiche pas le resultat


---------------
Elle est belle de loin, mais loin d'être belle ....
Reply

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.


Message édité par drasche le 15-04-2003 à 21:23:42

---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 15-04-2003 à 21:25:31    

avec le forward only, tu peux virer les Recordset.MoveFirst, c'est déjà fait ;)


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

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 ;)
 
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.


 
ya pas d'erreur ...


---------------
Elle est belle de loin, mais loin d'être belle ....
Reply

Marsh Posté le 15-04-2003 à 21:30:44    

des news ?  :ange:


---------------
Elle est belle de loin, mais loin d'être belle ....
Reply

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 :
  1. Public Sub CalcCAComm()
  2.   ChoixComm.TextComm(3).Text = RSCAComm!Resultat
  3. End Sub


 
soit t'en reçois plusieurs et ce sera

Code :
  1. Public Sub CalcCAComm()
  2.   temp = 0
  3.   Do While Not RSCAComm.EOF
  4.     temp = temp + RSCAComm!Resultat
  5.     RSCAComm.MoveNext
  6.   Loop
  7.   ChoixComm.TextComm(3).Text = temp
  8. End Sub


 
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 [:dodo] :hello:


Message édité par drasche le 15-04-2003 à 21:40:09

---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

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  :sleep:


---------------
Elle est belle de loin, mais loin d'être belle ....
Reply

Marsh Posté le 15-04-2003 à 21:43:47    

drasche a écrit :

ben en fait c'est clair :D
 
tu dois tester la valeur de retour qui est Null, genre en faisant:

Code :
  1. If IsNull(RSCAComm(0)) Then
  2.     ChoixComm.TextComm(3) = ""
  3. Else
  4.     ChoixComm.TextComm(3) = RSCAComm(0)
  5. End If


 
parce que tu peux pas taper la valeur Null dans une variable d'un type autre que Variant, voilà ;)


 
'' = '' en VB et Access, contrairement à Oracle ou s'est égal à NULL :)

Reply

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.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed