J ai besoin d aide!!!! affichage requete qui ne marche pas!!!

Messages postés
31
Date d'inscription
vendredi 19 juillet 2002
Statut
Membre
Dernière intervention
25 novembre 2003
-
Messages postés
31
Date d'inscription
vendredi 19 juillet 2002
Statut
Membre
Dernière intervention
25 novembre 2003
-
J ai déjà envoyé 2 fois ma question sur le forum mais seulement 2 personne m ont répondus et mon probleme n est toujours pas réglé!!! Donc je relance ma question en espérant avoir plus de réponses cette fois ci!!

Je viens de faire une base de donnees ACCESS qui contient des noms de programme (elle marche tres bien, donc le probleme ne vient pas de là). Je passe maintenant a l etape de VB.
J ai un combo box(liste deroulante)qui s appele progname et qui doit afficher tous les noms de mes prog (PROG_NAME dans ma base de donnee ACCESS), j ai réussi en faisant :

Private Sub Form_Load()
Dim MaBase As Database
Dim MaTable As Recordset

Set MaBase = DBEngine.Workspaces(0).OpenDatabase("CUSTODATA (full)97.mdb")

Set MaTable = MaBase.OpenRecordset("Select prog_name from Program")

Do While MaTable.EOF = False
progname.AddItem MaTable!prog_name
MaTable.MoveNext
Loop
End Sub

Maintenant je dois afficher la description du prog (PROG_DESCRIP dans ma base de donnee) dans un TextBox(nom du textbox : progdescrip) en fonction du nom de prog que je choisit dans le combobox. J ai essaye de faire ceci en faisant :

Private Sub progname_Change()
Dim var As String
Dim MaBase As Database
Dim MaTable As Recordset
Set MaBase = DBEngine.Workspaces(0).OpenDatabase("CUSTODATA (full)97.mdb")var "select prog_descrip from program where prog_name '" & progname & "'"
Set MaTable = MaBase.OpenRecordset(var)
progdescrip(0).Text = MaTable.Fields("prog_descrip").Value
progdescrip(0).Refresh
End Sub

quand je lance mon appli il ne s affiche rien dans le textbox(progdescrip) alors q u il devrait s afficher la description du prog choisit dans le combobox (progname)

Je ne comprends pas comment faire, je pars peut etre dans une fausse direction en faisant ca.
Le probleme viendrait t il de mon code, ou alors que je me sers d un simple data?

Il faut ensuite que j' affiche le type du prog dans un listbox nommé progtype(0) toujours en fonction du prog choisit dans le combox. La methode est t elle identique à celle pour le textbox vu qu il ne s agit plus ici d un textbox mais d un listbox??? et meme question pour un checkbox nomme progcusto qui affiche avec une croix si le prog est customise ou non????
Toutes ces infos sont bien sur dans la meme table nommée PROGRAM

Desole mais j ai encore une autre question, je dois afficher aussi dans un listbox( prevprogname(0) ) les noms de prog precedent (PREV_PROG_NAME dans ma base de donnée) sachant que ce champs se trouve dans une autre table(PREVIOUS) que celle du nom du prog qui est choisit dans le combobox. (La relation dans ma base de données ACCESS entre les tables se fait par la cle primaire de la table PROGRAM (PROG_NAME) et les 2 clés primaire de la table PREVIOUS (PREV_PROG_NAME et PROG_NAME).
Bon je suis sure qu il ne s agit pas d une erreur dans ma base de donées car celle ci tourne parfaitement avec des formulaire dans ACCESS, l erreur vient donc de mon code ou du data que j utilise.
Bon desole pour ces questions longues mais j ai VRAIMENT BESOIN D AIDE car je bloque depuis 3 jours dessus (j ai cherché des infos sur des bouquins, sur les forums, mais j ai rien trouvé!).
Je vous remiercie d avance et attend au plus vite et avec impatience vos réponses! Merci encore

Laurent

14 réponses

Messages postés
35
Date d'inscription
mercredi 17 juillet 2002
Statut
Membre
Dernière intervention
31 juillet 2002

salut laurent,
As-tu déjà verifier en debugage si ta requete renvoyait bien un enregistrement,si tu ne sais pas comment debuger,il faut que tu places un point d'arret sur la ligne de ta requete, touche F9,puis lorsque tu t'arretes sur cette ligne, tu ecrits ? MaTable.Source pour voir ta requete,MaTable.RecordCount pour savoir si combien d'enregistrements tu retournes et si tu veux voir quel enregistrement ta requete retourne tu la copies et tu l'execute dans ta base.
si ta requete marche bien recrit et je t'enverrais la facon que j'utilise pour ouvrir un recordset et pour affecter une valeur a une listebox.
A+ audrey
Messages postés
31
Date d'inscription
vendredi 19 juillet 2002
Statut
Membre
Dernière intervention
25 novembre 2003

Merci pour ta réponse audrey, je viens de changer ma procedure progname_change() en progname_click(). Maintenant ca marche mais quand il n y rien dans le champs descrip de ma base de données il me fait une erreur : "Run-time error '94' : Invalid use of Null". Comment faire pour que ca marche normalement meme quand il n y a pas de valeur dans le champs descrip? et quelle est ta facon pour ouvrir un recordset et pour affecter une valeur a une listebox (et checkbox si tu sais aussi)? merci d avance!

Laurent
Messages postés
35
Date d'inscription
mercredi 17 juillet 2002
Statut
Membre
Dernière intervention
31 juillet 2002

Pour ouvrir un recordset je fais:
declaration d'une connection
dim ConnectoinBase as ADODB.Connection
dim rs as ADODB.recordset

Set ConnectionBase = New ADODB.Connection
set rs=new adodb.recordset
ConnectionBase.Open "Provider=MICROSOFT.JET.OLDB,Data Source="nom base de donnee".

with rs
.cursorlocation=aduseclient
.open "ta requete",connectionbase,adOpenForwardOnly,
adLockReadOnly
end with

'verification qu'il y a des enregistrement pour qu'il ne te donne pas ton message "vide"
if rs.recordcount<>0 then
'ton traitement
listbox.value=rs.fields("ton champ").value
end if
pour le checkbox ,si tu veux qu'il soit rempli tu mets
checkbox.value=1
sinon tu mets 0.
si ce n'etait pas la reponse que tu attendais precises ta demande.
A+ audrey.
Messages postés
31
Date d'inscription
vendredi 19 juillet 2002
Statut
Membre
Dernière intervention
25 novembre 2003

ok merci mais je vois pas comment l intégrer à mon appli. pourrai tu rajouter ce qu il manque à ce code pour qu il n y est plus d erreur de type "null" et rajouter le code pour afficher le resultat de la requete "select prog_type from program where prog_name = '" & progname & "'" dans une listebox(nommée progtype) et rajouter le code pour afficher dans un combobox(nommée progcusto) le résultat de la requete "select prog_custo from program where prog_name = '" & progname & "'"

Private Sub progname_Click()
Dim var As String
Dim MaBase As Database
Dim MaTable As Recordset

Set MaBase = DBEngine.Workspaces(0).OpenDatabase("CUSTODATA (full)97.mdb")
'Base.mdb=Ta base de données.
var "select prog_descrip from program where prog_name '" & progname & "'"

Set MaTable = MaBase.OpenRecordset(var)
progdescrip(0).Text = MaTable.Fields("prog_descrip").Value
progdescrip(0).Refresh

End Sub

J ai encore une autre question, désolé j en profite si tu sais comment faire! :)
Maintenant que ca m affiche la description, il y a un autre probleme dans l affichage du textbox : mon texte s affiche sur une seule ligne, c est a dire qu il faut que je selectionnne le texte et que je me déplace avec le curseur droit, sous acces une barre vertical de defilement se créée automatiquement, comment faire donc pour avoir une barre de défilement dans un textbox?? merci encore!!!


Laurent
Messages postés
35
Date d'inscription
mercredi 17 juillet 2002
Statut
Membre
Dernière intervention
31 juillet 2002

pour ton textbox je te conseil de mettre la propriete multiligne a true et tu pourras visualiser ton text sans faire defiler ta barre.

pour le code:
Private Sub progname_Click()
Dim var As String
Dim MaBase As Database
Dim MaTable As Recordset

Set MaBase = DBEngine.Workspaces(0).OpenDatabase("CUSTODATA (full)97.mdb")
'Base.mdb=Ta base de données.
var "select prog_descrip from program where prog_name '" & progname & "'"

Set MaTable = MaBase.OpenRecordset(var)
if rs.recordcount<>0 then 'tu as une reponse
progdescrip(0).Text = MaTable.Fields("prog_descrip").Value
progdescrip(0).Refresh
else
progdescrip(0).Text = ""
progdescrip(0).Refresh
end if

'pour ta combobox

'si tu veux te servir du meme recordset,ferme d'abord ton premier recordset.

MaTable.close

var="select prog_custo from program where prog_name = '" & progname & "'"

Set MaTable = MaBase.OpenRecordset(var)

'je crois que pour une listebox et une combobox les methodes sont les meme pour ce traitement.
With MaTable
if .recordcount<>0 then
While Not .EOF
progcusto.AddItem .Fields ("prog_custo").Value
.MoveNext
Wend
End if
end with

MaTable.close

'tu libere ton recordset
set MaTable=nothing

End Sub
j'espere que c'est ce que tu voulais si tu as encore des problemes n'hesites pas.
A+ audrey.
Messages postés
31
Date d'inscription
vendredi 19 juillet 2002
Statut
Membre
Dernière intervention
25 novembre 2003

encore merci audrey pour ton aide mais encore désolé mais il y a un probleme :
il me marque toujours lerreur de "type of null". je te marque le code comme il est ecrit exactement :

Private Sub progname_Click()
Dim var As String
Dim MaBase As Database
Dim MaTable As Recordset

Set MaBase = DBEngine.Workspaces(0).OpenDatabase("CUSTODATA (full)97.mdb")
var "select prog_descrip from program where prog_name '" & progname & "'"

Set MaTable = MaBase.OpenRecordset(var)
If MaTable.RecordCount <> 0 Then
progdescrip(0).Text = MaTable.Fields("prog_descrip").Value '(l erreur me renvoie à cette ligne)
progdescrip(0).Refresh
Else
progdescrip(0).Text = ""
progdescrip(0).Refresh
End If

Ensuite en ce qui concerne ma listbox et mon combobox j ai copier ce que tu m a ecrit mais ca marche pas, il fait une erreur 'run-time error '438' "Object doesn't support this property or method" et il me renvoie a la ligne progcusto.AddItem .Fields("prog_custo").Value
Voilà comment j ai mis dans la suite du code

MaTable.Close
var "select prog_custo from program where prog_name '" & progname & "'"

Set MaTable = MaBase.OpenRecordset(var)

With MaTable
If .RecordCount <> 0 Then
While Not .EOF
progcusto.AddItem .Fields("prog_custo").Value
.MoveNext
Wend
End If
End With

MaTable.Close

Set MaTable = Nothing

End Sub

Et ca ne marche pas, désolé de te poser autant de questions, je ne suis que debutant en VB
Merci encore audrey!
Messages postés
35
Date d'inscription
mercredi 17 juillet 2002
Statut
Membre
Dernière intervention
31 juillet 2002

Verifie dans ta base si tu autorise le champ null et vide sur ton champ "prog_descrip sinon moi j'utilise une fonction que j'ai creer (tu peux t'en servir meme si tu as autoriser les champs a vide ou null

Public Function NullToVide(vValue As Variant) As Variant

If IsNull(vValue) Then
NullToVide = ""
Else
NullToVide = vValue
End If
End Function

tu place nulltovide

progdescrip(0).Text = nulltovide(MaTable.Fields("prog_descrip").Value)

pour ta listbox et ta combobox essaye ca

with MaTable
if .recordcount>0 then
For i = 0 To .recordcount-1
progcusto.AddItem nulltovide(.fields ("prog_custo").value)
Next i
end if
end with

ou

with MaTable
if .recordcount>0 then
For i = 0 To .recordcount-1
progcusto.list(progcusto(i))= nulltovide(.fields ("prog_custo").value)
.movenext
Next i
end if
end with

je ne suis pas sure de la deuxieme solution mais je ne comprend pas pourquoi le code que je t'es envoye ne marche pas , je suis desole mais essaye ce que je t'envoie peut etre que ca marchera.

A+ audrey.
Messages postés
31
Date d'inscription
vendredi 19 juillet 2002
Statut
Membre
Dernière intervention
25 novembre 2003

Vraiment merci! tu m aides beaucoup et j apprecie vraiment, donc maintenant le textbox marche meme quand il n y a rien dedans, par contre je vais peut etre te decourager (enfin j espere pas) mais le listbox ne marche pas, ca me fait une erreur, je te copie exactement comment c est écrit dans mon code :

Public Function NullToVide(vValue As Variant) As Variant

If IsNull(vValue) Then
NullToVide = ""
Else
NullToVide = vValue
End If
End Function
__________________________________________

Private Sub progname_Click()
Dim var As String
Dim MaBase As Database
Dim MaTable As Recordset

Set MaBase = DBEngine.Workspaces(0).OpenDatabase("CUSTODATA (full)97.mdb")
var "select prog_descrip from program where prog_name '" & progname & "'"

Set MaTable = MaBase.OpenRecordset(var)
If MaTable.RecordCount <> 0 Then
progdescrip(0).Text = NullToVide(MaTable.Fields("prog_descrip").Value)
progdescrip(0).Refresh
Else
progdescrip(0).Text = ""
progdescrip(0).Refresh
End If

MaTable.Close
var "select prog_custo from program where prog_name '" & progname & "'"

Set MaTable = MaBase.OpenRecordset(var)

with MaTable
if .recordcount>0 then
For i = 0 To .recordcount-1
progcusto.AddItem nulltovide(.fields ("prog_custo").value)
Next i
end if
end with

End sub

Comme ceci il me fait une erreur "Run-time error '438' : Object doesn't support this property or method"

Ensuite la 2nde facon est :

Public Function NullToVide(vValue As Variant) As Variant

If IsNull(vValue) Then
NullToVide = ""
Else
NullToVide = vValue
End If
End Function
__________________________________________

Private Sub progname_Click()
Dim var As String
Dim MaBase As Database
Dim MaTable As Recordset

Set MaBase = DBEngine.Workspaces(0).OpenDatabase("CUSTODATA (full)97.mdb")
var "select prog_descrip from program where prog_name '" & progname & "'"

Set MaTable = MaBase.OpenRecordset(var)
If MaTable.RecordCount <> 0 Then
progdescrip(0).Text = NullToVide(MaTable.Fields("prog_descrip").Value)
progdescrip(0).Refresh
Else
progdescrip(0).Text = ""
progdescrip(0).Refresh
End If

MaTable.Close
var "select prog_custo from program where prog_name '" & progname & "'"

Set MaTable = MaBase.OpenRecordset(var)

With MaTable
If .RecordCount > 0 Then
For i = 0 To .RecordCount - 1
progcusto.List(progcusto(i)) = NullToVide(.Fields("prog_custo").Value)
.MoveNext
Next i
End If
End With

End sub

Ici il me marque Compile error : Wrong number of argument or invalid property assignment

Voilà donc ca ne marche pas. (L erreur ne viendrait t elle pas qu il manque quelque chose devant le point à la ligne If .RecordCount > 0 Then ?Non?)

Bon autrement j ai une autre question, dans mon combobox(liste deroulante) il y a tous les noms de mes prog, mais je n ai pas de saisie semie automatique, c est a dire que quand je tape une lettre au lieu de choisir dans liste il me sort celui qui est le plus près de la lettre que j ai tapé (ACCESS le fait automatiquement). y a t il un moyen sous VB de faire comme sous ACCESS une saisie semi automatique?
Désolé de t' harceler d autant de questions mais il n y a que toi qui prend la peine de me repondre, donc j en profite et je te remiercie car sans ton aide je n avancerais pas donc encore un grand merci audrey!

Laurent

--------------
Réponse au message :
-------------------------------

Verifie dans ta base si tu autorise le champ null et vide sur ton champ "prog_descrip sinon moi j'utilise une fonction que j'ai creer (tu peux t'en servir meme si tu as autoriser les champs a vide ou null

Public Function NullToVide(vValue As Variant) As Variant

If IsNull(vValue) Then
NullToVide = ""
Else
NullToVide = vValue
End If
End Function

tu place nulltovide

progdescrip(0).Text = nulltovide(MaTable.Fields("prog_descrip").Value)

pour ta listbox et ta combobox essaye ca

with MaTable
if .recordcount>0 then
For i = 0 To .recordcount-1
progcusto.AddItem nulltovide(.fields ("prog_custo").value)
Next i
end if
end with

ou

with MaTable
if .recordcount>0 then
For i = 0 To .recordcount-1
progcusto.list(progcusto(i))= nulltovide(.fields ("prog_custo").value)
.movenext
Next i
end if
end with

je ne suis pas sure de la deuxieme solution mais je ne comprend pas pourquoi le code que je t'es envoye ne marche pas , je suis desole mais essaye ce que je t'envoie peut etre que ca marchera.

A+ audrey.
Messages postés
35
Date d'inscription
mercredi 17 juillet 2002
Statut
Membre
Dernière intervention
31 juillet 2002

pour ton histoire de selection semi automatique je ne vois pas trop ce que tu veux,

autrement pour ta listBox si il s'agit bien d'une listBox, j'ai essaye le addItem et ca marche,
essaye de commencer ta boucle a 1 et de la finir a .Recordcount,
et met le resultat de ton recordset dans une
variable ca optimisera ton code
pour le if MaTable.recordcount>0 ou <>0 then c la meme chose, tu peux aussi tester sur le .eof(end of file)
si il est a false,c'est qu'il y a des enregistrements
si il est a true c que tu n'as plus d'enregistrement.

with MaTable
if .recordcount>0 then
For i = 1 To .recordcount
s=nulltovide(.fields ("prog_custo").value)
progcusto.AddItem s
.movenext 'pour passer a l'enregistrement suivant
Next i
end if
end with

j'espere que ca marchera car je ne sais plus quoi imagine .c tu bien debuger car ca pourrais t'aider de faire defiler tout ton code pour voir a quel moment et pourquoi il plente.
A+ audrey

PS : n'hesite surtout pas pour les conseils,je suis en fin de contrat et je n'est plus que ca a faire.
Messages postés
31
Date d'inscription
vendredi 19 juillet 2002
Statut
Membre
Dernière intervention
25 novembre 2003

Bon je te remiercie encore mais ca ne marche pas ou alors je comprends rien, je te copies comme est écrit mon code :
Public Function NullToVide(vValue As Variant) As Variant

If IsNull(vValue) Then
NullToVide = ""
Else
NullToVide = vValue
End If

End Function
__________________________________________

Private Sub progname_Click()
Dim var As String
Dim MaBase As Database
Dim MaTable As Recordset

Set MaBase = DBEngine.Workspaces(0).OpenDatabase("CUSTODATA (full)97.mdb")
var "select prog_descrip from program where prog_name '" & progname & "'"

Set MaTable = MaBase.OpenRecordset(var)
If MaTable.RecordCount <> 0 Then
progdescrip(0).Text = NullToVide(MaTable.Fields("prog_descrip").Value)
progdescrip(0).Refresh
Else
progdescrip(0).Text = ""
progdescrip(0).Refresh
End If

MaTable.Close
var "select prog_custo from program where prog_name '" & progname & "'"

Set MaTable = MaBase.OpenRecordset(var)

With MaTable
If .RecordCount > 0 Then
For i = 1 To .RecordCount
s = NullToVide(.Fields("prog_custo").Value)
progcusto.AddItem s
.MoveNext
Next i
End If
End With

Donc voilà mon code comme il est écrit mot à mot, pourrais tu si ca te déranges pas faire un copier coller du code pour qu il marche?
Au fait que fais tu comme boulot pour etre calée comme ça? ton contrat se fini quand'et tu habites vers ou?
Peux etre tu as une adresse mail ou je pourrai t envoyer mon appli ACCESS et VB, ce serait plus simple pour toi a comprendre ce que je cherche à faire, enfin bien sur si tu as une connexion assez rapide car ca fait presque 6Mo et surtout si tu en as envie! bon en tout cas je te remiercies et esperes avoir de tes news le + tot possible (demain j espere) merci encore!
Messages postés
35
Date d'inscription
mercredi 17 juillet 2002
Statut
Membre
Dernière intervention
31 juillet 2002

je suis analyste programmeur je viens de termine un contrat de qualif en BTS informatique de gestion a rennes et mon contrat se termine fin aout mais je suis en vacances a partir du 31 juillet

mon adresse email est :
troadec.audrey@caramail.com
Messages postés
31
Date d'inscription
vendredi 19 juillet 2002
Statut
Membre
Dernière intervention
25 novembre 2003

Bon tu as un mail sur ta boite caramail :)
Merci pour ton aide!

Laurent
Messages postés
35
Date d'inscription
mercredi 17 juillet 2002
Statut
Membre
Dernière intervention
31 juillet 2002

salut,
je n'est pas recut ton mail,verifie qu'il n'est pas trop gros pour que je puisse le recevoir.
A+ audrey.
Messages postés
31
Date d'inscription
vendredi 19 juillet 2002
Statut
Membre
Dernière intervention
25 novembre 2003

Oui j ai eu un retour de mail, mon fichier doit etre trop gros, je viens de te l envoyer en plusieurs parties (5 parties exactement).