Base de données vide

[Résolu]
Signaler
Messages postés
54
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
6 mai 2011
-
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
-
Salut, c'est re-re-moi
Cette fois mon problème avec ma base de données Acces, c'est que je voudrais faire une ligne de commande du genre:
<hr size="2" width="100%" />
If  "Base de donnée vide" then msgbox "Base de données vide" par exemple
<hr size="2" width="100%" />
J'avais pensé à faire :
<hr size="2" width="100%" />
enreg.movefirst ' ça fait planter le truc si c'est vide

On error goto erreur

.
.
.
erreur:
msgbox "Base de données vide"
<hr size="2" width="100%" />Ca marche mais je trouve ça un peu... barbare

Merci d'avance.

8 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
ET AVEC CA
[dadobj03_0tdg.htm Recordset] ou le nombre total d'enregistrements
dans un objet Recordset de type Table ou dans un objet [dadobj04_4tuu.htm TableDef].

Valeurs renvoyées

La valeur renvoyée est de type [dadefn01_9kh1.htm Long].

Remarques

Utilisez la propriété RecordCount pour savoir à combien
d'enregistrements vous avez eu accès dans un objet Recordset ou
TableDef. La propriété RecordCount n'indique pas le nombre
d'enregistrements contenus dans un objet Recordset de type Feuille de
réponses dynamique (Dynaset), Instantané (Snapshot) ou En avant seulement tant
que vous n'avez pas eu accès à tous les enregistrements. Une fois que vous avez
accédé au dernier enregistrement, la propriété RecordCount indique le
nombre total d'enregistrements non supprimés dans l'objet Recordset ou
TableDef. Pour forcer l'accès au dernier enregistrement, appliquez la
méthode [dameth03_2fxw.htm MoveLast] à l'objet Recordset.
Vous pouvez également utiliser une fonction SQL Count pour déterminer le
nombre approximatif d'enregistrements que votre requête va renvoyer.

Note L'utilisation de la méthode MoveLast
pour remplir un objet Recordset que vous venez d'ouvrir a un impact
négatif sur les performances. À moins que vous ayez besoin d'une valeur de
propriété RecordCount précise dès l'ouverture d'un objet
Recordset, il est préférable d'attendre que l'objet Recordset soit
rempli avec d'autres portions de code avant de vérifier la propriété
RecordCount.

À mesure que votre application supprime des enregistrements dans un objet
Recordset de type Feuille de réponses dynamique (Dynaset), la valeur de
la propriété RecordCount diminue. Toutefois, les enregistrements
supprimés par d'autres utilisateurs sont pris en compte dans la propriété
RecordCount uniquement lorsque le pointeur d'[dadefn01_8nok.htm enregistrement en cours] est positionné sur un
enregistrement supprimé. Si vous exécutez une [dadefn02_9rfy.htm transaction] qui affecte la valeur de la propriété
RecordCount et si vous révoquez ultérieurement la transaction, la
propriété RecordCount n'indiquera pas le nombre réel d'enregistrements
restants.

La propriété RecordCount d'un objet Recordset de type
Instantané ou En avant seulement n'est pas affectée par les modifications
apportées aux tables sous-jacentes.

Dans le cas d'un objet Recordset ou TableDef ne contenant aucun
enregistrement, la propriété RecordCount prend la valeur 0.

Lorsque vous travaillez avec des objets TableDef[dadefn01_0fad.htm liés], la propriété RecordCount a toujours la
valeur –1.

Si vous appliquez la méthode [dameth04_5hbt.htm Requery] à un
objet Recordset, la valeur de la propriété RecordCount est
réinitialisée comme si la requête était exécutée à nouveau.

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,
Si Enreg est de type recordset, tu peux essayer les propriétés EOF et BOF et RecordCount.

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
54
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
6 mai 2011

Ca donnerais quoi stp?
Un truc du genre?

If enreg.recordcount = 0 then .....
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Re,
Déjà est ce que j'ai bien raison en disant que c'est un recordset, as tu essayé? il faut essayer de testé avec ce que l'on vous propose plutôt que d'attendre que quelqu'un vous fasse tout pour en faire un vulgaire copier/coller et ne pas apprendre un minimum....

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
3
Oui mais encore faut il s'avoir comment tu reccuperes tes données via le recordset (pas de clause Where).

Au passage, je pense plutot que tu cherches a savoir si une TABLE est vide (et pas une base)
Messages postés
54
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
6 mai 2011

En effet Nicko11, t'as raison, autant pour moi.
C'est bien de la table dont je parle.

Il s'agit bien d'un recordset, voici mon code avec l'application de le méthode erreur:

<hr size="2" width="100%" />Private Sub Form_Load()
On Error GoTo erreur
dim data as ADODB.connection
dim enreg as ADODB.recordset

Set data = New ADODB.Connection
data.Open "Provider=Microsoft.Jet.OLEDB.4.0;data source = c:\data.dat"
Set enreg = New ADODB.Recordset
enreg.Open "select login, password from table", data, adOpenDynamic, adLockOptimistic

enreg.MoveFirst
Exit Sub
    erreur:
    Unload Me
    Form2.Show
End Sub

<hr size="2" width="100%" />Ca marche sans problème et bon j'ai trouvé ça tout seul mais bon, ça ne me plait pas.
Messages postés
54
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
6 mai 2011

La première valeur de enreg.recordcount est -1
J'ai fait:

<hr size="2" width="100%" />Call module1.seconnecter
If enreg.RecordCount = -1 Then
    Unload Me
    Form2.Show
    Exit Sub
End If

<hr size="2" width="100%" />Le problème c'est que même si la table est vide, la valeur est de -1.
J' ai donc rajouter ceci

<hr size="2" width="100%" />Call module1.seconnecter
enreg.movelast 'avant d'avoir la dernière valeur de recordcount
If enreg.RecordCount = -1 Then
    Unload Me
    Form2.Show
    Exit Sub
End If

<hr size="2" width="100%" />mais là ça plante quand la table est vide.

Sinon j'ai tenté ça:
<hr size="2" width="100%" />Call Module1.seconnecter
If enreg.EOF = True Then
    Unload Me
    Form2.Show
    Exit Sub
End If

<hr size="2" width="100%" />Pour l'instant ça a l'air de marcher.
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
14
Salut,

Rajoutes cela dans ton code, cela devrait bien retourner 0 si vide :

Set enreg = New ADODB.Recordset
Enreg.CursorLocation = adUseClient
enreg.Open "select login, password from table", data, adOpenDynamic, adLockOptimistic

A+
Exploreur

 Linux a un noyau, Windows un pépin