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 :

Dlookup en vbnet [Débutant]


Sujet :

VB.NET

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 625
    Par défaut Dlookup en vbnet
    Bonjour,

    Est ce que la fonction du dlookup (sous access)a une fonction similaire sous vbnet?
    Merci

  2. #2
    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
    Par défaut
    Bonjour
    Il existe la méthode ExecuteScalar
    A+, Hervé.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  3. #3
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Par défaut
    Il n'y a pas d'équivalent stricte à Dlookup en VB.NET.

    Il n'est pas trop compliqué d'écrire un équivalent à cette fonction à l'aide de la fonction ExecuteScalar et un constructeur de requête.

    Après il est probablement plus optimisé de requête un jeu de donnée stockée en interne dans ton programme (dataset, list, etc.) plutôt que de généré une commande SQL pour un récupérer un champ.

    Dlookup était déjà connu à l'époque pour ne pas être une fonction rapide et était fortement déconseillée dans les boucles.

  4. #4
    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
    Par défaut
    Citation Envoyé par sinople Voir le message
    Il n'y a pas d'équivalent stricte à Dlookup en VB.NET.

    Il n'est pas trop compliqué d'écrire un équivalent à cette fonction à l'aide de la fonction ExecuteScalar et un constructeur de requête.

    Après il est probablement plus optimisé de requête un jeu de donnée stockée en interne dans ton programme (dataset, list, etc.) plutôt que de généré une commande SQL pour un récupérer un champ.

    Dlookup était déjà connu à l'époque pour ne pas être une fonction rapide et était fortement déconseillée dans les boucles.
    chuspyto n'a pas préciser son contexte d'utilisation.

    Grenier.self-access
    Présentation de DLookup

    DLookup (ou RechDom en français) permet de rechercher une valeur unique dans une table : cette valeur est celle d'un champ précis, pour une ligne précise de la table.
    office.microsoft.com/fr-fr/access-help
    DLookup, fonction

    La fonction DLookup permet d'obtenir la valeur d'un champ particulier à partir d'un ensemble d'enregistrements (un domaine) spécifique. Vous pouvez l'utiliser dans un module Visual Basic pour Applications (VBA), une macro, une expression de requête ou un contrôle calculé sur un formulaire ou un état.
    Donc la méthode vb.net se rapprochant le plus pour obtenir une information est ExecuteScalar.
    Exécute la requête et retourne la première colonne de la première ligne du jeu de résultats retourné par la requête.Les colonnes ou lignes supplémentaires sont ignorées.
    Voir lien que j'ai donné au dessus.

    Effectivement ce n'est pas prévue pour des boucles. (une requête avec un jeu d'enregistrement est à faire dans ce cas)

    Personnellement je m'en sert lorsque j'ai besoin d'une information ce qui est plus performant que de requêter de nouveau au jeu complet de données.
    Ex : en application multiutilisateur lorsque l'utilisateur effectue une modification il est nécessaire de de vérifier au moment de l'enregistrement qu'aucune mise à jour a été faite par quelqu'un d'autre entre le moment ou l'utilisateur a lu les infos et celle ou il veut enregistrer ses infos.
    Plutôt que de ramener un jeu complet de l'enregistrement et vérifier chaque données, j'utilise une CIF (Contrainte d'Intégité Fonctionnelle) et je ramène seulement cette donnée. En terme de performance cela est préférable. (dans ce cas de figure ramener une seule info est très utile.

    A+, Hervé.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 625
    Par défaut
    en fait toutes mes tables (15) sont placées sous access ,pour cela que j'aurrai voulu une fonction similaire au dlookup pour faire ma recherche dans mes tables?debutant a peine dans le vb net y aurait il un exemple pour utiliser
    executescalar ?
    voici ma ligne ,mais pour access

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 To boucle
    res = Nz(DLookup("chm", table1, "[ID] = " & i))
    next i
    est ce que executescalar est facile d'utilisation?

    merci

  6. #6
    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
    Par défaut
    Implémentation d'une fonction avec ExecuteScalar (tout est intégré dans la fonction juste pour l'exemple).
    Utilisation de requête paramétrée, cela est fortement conseillé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        Public Function LectureUneInfo(ByVal L_Info As String) As String
            Dim UneInfo As String = Nothing
     
            Using cnn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Projets\BDD\Northwind\nwind.mdb") ' fermer automatiquement en fin using
                ' requête paramètrée
                Dim cmd As New OleDbCommand("SELECT CategoryName FROM Categories WHERE CategoryId = ?", cnn)     ' Commande requête
                cmd.Parameters.Add("CategoryId", System.Data.OleDb.OleDbType.VarChar)
                cmd.Parameters("CategoryId").Value = L_Info
                cnn.Open()
                UneInfo = cmd.ExecuteScalar()
            End Using
            Return UneInfo
        End Function
    appel (un Bouton et un TextBox)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Private Sub btnUneInfo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUneInfo.Click
            MessageBox.Show(LectureUneInfo(txtId.Text))
        End Sub
    A+, Hervé.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 625
    Par défaut
    merci,
    petite question comment je peux integrer ce critère sachant que i fait parti d'une boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i = 1 to boucle
    where[] =" & i

  8. #8
    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
    Par défaut
    Citation Envoyé par chuspyto Voir le message
    merci,
    petite question comment je peux integrer ce critère sachant que i fait parti d'une boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i = 1 to boucle
    where[] =" & i
    Avec un paramètre à la fonction, mais cela est une mauvaise idée.

    Citation Envoyé par sinople Voir le message
    ...
    Après il est probablement plus optimisé de requête un jeu de donnée stockée en interne dans ton programme (dataset, list, etc.) plutôt que de généré une commande SQL pour un récupérer un champ.
    ...
    Voici un bon conseil.

    Citation Envoyé par rv26t Voir le message
    ...
    Effectivement ce n'est pas prévue pour des boucles. (une requête avec un jeu d'enregistrement est à faire dans ce cas)
    ...
    Si tu boucles tu vas effectuer x accés à ta base de données.

    Avec une requette tu indiques ta plage de recherche (style where[n°] < nombre) et tu parcours le jeu de données résultant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            Using drr As OleDbDataReader = cmd.ExecuteReader()
                While drr.Read 'Parcours des enregistrements
                  maliste.add = drr("CategoryId")
                End While
            End Using
    Tu accéde une seule fois à la BDD, après tu travaille en mémoire.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 625
    Par défaut
    peux tu me dire si cela conviendrait?
    de plus ma liste.add correspond a quoi?

    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
     Dim UneInfo As String = Nothing
            Dim cmd As OleDbCommand = cn.CreateCommand
            Dim i As Integer
            Using cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\essai.mdb") ' fermer automatiquement en fin using
                ' requête paramètréee
     
                Dim cmd As New OleDbCommand("SELECT clip FROM test WHERE [n°]<40", cn)     ' Commande requête
                cmd.Parameters.Add("n°", System.Data.OleDb.OleDbType.VarChar)
                cmd.Parameters("n°").Value = L_Info
                Using drr As OleDbDataReader = cmd.ExecuteReader()
                    While drr.Read 'Parcours des enregistrements
                        maliste.add = drr("n°")
                    End While
                End Using
                cn.Open()
     
                UneInfo = cmd.ExecuteScalar()
     
                If cn.State = ConnectionState.Open Then
                    MessageBox.Show("connecté a la base")
                Else
                    MessageBox.Show("non connecté a la base")
                End If          
     
            End Using
            Return UneInfo
     
        End Function

  10. #10
    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
    Par défaut
    Citation Envoyé par chuspyto Voir le message
    peux tu me dire si cela conviendrait?
    de plus ma liste.add correspond a quoi?
    Attention tu mélanges tout.
    maliste correspond à une variable de type liste pour recevoir toutes les données. Et maliste.add ajoute une donnée dans la liste.

    Soit tu cherches un ensemble de données
    Citation Envoyé par chuspyto Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                Using drr As OleDbDataReader = cmd.ExecuteReader()
                    While drr.Read 'Parcours des enregistrements
                        maliste.add = drr("n°")
                    End While
                End Using
    Soit tu cherches seule une donnée
    Citation Envoyé par chuspyto Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                UneInfo = cmd.ExecuteScalar()
            End Using
            Return UneInfo
    Soit tu souhaites afficher un jeu de résultat et tu peux procéder autrement.


    Citation Envoyé par rv26t Voir le message
    chuspyto n'a pas préciser son contexte d'utilisation.
    Tant que l'on ne sait pas ce que tu veux faire, on va partir dans tous les sens.

    Des tutos
    Utiliser ado.net
    ADO.NET : les objet Connection, Command et Datareader
    ADO.NET : les objets DataAdapter et Dataset

    un cours général et complet regorgeant d'info.
    Cours complet sur VB.Net
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 625
    Par défaut
    en fait ce que je voudrais c'est de me connecter a une base access pour pouvoir lire les données de mes tables en clair dans chacune de mes tables access je me retrouve avec une quarantaine d'enregistrement et par le biais de visual studio sur mon form1 j'ai plusieurs boutons et en fonction du bouton que j'appuie je vais rechercher dans ma table l'enregistrement qui lui concerne ex:
    bouton 1 enregistrement 1
    bouton 2 enregistrement 2
    bouton 3 enregistrement 3
    bouton 4 enregistrement 4
    bouton 5 enregistrement 5
    .....
    sous access j'avais reussi cela par le biais du dlookup mais ayant des instabilité j'ai voulu utilise visual studio et laissé toutes mes tables de données a access

  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
    Par défaut
    Donc ça doit ressembler à cela

    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
        Public Sub LectureLigne(ByVal L_Id As String, ByRef sTxtNum As String, ByRef sTxtClip As String)
            Dim cn As OleDbConnection = New OleDbConnection
            Dim cmd As OleDbCommand = New OleDbCommand
            cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\essai.mdb"
            cmd.Connection = cn
            ' requête paramètréee
            cmd.CommandText = "SELECT [n°],clip FROM test WHERE [n°] = ?"
            cmd.Parameters.Add("n°", System.Data.OleDb.OleDbType.Integer) ' attention au type n° est probablement un entier
            cmd.Parameters("n°").Value = L_Id
            cn.Open()
            Using dr As OleDbDataReader = cmd.ExecuteReader()
                dr.Read() 'lit l'enregistrement
                sTxtNum = dr("n°").ToString
                sTxtClip = dr("clip")
            End Using
            cn.Close()
        End Sub
    A adapter bien sur.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 625
    Par défaut
    merci beaucoup

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

Discussions similaires

  1. [vbnet] problème de conversion dans une datagrid
    Par Jsh dans le forum Windows Forms
    Réponses: 5
    Dernier message: 04/09/2005, 12h40
  2. vbnet + recordset vide
    Par cell dans le forum Windows Forms
    Réponses: 19
    Dernier message: 19/04/2005, 13h31
  3. [VB.NET] Traduction de code c++builder -> VbNet
    Par Tempotpo dans le forum Windows Forms
    Réponses: 7
    Dernier message: 22/03/2005, 15h02
  4. PB Fonction RechDom (DlookUp)
    Par Mike 619 dans le forum Access
    Réponses: 14
    Dernier message: 12/10/2004, 15h34

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