Problème table vide

Résolu
cs_himane Messages postés 56 Date d'inscription dimanche 27 mai 2007 Statut Membre Dernière intervention 23 février 2008 - 1 août 2007 à 13:13
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 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

17 réponses

chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
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.





<hr />

I LIKE TO BE HERE WHEN I CAN .


* Rolling   
3
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
1 août 2007 à 14:03
Pardon !

c' est :
ID_in = .Fields("ID_I").Value


pas la peine d' utiliser deux recordsets ,puisqu' il s' agit de la même table


<hr />

I LIKE TO BE HERE WHEN I CAN .


* Rolling   
3
lolokun Messages postés 1241 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 27 août 2013 7
1 août 2007 à 13:38
Salut,

Essaye plutot
RSTi.OpenRecordset("Select ID_I From Incident", cn, adOpenDynamic, adLockOptimistic)
0
cs_himane Messages postés 56 Date d'inscription dimanche 27 mai 2007 Statut Membre Dernière intervention 23 février 2008
1 août 2007 à 13:47
merci lolokun pour ta reponse


mais il y a quand j'ai copié ton code texto il m'indique une erreur de syntaxe 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_himane Messages postés 56 Date d'inscription dimanche 27 mai 2007 Statut Membre Dernière intervention 23 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 
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
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





<hr />

I LIKE TO BE HERE WHEN I CAN .


* Rolling   
0
cs_himane Messages postés 56 Date d'inscription dimanche 27 mai 2007 Statut Membre Dernière intervention 23 février 2008
1 août 2007 à 14:29
Merci beaucoup pour ton aide qui m'ai trés pécieux
je te souhaite bon courage
et à la prochaine.

"c'est en aidant les autres qu'on aide soi meme"
                                                             un philo
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
1 août 2007 à 14:42
la preuve qu' une autre erreur autre que celle de la table vide
peut survenir...


On Error Goto Err_1 'gerer une autre erreur quelconque
  .MoveLast
   ID_in = RSTi.Fields("ID_I").Value
End With


Message d' erreur : Objet ou bloc With non défini.


Ah ce Copier/Coller !


<hr />

I LIKE TO BE HERE WHEN I CAN .


* Rolling   
0
cs_himane Messages postés 56 Date d'inscription dimanche 27 mai 2007 Statut Membre Dernière intervention 23 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
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
1 août 2007 à 16:19
sur quelle ligne de code l' erreur survient ?

<hr />I LIKE TO BE HERE WHEN I CAN .

* Rolling   
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
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>
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
1 août 2007 à 16:30
généralement cette erreur survient après un Delete
C' est pourquoi toujours faire un mouvement :
rs.Delete
If Not rs.Eof Then rs.MoveNext

<hr />I LIKE TO BE HERE WHEN I CAN .

* Rolling   
0
cs_himane Messages postés 56 Date d'inscription dimanche 27 mai 2007 Statut Membre Dernière intervention 23 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.

et merci pour vous tous
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
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











<hr />

I LIKE TO BE HERE WHEN I CAN .


* Rolling   
0
cs_himane Messages postés 56 Date d'inscription dimanche 27 mai 2007 Statut Membre Dernière intervention 23 février 2008
1 août 2007 à 17:34
Ok je vais essayer ce code et je te repondrais 
Merci beaucoup
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
1 août 2007 à 19:15
retire la ligne : MsgBox Err.Description

_______________________________________________________________________
VB.NETis good ...VB6is better <f></f>
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
1 août 2007 à 21:04
>@hamine
d' après ton MP, tout ce qui suit doit disparaitre

<strike>Set RSTi = New ADODB.Recordset
RSTi.Open "Select ID_I From Incident", cn, adOpenDynamic, adLockOptimistic
adOpenDynamic, adLockOptimistic)

RSTi.MoveLast
ID_in = RSTi.Fields("ID_I").Value
RSTi.Close

</strike>tu n' en a plus besoin.
Tout le traitement va se résumer en
ID_n=Retour

et corriges par la même occasion
rst.Open "Select ID_I From Incident", cn, adOpenDynamic, adLockOptimistic
(toujours cette histoire de copier/coller)

>@ghuysmans
Pour le MsgBox Err.Description, il fait partie de la gestion d' erreur au niveau de la fonction.
ça renseigne sur la nature de l' erreur.

<hr />I LIKE TO BE HERE WHEN I CAN .

* Rolling   
0
Rejoignez-nous