IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Récupérer le nombre d'enregistrements d'une table ACCESS


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 506
    Par défaut Récupérer le nombre d'enregistrements d'une table ACCESS
    Bonjour,

    J'aimerais au démarrage afficher une fenêtre affichant le nombre d'enregistrements d'une table si évidemment elle n'est pas à zéro...

    J'ai essayé ceci, mais rien ne fonctionne...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim rs As New ADODB.Recordset
            rs = cn.Execute("SELECT COUNT(*) FROM ATRAITER")
            i = rs(0).Value
            MsgBox(i)
    ou encore...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Dim intCount As Integer
            intCount = ds.Tables("ATRAITER").Rows.Count

  2. #2
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    Salut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim rs As New ADODB.Recordset
            rs = cn.Execute("SELECT COUNT(*) FROM ATRAITER")
            rs.MoveLast
            rs.MoveFirst
            i = rs.RecordCount 
            'i = rs(0).Value
            MsgBox(i)
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 506
    Par défaut
    Bonjour et merci pour votre réponse, mais... le code ne fonctionne pas. Il semble y avoir des problèmes de déclarations et surtout un problème avec ADODB.Recordset

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim rs As New ADODB.Recordset
            rs = cn.Execute("SELECT COUNT(*) FROM ATRAITER")
            rs.MoveLast
            rs.MoveFirst
            i = rs.RecordCount 
            'i = rs(0).Value
            MsgBox(i)
    Les messages dans la liste d'erreurs sont :
    • Pour ADODB.Recordset - il n'est pas définit
    • Pour cn - n'est pas déclaré. Il peut être inaccessible en raison de son niveau de protection. Idem pour i


    Pour info, voici mon code à l'ouverture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
        Private Sub Menu_principal_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            'TODO: cette ligne de code charge les données dans la table 'MembresDataSet.ASBL'. Vous pouvez la déplacer ou la supprimer selon les besoins.
            Me.ASBLTableAdapter.Fill(Me.MembresDataSet.ASBL)
     
            ToolStripStatusLabel2.Text = FormatDateTime(Now, vbShortTime)
            ' ToolStripStatusLabel2.Text = Format(Now, "hh:mm")
            ToolStripStatusLabel3.Text = Format$(Now, "dd/MM/yy")
     
            Dim rs As New ADODB.Recordset
            'Dim cn As String
            'Dim i As String
            rs = cn.Execute("SELECT COUNT(*) FROM ATRAITER")
            rs.MoveLast
            rs.MoveFirst
            i = rs.RecordCount
            'i = rs(0).Value
            MsgBox(i)
        End Sub
    Belle journée

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 506
    Par défaut
    Bonjour,

    A mon avis, il manque un morceau de code au début qui définirait la base de données à utiliser...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      Dim rs As New ADODB.Recordset
            'Dim cn As String
            'Dim i As String
            rs = cn.Execute("SELECT COUNT(*) FROM ATRAITER")
            rs.MoveLast
            rs.MoveFirst
            i = rs.RecordCount
            'i = rs(0).Value
            MsgBox(i)

  5. #5
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 576
    Par défaut
    bonjour,
    1. ADODB est obsolète
    2. il faut ouvrir la connexon ADODB!
    3. rs.RecordCount ne retourne qu'un seul enregistrement vu que la requête est select Count(*)
      en revanche la requête par définition contient le nombre d'enregistrement!
    4. Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
       Dim i As long=0
      rs = cn.Execute("SELECT COUNT(*) as Nb FROM ATRAITER")  
      if not rs.eof then  i = rs("Nb").value

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 506
    Par défaut
    Bonjour,

    Merci, mais je suis super débutant et je ne comprends pas...

    Dans votre dernier message "ADODB est obsolète" et puis ensuite "il faut ouvrir la connexion ADODB!" ?

    Mon problème est là justement...

    J'ai une base de données Membres.accdb, dans cette base de données il y a une table ATRAITER.

    J'aimerais avoir un test lors de l'ouverture du programme sur cette table. Si elle ne contient pas d'enregistrements, ne rien faire, si elle contient des enregistrement, afficher une MsgBox contenant le nombre d'enregistrements.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
      Private Sub Menu_principal_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            'TODO: cette ligne de code charge les données dans la table 'MembresDataSet.ASBL'. Vous pouvez la déplacer ou la supprimer selon les besoins.
            Me.ASBLTableAdapter.Fill(Me.MembresDataSet.ASBL)
     
            ToolStripStatusLabel2.Text = FormatDateTime(Now, vbShortTime)
            ' ToolStripStatusLabel2.Text = Format(Now, "hh:mm")
            ToolStripStatusLabel3.Text = Format$(Now, "dd/MM/yy")
     
            ' Affichage du Logo
            PictureBox1.ImageLocation = Windows.Forms.Application.StartupPath & "\Logo.png"
     
    Dim i As long=0
    rs = cn.Execute("SELECT COUNT(*) as Nb FROM ATRAITER")  
    if not rs.eof then  i = rs("Nb").value
    End Sub
    Ps : j'ai du mal à comprendre la gestion des tables : ajout, lecture, filtres, supprimer etc...

    J'ai par exemple un Form. avec d'un côté des TextBox reliés à une table "ADRESSES" (je peux grâce à des flèches faire défiler les enregistrements) et de l'autre côté une table contenant les enregistrements de la table ATRAITER

    MANIPULATION :
    J'ai donc :
    d'un côté la table ATRAITER avec un enregistrement sélectionné - Exemple Champ1 : DUPONT Pierre - Champ 2 : 10
    de l'autre côté, un enregistrement sélectionné dans la table ADRESSES - Exemple Champ2 : DUPONT Pierre - Champ 3 : 240

    Et au clique sur un bouton, j'aimerais que le Champ 3 de la table ADRESSES passe à 240 + 10 = 250 ,s'enregistre, copie l'enregistrement de ATRAITER dans une table MOUVEMENTS et ensuite efface l'enregistrement de ATRAITER.

    Si je ne trouve pas DUPONT Pierre dans la table ADRESSES pouvoir le créer avec le champ 3 : 10

    J'ai l'impression que tout cela ne doit pas être très compliqué, mais voilà je suis débutant avec les bases de données en VB... Ha oui, ce n'est pas fini, la table ATRAITER doit être alimentée pas des fichiers CODA.

  7. #7
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    Salut

    Regardes du coté de cette discussion Pilotage base Access, Phil Rob donne plein de bons conseils pour ce connecter à la base est ouvrir une table.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  8. #8
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 576
    Par défaut
    J'ai dit ADODB est obsolète je n'ai pas dit qu'on ne pouvait plus l'utiliser même s'il est préférable d'utiliser System.Data.OleDb!


    dans ton code tu utilises un objet dataset 'Me.MembresDataSet' pour lié ta base de données avec ton formulaire ce qui fonctionne mais fortement déconseillé!

    tu utilises FormatDateTime fonction strictement ACCESS!

    Format fonction VBA!
    tu as le droits de panacher les langage mais tu ne développes pas en VB.NET ça peut être un choix je ne discute pas!
    si tu vas dans les références que tu décoche la librairie Visual Basic ton code explose!

    pour ce qui concerne les dataset je ne pourrais pas t'aider je me refuse de l'utiliser!

    pour ta requête je te fourni un exemple avec System.Data.OleDb pas avec ADODB!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Imports System.Data.OleDb
     
    Public Class Form1
        Private cnx As OleDbConnection = Nothing
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Dim i As Long = 0
            cnx = OpenConnexion("C:\Myrep\DBTest.accdb")
            Dim Sql As String = "Select COUNT(*) as Nb FROM ATRAITER"
            Dim T As DataTable = ToDatatable(Execute(Sql))
            If T.Rows.Count > 0 Then
                i = T.Rows(0).Item("nb")
            End If
        End Sub
        Private Function OpenConnexion(ByVal _Fichier As String) As OleDbConnection
            Dim GenereCSTRING As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _Fichier & ";"
            Dim cnx = New OleDbConnection(GenereCSTRING)
            Try
                cnx.Open()
                Return cnx
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Function
        Private Sub CloseConnexion()
            cnx.Close()
            cnx.Dispose()
            cnx = Nothing
        End Sub
        Public Function Execute(ByVal Sql As String) As Object
            Dim myObject As New Object
            Using cmd As New OleDb.OleDbCommand(Sql, cnx)
                Try
                    Return cmd.ExecuteReader()
                Catch ex As Exception
                    Return Nothing
                End Try
            End Using
        End Function
        Public Function ToDatatable(ByVal dr As OleDb.OleDbDataReader) As DataTable
            Dim dt As New DataTable()
            dt.Load(dr)
            Return dt
        End Function
    End Class

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 506
    Par défaut
    Merci pour le lien et vous explications

    Thumb down : "dans ton code tu utilises un objet dataset 'Me.MembresDataSet' pour lier ta base de données avec ton formulaire ce qui fonctionne mais fortement déconseillé!", je n'utilise pas forcement cela, cela se fait tout seul lorsque je connecte une base de données Access via Visual Studio... Je suis débutant en VB, il faut m'excuser je cherche sur le web et je trouve des morceaux de code et...

    C'est comme pour FormatDateTime, je l'utilise simplement parce que je n'ai rien trouvé de mieux pour afficher les heures en 24h...

    Ps : j'essaie d'y arriver pour remplacer un petit logiciel de gestion de dons pour la comptabilité pour mon boulot (ASBL)... Elles ont un logiciel qui tourne sous Windows XP et obligatoirement Office 97, donc cela devient compliqué à utiliser... Cela serait encore plus simple pour moi si je trouvais quelqu'un pour me le faire ou faire une très grande partie

    Bonne fin de week-end

Discussions similaires

  1. [AC-2016] Récupérer le nombre d' enregistremenst d'une requête
    Par Apoulit dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 02/05/2020, 05h37
  2. récupérer le nombre de lignes d' une table dynamiquement
    Par j2ee60 dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 01/02/2012, 18h31
  3. Récupérer le nombre de lignes d'une table MySQL
    Par El-Diablo- dans le forum C++Builder
    Réponses: 1
    Dernier message: 27/08/2008, 22h24
  4. récupérer le nombre de lignes d'une table interne.
    Par progamer54 dans le forum SAP
    Réponses: 6
    Dernier message: 26/08/2008, 17h06
  5. Réponses: 2
    Dernier message: 20/03/2007, 13h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo