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 :

Controler une table dans access [Débutant]


Sujet :

VB.NET

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 625
    Points : 168
    Points
    168
    Par défaut Controler une table dans access
    bonjour,
    apres recherches dans differents forum je n' ai pas trouver de réponses a mes questions.
    et il possible de restreindre le nombre d'enregistrements d'une table access a partir de vb net( limiter la table à 10 enregistrements, si tentative de depassement = message d'alerte).
    via access voici le code,est il possible de l'adapter pour vb net:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if Me.CurrentRecord > 10 Then
        MsgBox "enregistrement autorisé atteint"
        Cancel = True
    End If
    peut on afficher avant enregistrement dans une table le nombre actuel d'enregistrement?

    merci

  2. #2
    Membre chevronné Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Points : 1 961
    Points
    1 961
    Par défaut
    Et avec un Select Count(*) avant ta requête d'insertion ? Et tu testes que le résultat soit inférieur/égale à 10 ...

    (Pourquoi vouloir faire ça en Vb.NET et pas dans la BDD ? )

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 625
    Points : 168
    Points
    168
    Par défaut
    j'ai essaye cela mais cela n'a pas l'air de fonctionné est ce que j'aurrai oublié quelquechose?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim enregistrement As integer = ("select count(*) from  {0}"), basdef)
                If enregistrement > 10 Then
                    MsgBox("enregistrement atteint")
                End If
                SQLstr = String.Format("INSERT INTO  {0} (ChmAcc,Etiq) VALUES ('" & Recherche_AVI.Text & "','" & isole_nom(Etiq) & "') ", basdef)
     
                cnn.Close()

    merci

  4. #4
    Membre chevronné Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Points : 1 961
    Points
    1 961
    Par défaut
    Citation Envoyé par chuspyto Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim enregistrement As integer = ("select count(*) from  {0}"), basdef)
                If enregistrement > 10 Then
    Je ne comprend pas trop la syntaxe que tu utilises ...

    Dans le doute je te propose plutôt celle que je connais (plus ou moins) ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
                Dim req As SqlCommand = New SqlCommand("select count(*) from " & basedef, cnn)
                Dim nbEnregistrement As Integer = CInt(req.ExecuteScalar)
     
                If nbEnregistrement > 10 Then
                    MsgBox("enregistrement atteint")
                Else
                    'ton traitement que je ne comprend pas : 
                    SQLstr = String.Format("INSERT INTO  {0} (ChmAcc,Etiq) VALUES ('" & Recherche_AVI.Text & "','" & isole_nom(Etiq) & "') ", basdef)
     
                End If
     
                cnn.Close()

    Et je réitère pourquoi traiter cela au niveau de l'appli et pas de la BDD ?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 625
    Points : 168
    Points
    168
    Par défaut
    Dans la base de données je me retrouve avec des messages d erreur,pour cela que j'ai voulu essayé cela en vb net.
    Pour info basdef prend le nom d une table en fonction de certaines condition(cases à cocher)

  6. #6
    Membre chevronné Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Points : 1 961
    Points
    1 961
    Par défaut
    Je me doute mais c'est la notion de remplacement de {0} par basedef que je ne connais pas... et le Dim enregistrement As integer = ("select count(*) from {0}"), basdef)

    Mais j'insiste sur le fait que c'est à Access de traiter ca, lorsque tu auras plus de 10, il sortira une erreur, que tu catcheras dans ton appli pour informer l'user qu'il y a 10 enregistrements dans la table.

  7. #7
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    tu ne dois pas nous avoir mis le vrai code que tu utilises, ou alors il manque une clause de sortie (ou un else comme le propose _Ez3kiel)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if nb > 10 then 
       msgbox
       exit sub ' si on ne met pas exit sub, ce qui est après le if est exécuté
    end if
     
    insert
    Citation Envoyé par _Ez3kiel Voir le message
    Mais j'insiste sur le fait que c'est à Access de traiter ca
    je serais curieux de savoir comment on peut faire ca hors du programme ...

    en tout cas il n'est pas rare de mettre des restrictions dans un programme

  8. #8
    Membre chevronné Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Points : 1 961
    Points
    1 961
    Par défaut
    Sous access je ne sais pas, hormis en définissant un max sur les séquences de la PK de la table ... (<=10)

  9. #9
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    alors pour info access ce n'est pas un vrai moteur de base de données, on ne peut rien faire de spécial dessus ^^

  10. #10
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2012
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2012
    Messages : 330
    Points : 774
    Points
    774
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    alors pour info access ce n'est pas un vrai moteur de base de données, on ne peut rien faire de spécial dessus ^^
    C'est pas tout à fait vrai :
    On peut galérer pendant des heures avant de comprendre qu'il vaudrait mieux passer à autre chose

  11. #11
    Membre chevronné Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Points : 1 961
    Points
    1 961
    Par défaut
    On m'a toujours dit que c'était très (très très très) limité, mais je pensais que ça avait évolué un peu depuis, ou que ça l'était pas tant que ça ...

    Maintenant je saurais.

  12. #12
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Bonjour,

    @_Ez3kiel
    Ils essayent de le faire progresser
    Seulement il manque un : "Avant insert"; et c'est ça qui serait utile à chuspyto
    Sinon les SGBD ont effectivement les Triggers.

    @_Ez3kiel (suite)
    Ou on écrit une concaténation de chaine avec &
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQLstr = "INSERT INTO " & basdef & " (ChmAcc,Etiq) VALUES ('" & Recherche_AVI.Text & "','" & isole_nom(Etiq) & "')"
    ou on ecrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQLstr = String.Format("INSERT INTO {0} (ChmAcc,Etiq) VALUES ('{1}','{2}')", basdef, Recherche_AVI.Text, isole_nom(Etiq))
    mais
    Citation Envoyé par chuspyto Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                SQLstr = String.Format("INSERT INTO  {0} (ChmAcc,Etiq) VALUES ('" & Recherche_AVI.Text & "','" & isole_nom(Etiq) & "') ", basdef)
    un mixte des 2
    ________________________________________________

    Sinon, il est préférable d'utiliser les requêtes paramètrées.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
                Using cnn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=......")
                    cnn.Open()
                    If Integer.Parse(New OleDbCommand("select count(*) from " & basdef, cnn).ExecuteScalar) > 10 Then
                        MsgBox("enregistrement atteint")
                    Else
                        Dim myCommand As OleDbCommand = New OleDbCommand(String.Format("INSERT INTO {0} (ChmAcc,Etiq) values (?,?)", basdef), cnn)
                        myCommand.Parameters.Add(New OleDbParameter("@ChmAcc", OleDbType.VarChar, 4))
                        myCommand.Parameters.Add(New OleDbParameter("@Etiq", OleDbType.VarChar, 25))
                        myCommand.Parameters("@ChmAcc").Value = Recherche_AVI.Text
                        myCommand.Parameters("@Etiq").Value = isole_nom(Etiq)
                        myCommand.ExecuteNonQuery()
                    End If
                    cnn.Close()
                End Using
    Mais la meilleure blague avec access, c'est qu'il ne tiend pas compte des noms des paramètres, il les prend dans l'ordre de définition dans la requette. (si je les avais appelé "Id" et "Lib" cela aurait aussi fonctionné. Ca c'est un piége)

  13. #13
    Membre chevronné Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Points : 1 961
    Points
    1 961
    Par défaut
    Pourquoi il manque forcément celui qui est le plus utilisé ?

    Je ne savais pas pour le String.Format() merci de l'info.

    Et pour la petite info sur les requêtes paramétrées, je confirme que c'est la même chose pour les requêtes paramétrées envers Oracle (11g), seul l'ordre de définition lui importe...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mise à jour d'une table dans access avec un dataset
    Par San Soussy dans le forum ADO.NET
    Réponses: 2
    Dernier message: 15/04/2014, 11h56
  2. [Débutant] Comment afficher ligne x colonne Y d'une table dans access avec vs2012
    Par JetLibre dans le forum VB.NET
    Réponses: 2
    Dernier message: 04/08/2013, 22h23
  3. Duplication d'une table dans access
    Par Chourouk2012 dans le forum Access
    Réponses: 2
    Dernier message: 10/08/2012, 09h22
  4. [AC-2007] importer une table dans access
    Par titi57 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 09/01/2010, 10h32
  5. Creation d'une table dans ACCESS avec le composant TADOTABLE ?
    Par QAYS dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/10/2008, 17h39

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