cs_himane
Messages postés56Date d'inscriptiondimanche 27 mai 2007StatutMembreDernière intervention23 février 2008
-
1 août 2007 à 13:13
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 2007
-
1 août 2007 à 21:04
salut tout le monde
je travail sur un projet VB6
je veux savoir si ma table est vide ou non
si oui initialiser une variable à 0
sinon selectioner le dernier enregistrement
j'ai essayé ce code mais il ne marche pas
rs.Open "Select * From Incident", cn, adOpenDynamic, adLockOptimistic
If (rs.RecordCount = 0) Then
MsgBox "Table/requête vide"
ID_in = 0
Else
Set RSTi = New ADODB.Recordset
RSTi.Open "Select ID_I From Incident", cn, adOpenDynamic, adLockOptimistic
Text1.Text = RSTi.RecordCount
RSTi.MoveLast
ID_in = RSTi.Fields("ID_I").Value
RSTi.Close
rs.Close
End If
quand je vide ma table il ne fait pas le test du if il va tout droit au else pour me declarer l'erreur
au niveau du RSTi.MoveLast q'il bien entendu ne le trouvera pas vu que la table est vide
SVP aidez moi ça fait deux jours que je cherche la solution
Merci d'avance
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 1 août 2007 à 13:53
Bonjour ,
si ceci te convient ::
ID_in = 0
rs.Open "Select * From Incident", cn, adOpenDynamic, adLockOptimistic
With rs
On Error Resume Next 'ignorer l' erreur table vide
.MoveLast
.MoveFirst
If .Bof And .Eof Then Goto Sortie ' table vide
On Error Goto Err_1 'gerer une erreur quelconque
.MoveLast
ID_in = RSTi.Fields("ID_I").Value
End With
Sortie:
rs.Close
Exit Sub
Err_1:
MsgBox Err.Description
End Sub
Ainsi ta variable est soit 0 soit égale au dernier.
cs_himane
Messages postés56Date d'inscriptiondimanche 27 mai 2007StatutMembreDernière intervention23 février 2008 1 août 2007 à 14:10
salut
merci chaibat05 pour ta reponse mais...
STP STP STP .Est ce que tu peux commenter un peu ton code pour que je puisse l'integrer dans l'apllication vu que je suis un peu débutante dans la matière et j'ai presque rien compris!!!!
Bon j'ai essayé tout de méme mais ça n'a pas marché
et merci beaucoup beaucoup
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 1 août 2007 à 14:26
on remet ça !
'tu initialises ta variable
ID_in = 0
'tu ouvres un recordset
rs.Open "Select * From Incident", cn, adOpenDynamic, adLockOptimistic
'tu peux aussi faire
rs.Open "Select ID_I From Incident", cn, adOpenDynamic, adLockOptimistic
'pour n' avoir que le champ ID_I
With rs
On Error Resume Next
'ignorer l' erreur table vide,
'car si ta table vide MoveFirst et MoveLast provoquent une erreur
'c' est pourqui on l' ignore dans un premier temps.
.MoveLast
.MoveFirst
'après on vérifie si la table est bien vide même après avoir rempli le recordset
If .Bof And .Eof Then Goto Sortie ' table vide
'
'au lieu de Sortie tu peux aussi faire Exit Sub et quitter la procédure
'car si ta table est bien vide, tu sautes la partie de code avant cette etiquette
'
'réinitialiser le gestionnaire des erreurs
On Error Goto Err_1 'gerer une autre erreur quelconque
.MoveLast
ID_in = RSTi.Fields("ID_I").Value
End With
Sortie:
rs.Close
Exit Sub
Err_1:
MsgBox Err.Description
End Sub
cs_himane
Messages postés56Date d'inscriptiondimanche 27 mai 2007StatutMembreDernière intervention23 février 2008 1 août 2007 à 15:48
resalut
bon ta solution a bien marché sauf qu'1 msg d'erreur apparait sans aucune raison surtout que les données sont enregistré à merveil dans la base de donnée
Voila le msg:
"BOF ou EOF est égale à true ou l'enregistrement actuel a été supprimé.l'opération demandée nécessite un enregistrement actuel."
je te remercie pour ta reponse
cs_ghuysmans99
Messages postés3982Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 201316 1 août 2007 à 16:27
Dim
rs As ADODB.Recordset 'objet résultats
Dim SQL As String 'requête sql
SQL = "SELECT ID_I FROM Incident;" 'le ; est facultatif ...
Set rs = Conn.execute(SQL) '[Conn] êtant l'objet connexion
On Error Resume Next 'on ignore les erreurs
rs.MoveLast
Err.Clear 'si il y a une erreur, on fait comme si il n'y en avait pas eu ...
On Error GoTo 0 'on ignore PLUS les erreurs
If rs.EOF Then
MsgBox "Rien!"
Else
MsgBox "ID_I = " & rs("ID_I"), vbInformation
End If
Set rs = Nothing ,
----
By Renfield
voilà ...
_______________________________________________________________________
VB.NETis good ...VB6is better <f></f>
cs_himane
Messages postés56Date d'inscriptiondimanche 27 mai 2007StatutMembreDernière intervention23 février 2008 1 août 2007 à 16:55
salut
l'erreur vient sous forme de msgbox et juste apré y a le msg qui m'indique que l'enregistrement est bien fait
et j'ignore pourquoi il y a cette erreure d'aprés le code de chaibat05
je vais essayer d'ignorer comme a dit ghuysmans99 mais j'ai du mal a ignorer une erreur et la trainer dans mon code au lieu de la resoudre et c'est pas du tout gentille.
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 1 août 2007 à 17:30
essaies de transformer le code qu' on t' a mis
en fonction.Ainsi tu le sépares du reste du traitement?
pour qu' il n' y est pas d' ambiguité au niveau des rs.
Function Retour() As Integer
Retour= 0
Dim rst As ADODB.Recordset 'objet résultats
'si cn n' est pas public tu dois la declarer
rs.Open "Select ID_I From Incident", cn, adOpenDynamic, adLockOptimistic
With rst
On Error Resume Next
.MoveLast
.MoveFirst
If .Bof And .Eof Then
MsgBox "Table vide"
.Close
Exit Function
End if
On Error Goto Err_1
.MoveLast
Retour = .Fields("ID_I")
.Close
End With
Exit Function
Err_1:
MsgBox Err.Description
End Function
Dans ta procedure appelles ta fonction
ID_n=Retour