Base de données vide

Résolu
altozinzin Messages postés 54 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 6 mai 2011 - 23 mai 2007 à 12:59
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 - 23 mai 2007 à 14:41
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

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
23 mai 2007 à 13: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
3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
23 mai 2007 à 13:16
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
0
altozinzin Messages postés 54 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 6 mai 2011
23 mai 2007 à 13:30
Ca donnerais quoi stp?
Un truc du genre?

If enreg.recordcount = 0 then .....
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
23 mai 2007 à 13:36
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
0

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

Posez votre question
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
23 mai 2007 à 13:37
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)
0
altozinzin Messages postés 54 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 6 mai 2011
23 mai 2007 à 13:46
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.
0
altozinzin Messages postés 54 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 6 mai 2011
23 mai 2007 à 14:22
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.
0
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
23 mai 2007 à 14:41
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

 
0
Rejoignez-nous