Bonjour,
Est ce que la fonction du dlookup (sous access)a une fonction similaire sous vbnet?
Merci
Bonjour,
Est ce que la fonction du dlookup (sous access)a une fonction similaire sous vbnet?
Merci
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.
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
office.microsoft.com/fr-fr/access-helpPré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.
Donc la méthode vb.net se rapprochant le plus pour obtenir une information est ExecuteScalar.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.
Voir lien que j'ai donné au dessus.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.
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.
Avec un paramètre à la fonction, mais cela est une mauvaise idée.
Voici un bon conseil.
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.
Tu accéde une seule fois à la BDD, après tu travaille en mémoire.
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
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.
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
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
est ce que executescalar est facile d'utilisation?
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
merci
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é
appel (un Bouton et un TextBox)
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
A+, Hervé.
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
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.
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[n°] =" & i
Partager