Bonjour Arnaud,
Oui, j' y avais pensé mais je ne sais pas comment faire évaluer dans la
requête la chaine concaténée. Même avec Eval() je n'y suis pas arrivé
dans le générateur de requêtes.
Toutefois j'ai contourné le problème de la manière suivante:
Une fonction qui :
1 - concatène les champs de la table passée en paramètre et qui demande
les caracères à comparer.
2 - Création d'une requête temporaire qui est ouverte ( ;-) )
3 - Affichage des résultats
4 - Suppression de la query temporaire.
Cette fonction est appelée sur le clic d'un bouton de formulaire
(inconvénient éventuel mais on court-circuite le générateur). Ca donne
le code ci-dessous mais à parfaire évidemment.
Il faudrait que Yannick teste pour donner une évaluation des temps de
réponse par rapport aux autres méthodes.
Function fConcatChamps(UneTable As String)
Dim t As DAO.TableDef, f As DAO.Field
Dim qry As DAO.QueryDef, reponse As String
Dim strsql As String
For i = 0 To CurrentDb.TableDefs(UneTable).Fields.Count - 1
LesChamps = LesChamps & "[" & _
CurrentDb.TableDefs(UneTable).Fields(i).Name & "] & "
Next i
reponse = InputBox("Caractère(s) cherché(s)")
strsql = "select * from " & UneTable & _
" where " & Left(LesChamps, Len(LesChamps) - 3) & _
" like '*" & Trim(reponse) & "*'"
Set qry = CurrentDb.CreateQueryDef("tmp", strsql)
DoCmd.OpenQuery "tmp"
CurrentDb.QueryDefs.Delete "tmp"
Set qry = Nothing
End Function
Sur l'évènement clic d'un bouton de formulaire :
Private Sub Commande0_Click()
Dim reponse As String, msg As String
msg = "Nom de la table où" & _
vbCrLf & "s'effectue la recherche ?"
reponse = InputBox(msg)
If Len(reponse) = 0 Then
MsgBox " Action interrompue", vbInformation
Else
reponse = Trim(reponse)
fConcatChamps (reponse)
End If
End SubSalut Eric,
"Eric" a écrit dans le message de
news:Mon idée initiale était de ne pas avoir à faire la concaténation à la
main dans le générateur de requête.
Ma fonction doit être mal faite ---> A la poubelle.
Arnaud t'a proposé 2 solutions qui font leurs preuves.
une 3ème solution idée comme ça qui permettrait de combiner les deux
méthodes.
Le code SQL serait de la forme :
"select * from latable where " & fConcatChamps(latable) & " like '*to*'"
L'idée serait de créer une fonction qui liste et concatène tous les champs
de latable
elle retournerait donc tout simplement champ1&champ2&champ3......&champ999
ensuite, on rajoute un paramètre pour le critère, on currentdb.exécute ça et
c'est automatique sans ouvrir de recordset à chaque fois ;-)))
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Bonjour Arnaud,
Oui, j' y avais pensé mais je ne sais pas comment faire évaluer dans la
requête la chaine concaténée. Même avec Eval() je n'y suis pas arrivé
dans le générateur de requêtes.
Toutefois j'ai contourné le problème de la manière suivante:
Une fonction qui :
1 - concatène les champs de la table passée en paramètre et qui demande
les caracères à comparer.
2 - Création d'une requête temporaire qui est ouverte ( ;-) )
3 - Affichage des résultats
4 - Suppression de la query temporaire.
Cette fonction est appelée sur le clic d'un bouton de formulaire
(inconvénient éventuel mais on court-circuite le générateur). Ca donne
le code ci-dessous mais à parfaire évidemment.
Il faudrait que Yannick teste pour donner une évaluation des temps de
réponse par rapport aux autres méthodes.
Function fConcatChamps(UneTable As String)
Dim t As DAO.TableDef, f As DAO.Field
Dim qry As DAO.QueryDef, reponse As String
Dim strsql As String
For i = 0 To CurrentDb.TableDefs(UneTable).Fields.Count - 1
LesChamps = LesChamps & "[" & _
CurrentDb.TableDefs(UneTable).Fields(i).Name & "] & "
Next i
reponse = InputBox("Caractère(s) cherché(s)")
strsql = "select * from " & UneTable & _
" where " & Left(LesChamps, Len(LesChamps) - 3) & _
" like '*" & Trim(reponse) & "*'"
Set qry = CurrentDb.CreateQueryDef("tmp", strsql)
DoCmd.OpenQuery "tmp"
CurrentDb.QueryDefs.Delete "tmp"
Set qry = Nothing
End Function
Sur l'évènement clic d'un bouton de formulaire :
Private Sub Commande0_Click()
Dim reponse As String, msg As String
msg = "Nom de la table où" & _
vbCrLf & "s'effectue la recherche ?"
reponse = InputBox(msg)
If Len(reponse) = 0 Then
MsgBox " Action interrompue", vbInformation
Else
reponse = Trim(reponse)
fConcatChamps (reponse)
End If
End Sub
Salut Eric,
"Eric" <f_framZZ@hotmail.com> a écrit dans le message de
news:uIbqUru8FHA.1000@tk2msftngp13.phx.gbl...
Mon idée initiale était de ne pas avoir à faire la concaténation à la
main dans le générateur de requête.
Ma fonction doit être mal faite ---> A la poubelle.
Arnaud t'a proposé 2 solutions qui font leurs preuves.
une 3ème solution idée comme ça qui permettrait de combiner les deux
méthodes.
Le code SQL serait de la forme :
"select * from latable where " & fConcatChamps(latable) & " like '*to*'"
L'idée serait de créer une fonction qui liste et concatène tous les champs
de latable
elle retournerait donc tout simplement champ1&champ2&champ3......&champ999
ensuite, on rajoute un paramètre pour le critère, on currentdb.exécute ça et
c'est automatique sans ouvrir de recordset à chaque fois ;-)))
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Bonjour Arnaud,
Oui, j' y avais pensé mais je ne sais pas comment faire évaluer dans la
requête la chaine concaténée. Même avec Eval() je n'y suis pas arrivé
dans le générateur de requêtes.
Toutefois j'ai contourné le problème de la manière suivante:
Une fonction qui :
1 - concatène les champs de la table passée en paramètre et qui demande
les caracères à comparer.
2 - Création d'une requête temporaire qui est ouverte ( ;-) )
3 - Affichage des résultats
4 - Suppression de la query temporaire.
Cette fonction est appelée sur le clic d'un bouton de formulaire
(inconvénient éventuel mais on court-circuite le générateur). Ca donne
le code ci-dessous mais à parfaire évidemment.
Il faudrait que Yannick teste pour donner une évaluation des temps de
réponse par rapport aux autres méthodes.
Function fConcatChamps(UneTable As String)
Dim t As DAO.TableDef, f As DAO.Field
Dim qry As DAO.QueryDef, reponse As String
Dim strsql As String
For i = 0 To CurrentDb.TableDefs(UneTable).Fields.Count - 1
LesChamps = LesChamps & "[" & _
CurrentDb.TableDefs(UneTable).Fields(i).Name & "] & "
Next i
reponse = InputBox("Caractère(s) cherché(s)")
strsql = "select * from " & UneTable & _
" where " & Left(LesChamps, Len(LesChamps) - 3) & _
" like '*" & Trim(reponse) & "*'"
Set qry = CurrentDb.CreateQueryDef("tmp", strsql)
DoCmd.OpenQuery "tmp"
CurrentDb.QueryDefs.Delete "tmp"
Set qry = Nothing
End Function
Sur l'évènement clic d'un bouton de formulaire :
Private Sub Commande0_Click()
Dim reponse As String, msg As String
msg = "Nom de la table où" & _
vbCrLf & "s'effectue la recherche ?"
reponse = InputBox(msg)
If Len(reponse) = 0 Then
MsgBox " Action interrompue", vbInformation
Else
reponse = Trim(reponse)
fConcatChamps (reponse)
End If
End SubSalut Eric,
"Eric" a écrit dans le message de
news:Mon idée initiale était de ne pas avoir à faire la concaténation à la
main dans le générateur de requête.
Ma fonction doit être mal faite ---> A la poubelle.
Arnaud t'a proposé 2 solutions qui font leurs preuves.
une 3ème solution idée comme ça qui permettrait de combiner les deux
méthodes.
Le code SQL serait de la forme :
"select * from latable where " & fConcatChamps(latable) & " like '*to*'"
L'idée serait de créer une fonction qui liste et concatène tous les champs
de latable
elle retournerait donc tout simplement champ1&champ2&champ3......&champ999
ensuite, on rajoute un paramètre pour le critère, on currentdb.exécute ça et
c'est automatique sans ouvrir de recordset à chaque fois ;-)))
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Bonjour Eric
le temps de reponse est correcte rien a voir avec les 12 secondes voir plus
par rapport au autes methodes je concatenais en mettant un espace entre
chaque champs et de plus par rapport a cette methode peut - on l'adapter à
une zone de texte au lieu de inpubox("Caractère(s) cherché(s)") et mette en
variable le nom de la table et nom le inputbox?
Merci pour tous
Yannick
Bonjour Eric
le temps de reponse est correcte rien a voir avec les 12 secondes voir plus
par rapport au autes methodes je concatenais en mettant un espace entre
chaque champs et de plus par rapport a cette methode peut - on l'adapter à
une zone de texte au lieu de inpubox("Caractère(s) cherché(s)") et mette en
variable le nom de la table et nom le inputbox?
Merci pour tous
Yannick
Bonjour Eric
le temps de reponse est correcte rien a voir avec les 12 secondes voir plus
par rapport au autes methodes je concatenais en mettant un espace entre
chaque champs et de plus par rapport a cette methode peut - on l'adapter à
une zone de texte au lieu de inpubox("Caractère(s) cherché(s)") et mette en
variable le nom de la table et nom le inputbox?
Merci pour tous
Yannick
Bonjour Yannick,
Un formulaire avec
- une zone de texte pour saisir le nom de la table nommée txtTable
- une zone de texte pour les caractères cherchés nommée txtSeekCar
- un bouton de comande : Commande0
Sur l'évènement clic du bouton de commande:
Private Sub Commande0_Click()
If IsNull(txtTable) Then
MsgBox " Action interrompue", vbInformation
Exit Sub
Else
fConcatChamps Trim(txtTable), Nz(txtSeekCar, "")
End If
End Sub
et la fonction adaptée qui remplace l'autre :
Function fConcatChamps(UneTable As String, UneChaine As String)
Dim t As DAO.TableDef, f As DAO.Field, i as Integer
' ou Dim i as Byte car 255 champs c'est déja pas mal
Dim qry As DAO.QueryDef, reponse As String
Dim strsql As String
For i = 0 To CurrentDb.TableDefs(UneTable).Fields.Count - 1
LesChamps = LesChamps & "[" & _
CurrentDb.TableDefs(UneTable).Fields(i).Name & "] & "
Next i
strsql = "select * from " & UneTable & _
" where " & Left(LesChamps, Len(LesChamps) - 3) & _
" like '*" & Trim(UneChaine) & "*'"
Set qry = CurrentDb.CreateQueryDef("tmp", strsql)
DoCmd.OpenQuery "tmp"
CurrentDb.QueryDefs.Delete "tmp"
Set qry = Nothing
End Function
Si rien n'est saisi dans txtSeekCar, tu as tout le jeu d'enregistrements
d'une requête normale. (pas changé avec la 1ère version)
VoilaBonjour Eric
le temps de reponse est correcte rien a voir avec les 12 secondes voir plus
par rapport au autes methodes je concatenais en mettant un espace entre
chaque champs et de plus par rapport a cette methode peut - on l'adapter à
une zone de texte au lieu de inpubox("Caractère(s) cherché(s)") et mette en
variable le nom de la table et nom le inputbox?
Merci pour tous
Yannick
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Bonjour Yannick,
Un formulaire avec
- une zone de texte pour saisir le nom de la table nommée txtTable
- une zone de texte pour les caractères cherchés nommée txtSeekCar
- un bouton de comande : Commande0
Sur l'évènement clic du bouton de commande:
Private Sub Commande0_Click()
If IsNull(txtTable) Then
MsgBox " Action interrompue", vbInformation
Exit Sub
Else
fConcatChamps Trim(txtTable), Nz(txtSeekCar, "")
End If
End Sub
et la fonction adaptée qui remplace l'autre :
Function fConcatChamps(UneTable As String, UneChaine As String)
Dim t As DAO.TableDef, f As DAO.Field, i as Integer
' ou Dim i as Byte car 255 champs c'est déja pas mal
Dim qry As DAO.QueryDef, reponse As String
Dim strsql As String
For i = 0 To CurrentDb.TableDefs(UneTable).Fields.Count - 1
LesChamps = LesChamps & "[" & _
CurrentDb.TableDefs(UneTable).Fields(i).Name & "] & "
Next i
strsql = "select * from " & UneTable & _
" where " & Left(LesChamps, Len(LesChamps) - 3) & _
" like '*" & Trim(UneChaine) & "*'"
Set qry = CurrentDb.CreateQueryDef("tmp", strsql)
DoCmd.OpenQuery "tmp"
CurrentDb.QueryDefs.Delete "tmp"
Set qry = Nothing
End Function
Si rien n'est saisi dans txtSeekCar, tu as tout le jeu d'enregistrements
d'une requête normale. (pas changé avec la 1ère version)
Voila
Bonjour Eric
le temps de reponse est correcte rien a voir avec les 12 secondes voir plus
par rapport au autes methodes je concatenais en mettant un espace entre
chaque champs et de plus par rapport a cette methode peut - on l'adapter à
une zone de texte au lieu de inpubox("Caractère(s) cherché(s)") et mette en
variable le nom de la table et nom le inputbox?
Merci pour tous
Yannick
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Bonjour Yannick,
Un formulaire avec
- une zone de texte pour saisir le nom de la table nommée txtTable
- une zone de texte pour les caractères cherchés nommée txtSeekCar
- un bouton de comande : Commande0
Sur l'évènement clic du bouton de commande:
Private Sub Commande0_Click()
If IsNull(txtTable) Then
MsgBox " Action interrompue", vbInformation
Exit Sub
Else
fConcatChamps Trim(txtTable), Nz(txtSeekCar, "")
End If
End Sub
et la fonction adaptée qui remplace l'autre :
Function fConcatChamps(UneTable As String, UneChaine As String)
Dim t As DAO.TableDef, f As DAO.Field, i as Integer
' ou Dim i as Byte car 255 champs c'est déja pas mal
Dim qry As DAO.QueryDef, reponse As String
Dim strsql As String
For i = 0 To CurrentDb.TableDefs(UneTable).Fields.Count - 1
LesChamps = LesChamps & "[" & _
CurrentDb.TableDefs(UneTable).Fields(i).Name & "] & "
Next i
strsql = "select * from " & UneTable & _
" where " & Left(LesChamps, Len(LesChamps) - 3) & _
" like '*" & Trim(UneChaine) & "*'"
Set qry = CurrentDb.CreateQueryDef("tmp", strsql)
DoCmd.OpenQuery "tmp"
CurrentDb.QueryDefs.Delete "tmp"
Set qry = Nothing
End Function
Si rien n'est saisi dans txtSeekCar, tu as tout le jeu d'enregistrements
d'une requête normale. (pas changé avec la 1ère version)
VoilaBonjour Eric
le temps de reponse est correcte rien a voir avec les 12 secondes voir plus
par rapport au autes methodes je concatenais en mettant un espace entre
chaque champs et de plus par rapport a cette methode peut - on l'adapter à
une zone de texte au lieu de inpubox("Caractère(s) cherché(s)") et mette en
variable le nom de la table et nom le inputbox?
Merci pour tous
Yannick
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Bonjour Yannick,
Un formulaire avec
- une zone de texte pour saisir le nom de la table nommée txtTable
- une zone de texte pour les caractères cherchés nommée txtSeekCar
- un bouton de comande : Commande0
Sur l'évènement clic du bouton de commande:
Private Sub Commande0_Click()
If IsNull(txtTable) Then
MsgBox " Action interrompue", vbInformation
Exit Sub
Else
fConcatChamps Trim(txtTable), Nz(txtSeekCar, "")
End If
End Sub
et la fonction adaptée qui remplace l'autre :
Function fConcatChamps(UneTable As String, UneChaine As String)
Dim t As DAO.TableDef, f As DAO.Field, i as Integer
' ou Dim i as Byte car 255 champs c'est déja pas mal
Dim qry As DAO.QueryDef, reponse As String
Dim strsql As String
For i = 0 To CurrentDb.TableDefs(UneTable).Fields.Count - 1
LesChamps = LesChamps & "[" & _
CurrentDb.TableDefs(UneTable).Fields(i).Name & "] & "
Next i
strsql = "select * from " & UneTable & _
" where " & Left(LesChamps, Len(LesChamps) - 3) & _
" like '*" & Trim(UneChaine) & "*'"
Set qry = CurrentDb.CreateQueryDef("tmp", strsql)
DoCmd.OpenQuery "tmp"
CurrentDb.QueryDefs.Delete "tmp"
Set qry = Nothing
End Function
Si rien n'est saisi dans txtSeekCar, tu as tout le jeu d'enregistrements
d'une requête normale. (pas changé avec la 1ère version)
VoilaBonjour Eric
le temps de reponse est correcte rien a voir avec les 12 secondes voir plus
par rapport au autes methodes je concatenais en mettant un espace entre
chaque champs et de plus par rapport a cette methode peut - on l'adapter à
une zone de texte au lieu de inpubox("Caractère(s) cherché(s)") et mette en
variable le nom de la table et nom le inputbox?
Merci pour tous
Yannick
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Bonjour Yannick,
Un formulaire avec
- une zone de texte pour saisir le nom de la table nommée txtTable
- une zone de texte pour les caractères cherchés nommée txtSeekCar
- un bouton de comande : Commande0
Sur l'évènement clic du bouton de commande:
Private Sub Commande0_Click()
If IsNull(txtTable) Then
MsgBox " Action interrompue", vbInformation
Exit Sub
Else
fConcatChamps Trim(txtTable), Nz(txtSeekCar, "")
End If
End Sub
et la fonction adaptée qui remplace l'autre :
Function fConcatChamps(UneTable As String, UneChaine As String)
Dim t As DAO.TableDef, f As DAO.Field, i as Integer
' ou Dim i as Byte car 255 champs c'est déja pas mal
Dim qry As DAO.QueryDef, reponse As String
Dim strsql As String
For i = 0 To CurrentDb.TableDefs(UneTable).Fields.Count - 1
LesChamps = LesChamps & "[" & _
CurrentDb.TableDefs(UneTable).Fields(i).Name & "] & "
Next i
strsql = "select * from " & UneTable & _
" where " & Left(LesChamps, Len(LesChamps) - 3) & _
" like '*" & Trim(UneChaine) & "*'"
Set qry = CurrentDb.CreateQueryDef("tmp", strsql)
DoCmd.OpenQuery "tmp"
CurrentDb.QueryDefs.Delete "tmp"
Set qry = Nothing
End Function
Si rien n'est saisi dans txtSeekCar, tu as tout le jeu d'enregistrements
d'une requête normale. (pas changé avec la 1ère version)
Voila
Bonjour Eric
le temps de reponse est correcte rien a voir avec les 12 secondes voir plus
par rapport au autes methodes je concatenais en mettant un espace entre
chaque champs et de plus par rapport a cette methode peut - on l'adapter à
une zone de texte au lieu de inpubox("Caractère(s) cherché(s)") et mette en
variable le nom de la table et nom le inputbox?
Merci pour tous
Yannick
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Bonjour Yannick,
Un formulaire avec
- une zone de texte pour saisir le nom de la table nommée txtTable
- une zone de texte pour les caractères cherchés nommée txtSeekCar
- un bouton de comande : Commande0
Sur l'évènement clic du bouton de commande:
Private Sub Commande0_Click()
If IsNull(txtTable) Then
MsgBox " Action interrompue", vbInformation
Exit Sub
Else
fConcatChamps Trim(txtTable), Nz(txtSeekCar, "")
End If
End Sub
et la fonction adaptée qui remplace l'autre :
Function fConcatChamps(UneTable As String, UneChaine As String)
Dim t As DAO.TableDef, f As DAO.Field, i as Integer
' ou Dim i as Byte car 255 champs c'est déja pas mal
Dim qry As DAO.QueryDef, reponse As String
Dim strsql As String
For i = 0 To CurrentDb.TableDefs(UneTable).Fields.Count - 1
LesChamps = LesChamps & "[" & _
CurrentDb.TableDefs(UneTable).Fields(i).Name & "] & "
Next i
strsql = "select * from " & UneTable & _
" where " & Left(LesChamps, Len(LesChamps) - 3) & _
" like '*" & Trim(UneChaine) & "*'"
Set qry = CurrentDb.CreateQueryDef("tmp", strsql)
DoCmd.OpenQuery "tmp"
CurrentDb.QueryDefs.Delete "tmp"
Set qry = Nothing
End Function
Si rien n'est saisi dans txtSeekCar, tu as tout le jeu d'enregistrements
d'une requête normale. (pas changé avec la 1ère version)
VoilaBonjour Eric
le temps de reponse est correcte rien a voir avec les 12 secondes voir plus
par rapport au autes methodes je concatenais en mettant un espace entre
chaque champs et de plus par rapport a cette methode peut - on l'adapter à
une zone de texte au lieu de inpubox("Caractère(s) cherché(s)") et mette en
variable le nom de la table et nom le inputbox?
Merci pour tous
Yannick
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
excuse cela fonctionne
mais j'essaye de mettre un espace entre chaque champs quand la concatenation
s'effectue mais je ne vois pas ou la mettre.
@+
YannickBonjour Yannick,
Un formulaire avec
- une zone de texte pour saisir le nom de la table nommée txtTable
- une zone de texte pour les caractères cherchés nommée txtSeekCar
- un bouton de comande : Commande0
Sur l'évènement clic du bouton de commande:
Private Sub Commande0_Click()
If IsNull(txtTable) Then
MsgBox " Action interrompue", vbInformation
Exit Sub
Else
fConcatChamps Trim(txtTable), Nz(txtSeekCar, "")
End If
End Sub
et la fonction adaptée qui remplace l'autre :
Function fConcatChamps(UneTable As String, UneChaine As String)
Dim t As DAO.TableDef, f As DAO.Field, i as Integer
' ou Dim i as Byte car 255 champs c'est déja pas mal
Dim qry As DAO.QueryDef, reponse As String
Dim strsql As String
For i = 0 To CurrentDb.TableDefs(UneTable).Fields.Count - 1
LesChamps = LesChamps & "[" & _
CurrentDb.TableDefs(UneTable).Fields(i).Name & "] & "
Next i
strsql = "select * from " & UneTable & _
" where " & Left(LesChamps, Len(LesChamps) - 3) & _
" like '*" & Trim(UneChaine) & "*'"
Set qry = CurrentDb.CreateQueryDef("tmp", strsql)
DoCmd.OpenQuery "tmp"
CurrentDb.QueryDefs.Delete "tmp"
Set qry = Nothing
End Function
Si rien n'est saisi dans txtSeekCar, tu as tout le jeu d'enregistrements
d'une requête normale. (pas changé avec la 1ère version)
VoilaBonjour Eric
le temps de reponse est correcte rien a voir avec les 12 secondes voir plus
par rapport au autes methodes je concatenais en mettant un espace entre
chaque champs et de plus par rapport a cette methode peut - on l'adapter à
une zone de texte au lieu de inpubox("Caractère(s) cherché(s)") et mette en
variable le nom de la table et nom le inputbox?
Merci pour tous
Yannick
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
excuse cela fonctionne
mais j'essaye de mettre un espace entre chaque champs quand la concatenation
s'effectue mais je ne vois pas ou la mettre.
@+
Yannick
Bonjour Yannick,
Un formulaire avec
- une zone de texte pour saisir le nom de la table nommée txtTable
- une zone de texte pour les caractères cherchés nommée txtSeekCar
- un bouton de comande : Commande0
Sur l'évènement clic du bouton de commande:
Private Sub Commande0_Click()
If IsNull(txtTable) Then
MsgBox " Action interrompue", vbInformation
Exit Sub
Else
fConcatChamps Trim(txtTable), Nz(txtSeekCar, "")
End If
End Sub
et la fonction adaptée qui remplace l'autre :
Function fConcatChamps(UneTable As String, UneChaine As String)
Dim t As DAO.TableDef, f As DAO.Field, i as Integer
' ou Dim i as Byte car 255 champs c'est déja pas mal
Dim qry As DAO.QueryDef, reponse As String
Dim strsql As String
For i = 0 To CurrentDb.TableDefs(UneTable).Fields.Count - 1
LesChamps = LesChamps & "[" & _
CurrentDb.TableDefs(UneTable).Fields(i).Name & "] & "
Next i
strsql = "select * from " & UneTable & _
" where " & Left(LesChamps, Len(LesChamps) - 3) & _
" like '*" & Trim(UneChaine) & "*'"
Set qry = CurrentDb.CreateQueryDef("tmp", strsql)
DoCmd.OpenQuery "tmp"
CurrentDb.QueryDefs.Delete "tmp"
Set qry = Nothing
End Function
Si rien n'est saisi dans txtSeekCar, tu as tout le jeu d'enregistrements
d'une requête normale. (pas changé avec la 1ère version)
Voila
Bonjour Eric
le temps de reponse est correcte rien a voir avec les 12 secondes voir plus
par rapport au autes methodes je concatenais en mettant un espace entre
chaque champs et de plus par rapport a cette methode peut - on l'adapter à
une zone de texte au lieu de inpubox("Caractère(s) cherché(s)") et mette en
variable le nom de la table et nom le inputbox?
Merci pour tous
Yannick
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
excuse cela fonctionne
mais j'essaye de mettre un espace entre chaque champs quand la concatenation
s'effectue mais je ne vois pas ou la mettre.
@+
YannickBonjour Yannick,
Un formulaire avec
- une zone de texte pour saisir le nom de la table nommée txtTable
- une zone de texte pour les caractères cherchés nommée txtSeekCar
- un bouton de comande : Commande0
Sur l'évènement clic du bouton de commande:
Private Sub Commande0_Click()
If IsNull(txtTable) Then
MsgBox " Action interrompue", vbInformation
Exit Sub
Else
fConcatChamps Trim(txtTable), Nz(txtSeekCar, "")
End If
End Sub
et la fonction adaptée qui remplace l'autre :
Function fConcatChamps(UneTable As String, UneChaine As String)
Dim t As DAO.TableDef, f As DAO.Field, i as Integer
' ou Dim i as Byte car 255 champs c'est déja pas mal
Dim qry As DAO.QueryDef, reponse As String
Dim strsql As String
For i = 0 To CurrentDb.TableDefs(UneTable).Fields.Count - 1
LesChamps = LesChamps & "[" & _
CurrentDb.TableDefs(UneTable).Fields(i).Name & "] & "
Next i
strsql = "select * from " & UneTable & _
" where " & Left(LesChamps, Len(LesChamps) - 3) & _
" like '*" & Trim(UneChaine) & "*'"
Set qry = CurrentDb.CreateQueryDef("tmp", strsql)
DoCmd.OpenQuery "tmp"
CurrentDb.QueryDefs.Delete "tmp"
Set qry = Nothing
End Function
Si rien n'est saisi dans txtSeekCar, tu as tout le jeu d'enregistrements
d'une requête normale. (pas changé avec la 1ère version)
VoilaBonjour Eric
le temps de reponse est correcte rien a voir avec les 12 secondes voir plus
par rapport au autes methodes je concatenais en mettant un espace entre
chaque champs et de plus par rapport a cette methode peut - on l'adapter à
une zone de texte au lieu de inpubox("Caractère(s) cherché(s)") et mette en
variable le nom de la table et nom le inputbox?
Merci pour tous
Yannick
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
excuse cela fonctionne
mais j'essaye de mettre un espace entre chaque champs quand la concatenation
s'effectue mais je ne vois pas ou la mettre.
@+
Yannick
--
excuse cela fonctionne
mais j'essaye de mettre un espace entre chaque champs quand la concatenation
s'effectue mais je ne vois pas ou la mettre.
@+
Yannick
--
excuse cela fonctionne
mais j'essaye de mettre un espace entre chaque champs quand la concatenation
s'effectue mais je ne vois pas ou la mettre.
@+
Yannick
--
Re,
Tu n'as pas besoin de mettre les champs, la requête s'en occupe.
Tu saisis le nom de ta table dans la zone de texte txtTable et les
caractères que tu cherches dans les champs (il s'agit de caractères qui
se suivent). Quand tu cliques sur le bouton, la requête créée par la
fonction s'ouvre avec les enregistrements répondant au critère de recherche.
Tu avais demandé à avoir les enregistrements qui contenaien une certaine
chaine de caractères dans quelque champ que ce soit. Tu as changé d'avis ?
Testes avec le jeu d'essai de ton 1er post.excuse cela fonctionne
mais j'essaye de mettre un espace entre chaque champs quand la concatenation
s'effectue mais je ne vois pas ou la mettre.
@+
YannickBonjour Yannick,
Un formulaire avec
- une zone de texte pour saisir le nom de la table nommée txtTable
- une zone de texte pour les caractères cherchés nommée txtSeekCar
- un bouton de comande : Commande0
Sur l'évènement clic du bouton de commande:
Private Sub Commande0_Click()
If IsNull(txtTable) Then
MsgBox " Action interrompue", vbInformation
Exit Sub
Else
fConcatChamps Trim(txtTable), Nz(txtSeekCar, "")
End If
End Sub
et la fonction adaptée qui remplace l'autre :
Function fConcatChamps(UneTable As String, UneChaine As String)
Dim t As DAO.TableDef, f As DAO.Field, i as Integer
' ou Dim i as Byte car 255 champs c'est déja pas mal
Dim qry As DAO.QueryDef, reponse As String
Dim strsql As String
For i = 0 To CurrentDb.TableDefs(UneTable).Fields.Count - 1
LesChamps = LesChamps & "[" & _
CurrentDb.TableDefs(UneTable).Fields(i).Name & "] & "
Next i
strsql = "select * from " & UneTable & _
" where " & Left(LesChamps, Len(LesChamps) - 3) & _
" like '*" & Trim(UneChaine) & "*'"
Set qry = CurrentDb.CreateQueryDef("tmp", strsql)
DoCmd.OpenQuery "tmp"
CurrentDb.QueryDefs.Delete "tmp"
Set qry = Nothing
End Function
Si rien n'est saisi dans txtSeekCar, tu as tout le jeu d'enregistrements
d'une requête normale. (pas changé avec la 1ère version)
VoilaBonjour Eric
le temps de reponse est correcte rien a voir avec les 12 secondes voir plus
par rapport au autes methodes je concatenais en mettant un espace entre
chaque champs et de plus par rapport a cette methode peut - on l'adapter à
une zone de texte au lieu de inpubox("Caractère(s) cherché(s)") et mette en
variable le nom de la table et nom le inputbox?
Merci pour tous
Yannick
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Re,
Tu n'as pas besoin de mettre les champs, la requête s'en occupe.
Tu saisis le nom de ta table dans la zone de texte txtTable et les
caractères que tu cherches dans les champs (il s'agit de caractères qui
se suivent). Quand tu cliques sur le bouton, la requête créée par la
fonction s'ouvre avec les enregistrements répondant au critère de recherche.
Tu avais demandé à avoir les enregistrements qui contenaien une certaine
chaine de caractères dans quelque champ que ce soit. Tu as changé d'avis ?
Testes avec le jeu d'essai de ton 1er post.
excuse cela fonctionne
mais j'essaye de mettre un espace entre chaque champs quand la concatenation
s'effectue mais je ne vois pas ou la mettre.
@+
Yannick
Bonjour Yannick,
Un formulaire avec
- une zone de texte pour saisir le nom de la table nommée txtTable
- une zone de texte pour les caractères cherchés nommée txtSeekCar
- un bouton de comande : Commande0
Sur l'évènement clic du bouton de commande:
Private Sub Commande0_Click()
If IsNull(txtTable) Then
MsgBox " Action interrompue", vbInformation
Exit Sub
Else
fConcatChamps Trim(txtTable), Nz(txtSeekCar, "")
End If
End Sub
et la fonction adaptée qui remplace l'autre :
Function fConcatChamps(UneTable As String, UneChaine As String)
Dim t As DAO.TableDef, f As DAO.Field, i as Integer
' ou Dim i as Byte car 255 champs c'est déja pas mal
Dim qry As DAO.QueryDef, reponse As String
Dim strsql As String
For i = 0 To CurrentDb.TableDefs(UneTable).Fields.Count - 1
LesChamps = LesChamps & "[" & _
CurrentDb.TableDefs(UneTable).Fields(i).Name & "] & "
Next i
strsql = "select * from " & UneTable & _
" where " & Left(LesChamps, Len(LesChamps) - 3) & _
" like '*" & Trim(UneChaine) & "*'"
Set qry = CurrentDb.CreateQueryDef("tmp", strsql)
DoCmd.OpenQuery "tmp"
CurrentDb.QueryDefs.Delete "tmp"
Set qry = Nothing
End Function
Si rien n'est saisi dans txtSeekCar, tu as tout le jeu d'enregistrements
d'une requête normale. (pas changé avec la 1ère version)
Voila
Bonjour Eric
le temps de reponse est correcte rien a voir avec les 12 secondes voir plus
par rapport au autes methodes je concatenais en mettant un espace entre
chaque champs et de plus par rapport a cette methode peut - on l'adapter à
une zone de texte au lieu de inpubox("Caractère(s) cherché(s)") et mette en
variable le nom de la table et nom le inputbox?
Merci pour tous
Yannick
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Re,
Tu n'as pas besoin de mettre les champs, la requête s'en occupe.
Tu saisis le nom de ta table dans la zone de texte txtTable et les
caractères que tu cherches dans les champs (il s'agit de caractères qui
se suivent). Quand tu cliques sur le bouton, la requête créée par la
fonction s'ouvre avec les enregistrements répondant au critère de recherche.
Tu avais demandé à avoir les enregistrements qui contenaien une certaine
chaine de caractères dans quelque champ que ce soit. Tu as changé d'avis ?
Testes avec le jeu d'essai de ton 1er post.excuse cela fonctionne
mais j'essaye de mettre un espace entre chaque champs quand la concatenation
s'effectue mais je ne vois pas ou la mettre.
@+
YannickBonjour Yannick,
Un formulaire avec
- une zone de texte pour saisir le nom de la table nommée txtTable
- une zone de texte pour les caractères cherchés nommée txtSeekCar
- un bouton de comande : Commande0
Sur l'évènement clic du bouton de commande:
Private Sub Commande0_Click()
If IsNull(txtTable) Then
MsgBox " Action interrompue", vbInformation
Exit Sub
Else
fConcatChamps Trim(txtTable), Nz(txtSeekCar, "")
End If
End Sub
et la fonction adaptée qui remplace l'autre :
Function fConcatChamps(UneTable As String, UneChaine As String)
Dim t As DAO.TableDef, f As DAO.Field, i as Integer
' ou Dim i as Byte car 255 champs c'est déja pas mal
Dim qry As DAO.QueryDef, reponse As String
Dim strsql As String
For i = 0 To CurrentDb.TableDefs(UneTable).Fields.Count - 1
LesChamps = LesChamps & "[" & _
CurrentDb.TableDefs(UneTable).Fields(i).Name & "] & "
Next i
strsql = "select * from " & UneTable & _
" where " & Left(LesChamps, Len(LesChamps) - 3) & _
" like '*" & Trim(UneChaine) & "*'"
Set qry = CurrentDb.CreateQueryDef("tmp", strsql)
DoCmd.OpenQuery "tmp"
CurrentDb.QueryDefs.Delete "tmp"
Set qry = Nothing
End Function
Si rien n'est saisi dans txtSeekCar, tu as tout le jeu d'enregistrements
d'une requête normale. (pas changé avec la 1ère version)
VoilaBonjour Eric
le temps de reponse est correcte rien a voir avec les 12 secondes voir plus
par rapport au autes methodes je concatenais en mettant un espace entre
chaque champs et de plus par rapport a cette methode peut - on l'adapter à
une zone de texte au lieu de inpubox("Caractère(s) cherché(s)") et mette en
variable le nom de la table et nom le inputbox?
Merci pour tous
Yannick
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
..../...
Tu veux afficher la chaine concaténée avec un espace entre chacun des
éléments ?
Si c'est le cas, confirmes car la modification est simple.
De plus, la requête est créée, ouverte puis détruite. Donc si tu veux
faire de la mise en forme, puis la conserver jusqu'à la prochaine fois
faut que je modifie aussi. Donc précises exactement ce que tu veux.excuse cela fonctionne
mais j'essaye de mettre un espace entre chaque champs quand la concatenation
s'effectue mais je ne vois pas ou la mettre.
@+
Yannick
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
..../...
Tu veux afficher la chaine concaténée avec un espace entre chacun des
éléments ?
Si c'est le cas, confirmes car la modification est simple.
De plus, la requête est créée, ouverte puis détruite. Donc si tu veux
faire de la mise en forme, puis la conserver jusqu'à la prochaine fois
faut que je modifie aussi. Donc précises exactement ce que tu veux.
excuse cela fonctionne
mais j'essaye de mettre un espace entre chaque champs quand la concatenation
s'effectue mais je ne vois pas ou la mettre.
@+
Yannick
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
..../...
Tu veux afficher la chaine concaténée avec un espace entre chacun des
éléments ?
Si c'est le cas, confirmes car la modification est simple.
De plus, la requête est créée, ouverte puis détruite. Donc si tu veux
faire de la mise en forme, puis la conserver jusqu'à la prochaine fois
faut que je modifie aussi. Donc précises exactement ce que tu veux.excuse cela fonctionne
mais j'essaye de mettre un espace entre chaque champs quand la concatenation
s'effectue mais je ne vois pas ou la mettre.
@+
Yannick
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Je n'ai pas changé d'avis mais j'avais rajouter un espace entre chaque champs
dans tes solutions car sinon j'obtiens pour un critere de recherche :75000
id nom adresse cp ville
01 toto rue fr 69000 pbbb
02 tata rue de 22000 cccc
03 titi toto 75000 paris
04 tutu rue 75000 tokkkkk
75 00tr uuu 2200 yyyyyy
resultat
id nom adresse cp ville
03 titi toto 75000 paris
04 tutu rue 75000 tokkkkk
75 00tr uuu 2200 yyyyyy
Et la ce n'est pas bon pour le troisieme enregistrement.
est ce que tu vois pourquoi je dois rajouter un espace entre chaque champs
pour que mon resultat soit correcte
@+
YannnickRe,
Tu n'as pas besoin de mettre les champs, la requête s'en occupe.
Tu saisis le nom de ta table dans la zone de texte txtTable et les
caractères que tu cherches dans les champs (il s'agit de caractères qui
se suivent). Quand tu cliques sur le bouton, la requête créée par la
fonction s'ouvre avec les enregistrements répondant au critère de recherche.
Tu avais demandé à avoir les enregistrements qui contenaien une certaine
chaine de caractères dans quelque champ que ce soit. Tu as changé d'avis ?
Testes avec le jeu d'essai de ton 1er post.excuse cela fonctionne
mais j'essaye de mettre un espace entre chaque champs quand la concatenation
s'effectue mais je ne vois pas ou la mettre.
@+
YannickBonjour Yannick,
Un formulaire avec
- une zone de texte pour saisir le nom de la table nommée txtTable
- une zone de texte pour les caractères cherchés nommée txtSeekCar
- un bouton de comande : Commande0
Sur l'évènement clic du bouton de commande:
Private Sub Commande0_Click()
If IsNull(txtTable) Then
MsgBox " Action interrompue", vbInformation
Exit Sub
Else
fConcatChamps Trim(txtTable), Nz(txtSeekCar, "")
End If
End Sub
et la fonction adaptée qui remplace l'autre :
Function fConcatChamps(UneTable As String, UneChaine As String)
Dim t As DAO.TableDef, f As DAO.Field, i as Integer
' ou Dim i as Byte car 255 champs c'est déja pas mal
Dim qry As DAO.QueryDef, reponse As String
Dim strsql As String
For i = 0 To CurrentDb.TableDefs(UneTable).Fields.Count - 1
LesChamps = LesChamps & "[" & _
CurrentDb.TableDefs(UneTable).Fields(i).Name & "] & "
Next i
strsql = "select * from " & UneTable & _
" where " & Left(LesChamps, Len(LesChamps) - 3) & _
" like '*" & Trim(UneChaine) & "*'"
Set qry = CurrentDb.CreateQueryDef("tmp", strsql)
DoCmd.OpenQuery "tmp"
CurrentDb.QueryDefs.Delete "tmp"
Set qry = Nothing
End Function
Si rien n'est saisi dans txtSeekCar, tu as tout le jeu d'enregistrements
d'une requête normale. (pas changé avec la 1ère version)
VoilaBonjour Eric
le temps de reponse est correcte rien a voir avec les 12 secondes voir plus
par rapport au autes methodes je concatenais en mettant un espace entre
chaque champs et de plus par rapport a cette methode peut - on l'adapter à
une zone de texte au lieu de inpubox("Caractère(s) cherché(s)") et mette en
variable le nom de la table et nom le inputbox?
Merci pour tous
Yannick
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Je n'ai pas changé d'avis mais j'avais rajouter un espace entre chaque champs
dans tes solutions car sinon j'obtiens pour un critere de recherche :75000
id nom adresse cp ville
01 toto rue fr 69000 pbbb
02 tata rue de 22000 cccc
03 titi toto 75000 paris
04 tutu rue 75000 tokkkkk
75 00tr uuu 2200 yyyyyy
resultat
id nom adresse cp ville
03 titi toto 75000 paris
04 tutu rue 75000 tokkkkk
75 00tr uuu 2200 yyyyyy
Et la ce n'est pas bon pour le troisieme enregistrement.
est ce que tu vois pourquoi je dois rajouter un espace entre chaque champs
pour que mon resultat soit correcte
@+
Yannnick
Re,
Tu n'as pas besoin de mettre les champs, la requête s'en occupe.
Tu saisis le nom de ta table dans la zone de texte txtTable et les
caractères que tu cherches dans les champs (il s'agit de caractères qui
se suivent). Quand tu cliques sur le bouton, la requête créée par la
fonction s'ouvre avec les enregistrements répondant au critère de recherche.
Tu avais demandé à avoir les enregistrements qui contenaien une certaine
chaine de caractères dans quelque champ que ce soit. Tu as changé d'avis ?
Testes avec le jeu d'essai de ton 1er post.
excuse cela fonctionne
mais j'essaye de mettre un espace entre chaque champs quand la concatenation
s'effectue mais je ne vois pas ou la mettre.
@+
Yannick
Bonjour Yannick,
Un formulaire avec
- une zone de texte pour saisir le nom de la table nommée txtTable
- une zone de texte pour les caractères cherchés nommée txtSeekCar
- un bouton de comande : Commande0
Sur l'évènement clic du bouton de commande:
Private Sub Commande0_Click()
If IsNull(txtTable) Then
MsgBox " Action interrompue", vbInformation
Exit Sub
Else
fConcatChamps Trim(txtTable), Nz(txtSeekCar, "")
End If
End Sub
et la fonction adaptée qui remplace l'autre :
Function fConcatChamps(UneTable As String, UneChaine As String)
Dim t As DAO.TableDef, f As DAO.Field, i as Integer
' ou Dim i as Byte car 255 champs c'est déja pas mal
Dim qry As DAO.QueryDef, reponse As String
Dim strsql As String
For i = 0 To CurrentDb.TableDefs(UneTable).Fields.Count - 1
LesChamps = LesChamps & "[" & _
CurrentDb.TableDefs(UneTable).Fields(i).Name & "] & "
Next i
strsql = "select * from " & UneTable & _
" where " & Left(LesChamps, Len(LesChamps) - 3) & _
" like '*" & Trim(UneChaine) & "*'"
Set qry = CurrentDb.CreateQueryDef("tmp", strsql)
DoCmd.OpenQuery "tmp"
CurrentDb.QueryDefs.Delete "tmp"
Set qry = Nothing
End Function
Si rien n'est saisi dans txtSeekCar, tu as tout le jeu d'enregistrements
d'une requête normale. (pas changé avec la 1ère version)
Voila
Bonjour Eric
le temps de reponse est correcte rien a voir avec les 12 secondes voir plus
par rapport au autes methodes je concatenais en mettant un espace entre
chaque champs et de plus par rapport a cette methode peut - on l'adapter à
une zone de texte au lieu de inpubox("Caractère(s) cherché(s)") et mette en
variable le nom de la table et nom le inputbox?
Merci pour tous
Yannick
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Je n'ai pas changé d'avis mais j'avais rajouter un espace entre chaque champs
dans tes solutions car sinon j'obtiens pour un critere de recherche :75000
id nom adresse cp ville
01 toto rue fr 69000 pbbb
02 tata rue de 22000 cccc
03 titi toto 75000 paris
04 tutu rue 75000 tokkkkk
75 00tr uuu 2200 yyyyyy
resultat
id nom adresse cp ville
03 titi toto 75000 paris
04 tutu rue 75000 tokkkkk
75 00tr uuu 2200 yyyyyy
Et la ce n'est pas bon pour le troisieme enregistrement.
est ce que tu vois pourquoi je dois rajouter un espace entre chaque champs
pour que mon resultat soit correcte
@+
YannnickRe,
Tu n'as pas besoin de mettre les champs, la requête s'en occupe.
Tu saisis le nom de ta table dans la zone de texte txtTable et les
caractères que tu cherches dans les champs (il s'agit de caractères qui
se suivent). Quand tu cliques sur le bouton, la requête créée par la
fonction s'ouvre avec les enregistrements répondant au critère de recherche.
Tu avais demandé à avoir les enregistrements qui contenaien une certaine
chaine de caractères dans quelque champ que ce soit. Tu as changé d'avis ?
Testes avec le jeu d'essai de ton 1er post.excuse cela fonctionne
mais j'essaye de mettre un espace entre chaque champs quand la concatenation
s'effectue mais je ne vois pas ou la mettre.
@+
YannickBonjour Yannick,
Un formulaire avec
- une zone de texte pour saisir le nom de la table nommée txtTable
- une zone de texte pour les caractères cherchés nommée txtSeekCar
- un bouton de comande : Commande0
Sur l'évènement clic du bouton de commande:
Private Sub Commande0_Click()
If IsNull(txtTable) Then
MsgBox " Action interrompue", vbInformation
Exit Sub
Else
fConcatChamps Trim(txtTable), Nz(txtSeekCar, "")
End If
End Sub
et la fonction adaptée qui remplace l'autre :
Function fConcatChamps(UneTable As String, UneChaine As String)
Dim t As DAO.TableDef, f As DAO.Field, i as Integer
' ou Dim i as Byte car 255 champs c'est déja pas mal
Dim qry As DAO.QueryDef, reponse As String
Dim strsql As String
For i = 0 To CurrentDb.TableDefs(UneTable).Fields.Count - 1
LesChamps = LesChamps & "[" & _
CurrentDb.TableDefs(UneTable).Fields(i).Name & "] & "
Next i
strsql = "select * from " & UneTable & _
" where " & Left(LesChamps, Len(LesChamps) - 3) & _
" like '*" & Trim(UneChaine) & "*'"
Set qry = CurrentDb.CreateQueryDef("tmp", strsql)
DoCmd.OpenQuery "tmp"
CurrentDb.QueryDefs.Delete "tmp"
Set qry = Nothing
End Function
Si rien n'est saisi dans txtSeekCar, tu as tout le jeu d'enregistrements
d'une requête normale. (pas changé avec la 1ère version)
VoilaBonjour Eric
le temps de reponse est correcte rien a voir avec les 12 secondes voir plus
par rapport au autes methodes je concatenais en mettant un espace entre
chaque champs et de plus par rapport a cette methode peut - on l'adapter à
une zone de texte au lieu de inpubox("Caractère(s) cherché(s)") et mette en
variable le nom de la table et nom le inputbox?
Merci pour tous
Yannick
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
voila la correction :
Function fConcatChamps(UneTable As String, UneChaine As String)
Dim t As DAO.TableDef, f As DAO.Field
Dim qry As DAO.QueryDef, reponse As String
Dim strsql As String
' ici la modif, rajout d'espaces
For i = 0 To CurrentDb.TableDefs(UneTable).Fields.Count - 1
LesChamps = LesChamps & "[" & _
CurrentDb.TableDefs(UneTable).Fields(i).Name & "]" & " & ' ' & "
Next i
' Et encore là, suppression des caractères (8)
' après le dernier champ
strsql = "select *" & " from " & UneTable & _
" where " & Left(LesChamps, Len(LesChamps) - 8) & _
" like '*" & Trim(UneChaine) & "*'"
Set qry = CurrentDb.CreateQueryDef("tmp", strsql)
DoCmd.OpenQuery "tmp"
CurrentDb.QueryDefs.Delete "tmp"
Set qry = Nothing
End Function
Si pas bon, le dire.Je n'ai pas changé d'avis mais j'avais rajouter un espace entre chaque champs
dans tes solutions car sinon j'obtiens pour un critere de recherche :75000
id nom adresse cp ville
01 toto rue fr 69000 pbbb
02 tata rue de 22000 cccc
03 titi toto 75000 paris
04 tutu rue 75000 tokkkkk
75 00tr uuu 2200 yyyyyy
resultat
id nom adresse cp ville
03 titi toto 75000 paris
04 tutu rue 75000 tokkkkk
75 00tr uuu 2200 yyyyyy
Et la ce n'est pas bon pour le troisieme enregistrement.
est ce que tu vois pourquoi je dois rajouter un espace entre chaque champs
pour que mon resultat soit correcte
@+
YannnickRe,
Tu n'as pas besoin de mettre les champs, la requête s'en occupe.
Tu saisis le nom de ta table dans la zone de texte txtTable et les
caractères que tu cherches dans les champs (il s'agit de caractères qui
se suivent). Quand tu cliques sur le bouton, la requête créée par la
fonction s'ouvre avec les enregistrements répondant au critère de recherche.
Tu avais demandé à avoir les enregistrements qui contenaien une certaine
chaine de caractères dans quelque champ que ce soit. Tu as changé d'avis ?
Testes avec le jeu d'essai de ton 1er post.excuse cela fonctionne
mais j'essaye de mettre un espace entre chaque champs quand la concatenation
s'effectue mais je ne vois pas ou la mettre.
@+
YannickBonjour Yannick,
Un formulaire avec
- une zone de texte pour saisir le nom de la table nommée txtTable
- une zone de texte pour les caractères cherchés nommée txtSeekCar
- un bouton de comande : Commande0
Sur l'évènement clic du bouton de commande:
Private Sub Commande0_Click()
If IsNull(txtTable) Then
MsgBox " Action interrompue", vbInformation
Exit Sub
Else
fConcatChamps Trim(txtTable), Nz(txtSeekCar, "")
End If
End Sub
et la fonction adaptée qui remplace l'autre :
Function fConcatChamps(UneTable As String, UneChaine As String)
Dim t As DAO.TableDef, f As DAO.Field, i as Integer
' ou Dim i as Byte car 255 champs c'est déja pas mal
Dim qry As DAO.QueryDef, reponse As String
Dim strsql As String
For i = 0 To CurrentDb.TableDefs(UneTable).Fields.Count - 1
LesChamps = LesChamps & "[" & _
CurrentDb.TableDefs(UneTable).Fields(i).Name & "] & "
Next i
strsql = "select * from " & UneTable & _
" where " & Left(LesChamps, Len(LesChamps) - 3) & _
" like '*" & Trim(UneChaine) & "*'"
Set qry = CurrentDb.CreateQueryDef("tmp", strsql)
DoCmd.OpenQuery "tmp"
CurrentDb.QueryDefs.Delete "tmp"
Set qry = Nothing
End Function
Si rien n'est saisi dans txtSeekCar, tu as tout le jeu d'enregistrements
d'une requête normale. (pas changé avec la 1ère version)
VoilaBonjour Eric
le temps de reponse est correcte rien a voir avec les 12 secondes voir plus
par rapport au autes methodes je concatenais en mettant un espace entre
chaque champs et de plus par rapport a cette methode peut - on l'adapter à
une zone de texte au lieu de inpubox("Caractère(s) cherché(s)") et mette en
variable le nom de la table et nom le inputbox?
Merci pour tous
Yannick
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
voila la correction :
Function fConcatChamps(UneTable As String, UneChaine As String)
Dim t As DAO.TableDef, f As DAO.Field
Dim qry As DAO.QueryDef, reponse As String
Dim strsql As String
' ici la modif, rajout d'espaces
For i = 0 To CurrentDb.TableDefs(UneTable).Fields.Count - 1
LesChamps = LesChamps & "[" & _
CurrentDb.TableDefs(UneTable).Fields(i).Name & "]" & " & ' ' & "
Next i
' Et encore là, suppression des caractères (8)
' après le dernier champ
strsql = "select *" & " from " & UneTable & _
" where " & Left(LesChamps, Len(LesChamps) - 8) & _
" like '*" & Trim(UneChaine) & "*'"
Set qry = CurrentDb.CreateQueryDef("tmp", strsql)
DoCmd.OpenQuery "tmp"
CurrentDb.QueryDefs.Delete "tmp"
Set qry = Nothing
End Function
Si pas bon, le dire.
Je n'ai pas changé d'avis mais j'avais rajouter un espace entre chaque champs
dans tes solutions car sinon j'obtiens pour un critere de recherche :75000
id nom adresse cp ville
01 toto rue fr 69000 pbbb
02 tata rue de 22000 cccc
03 titi toto 75000 paris
04 tutu rue 75000 tokkkkk
75 00tr uuu 2200 yyyyyy
resultat
id nom adresse cp ville
03 titi toto 75000 paris
04 tutu rue 75000 tokkkkk
75 00tr uuu 2200 yyyyyy
Et la ce n'est pas bon pour le troisieme enregistrement.
est ce que tu vois pourquoi je dois rajouter un espace entre chaque champs
pour que mon resultat soit correcte
@+
Yannnick
Re,
Tu n'as pas besoin de mettre les champs, la requête s'en occupe.
Tu saisis le nom de ta table dans la zone de texte txtTable et les
caractères que tu cherches dans les champs (il s'agit de caractères qui
se suivent). Quand tu cliques sur le bouton, la requête créée par la
fonction s'ouvre avec les enregistrements répondant au critère de recherche.
Tu avais demandé à avoir les enregistrements qui contenaien une certaine
chaine de caractères dans quelque champ que ce soit. Tu as changé d'avis ?
Testes avec le jeu d'essai de ton 1er post.
excuse cela fonctionne
mais j'essaye de mettre un espace entre chaque champs quand la concatenation
s'effectue mais je ne vois pas ou la mettre.
@+
Yannick
Bonjour Yannick,
Un formulaire avec
- une zone de texte pour saisir le nom de la table nommée txtTable
- une zone de texte pour les caractères cherchés nommée txtSeekCar
- un bouton de comande : Commande0
Sur l'évènement clic du bouton de commande:
Private Sub Commande0_Click()
If IsNull(txtTable) Then
MsgBox " Action interrompue", vbInformation
Exit Sub
Else
fConcatChamps Trim(txtTable), Nz(txtSeekCar, "")
End If
End Sub
et la fonction adaptée qui remplace l'autre :
Function fConcatChamps(UneTable As String, UneChaine As String)
Dim t As DAO.TableDef, f As DAO.Field, i as Integer
' ou Dim i as Byte car 255 champs c'est déja pas mal
Dim qry As DAO.QueryDef, reponse As String
Dim strsql As String
For i = 0 To CurrentDb.TableDefs(UneTable).Fields.Count - 1
LesChamps = LesChamps & "[" & _
CurrentDb.TableDefs(UneTable).Fields(i).Name & "] & "
Next i
strsql = "select * from " & UneTable & _
" where " & Left(LesChamps, Len(LesChamps) - 3) & _
" like '*" & Trim(UneChaine) & "*'"
Set qry = CurrentDb.CreateQueryDef("tmp", strsql)
DoCmd.OpenQuery "tmp"
CurrentDb.QueryDefs.Delete "tmp"
Set qry = Nothing
End Function
Si rien n'est saisi dans txtSeekCar, tu as tout le jeu d'enregistrements
d'une requête normale. (pas changé avec la 1ère version)
Voila
Bonjour Eric
le temps de reponse est correcte rien a voir avec les 12 secondes voir plus
par rapport au autes methodes je concatenais en mettant un espace entre
chaque champs et de plus par rapport a cette methode peut - on l'adapter à
une zone de texte au lieu de inpubox("Caractère(s) cherché(s)") et mette en
variable le nom de la table et nom le inputbox?
Merci pour tous
Yannick
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
voila la correction :
Function fConcatChamps(UneTable As String, UneChaine As String)
Dim t As DAO.TableDef, f As DAO.Field
Dim qry As DAO.QueryDef, reponse As String
Dim strsql As String
' ici la modif, rajout d'espaces
For i = 0 To CurrentDb.TableDefs(UneTable).Fields.Count - 1
LesChamps = LesChamps & "[" & _
CurrentDb.TableDefs(UneTable).Fields(i).Name & "]" & " & ' ' & "
Next i
' Et encore là, suppression des caractères (8)
' après le dernier champ
strsql = "select *" & " from " & UneTable & _
" where " & Left(LesChamps, Len(LesChamps) - 8) & _
" like '*" & Trim(UneChaine) & "*'"
Set qry = CurrentDb.CreateQueryDef("tmp", strsql)
DoCmd.OpenQuery "tmp"
CurrentDb.QueryDefs.Delete "tmp"
Set qry = Nothing
End Function
Si pas bon, le dire.Je n'ai pas changé d'avis mais j'avais rajouter un espace entre chaque champs
dans tes solutions car sinon j'obtiens pour un critere de recherche :75000
id nom adresse cp ville
01 toto rue fr 69000 pbbb
02 tata rue de 22000 cccc
03 titi toto 75000 paris
04 tutu rue 75000 tokkkkk
75 00tr uuu 2200 yyyyyy
resultat
id nom adresse cp ville
03 titi toto 75000 paris
04 tutu rue 75000 tokkkkk
75 00tr uuu 2200 yyyyyy
Et la ce n'est pas bon pour le troisieme enregistrement.
est ce que tu vois pourquoi je dois rajouter un espace entre chaque champs
pour que mon resultat soit correcte
@+
YannnickRe,
Tu n'as pas besoin de mettre les champs, la requête s'en occupe.
Tu saisis le nom de ta table dans la zone de texte txtTable et les
caractères que tu cherches dans les champs (il s'agit de caractères qui
se suivent). Quand tu cliques sur le bouton, la requête créée par la
fonction s'ouvre avec les enregistrements répondant au critère de recherche.
Tu avais demandé à avoir les enregistrements qui contenaien une certaine
chaine de caractères dans quelque champ que ce soit. Tu as changé d'avis ?
Testes avec le jeu d'essai de ton 1er post.excuse cela fonctionne
mais j'essaye de mettre un espace entre chaque champs quand la concatenation
s'effectue mais je ne vois pas ou la mettre.
@+
YannickBonjour Yannick,
Un formulaire avec
- une zone de texte pour saisir le nom de la table nommée txtTable
- une zone de texte pour les caractères cherchés nommée txtSeekCar
- un bouton de comande : Commande0
Sur l'évènement clic du bouton de commande:
Private Sub Commande0_Click()
If IsNull(txtTable) Then
MsgBox " Action interrompue", vbInformation
Exit Sub
Else
fConcatChamps Trim(txtTable), Nz(txtSeekCar, "")
End If
End Sub
et la fonction adaptée qui remplace l'autre :
Function fConcatChamps(UneTable As String, UneChaine As String)
Dim t As DAO.TableDef, f As DAO.Field, i as Integer
' ou Dim i as Byte car 255 champs c'est déja pas mal
Dim qry As DAO.QueryDef, reponse As String
Dim strsql As String
For i = 0 To CurrentDb.TableDefs(UneTable).Fields.Count - 1
LesChamps = LesChamps & "[" & _
CurrentDb.TableDefs(UneTable).Fields(i).Name & "] & "
Next i
strsql = "select * from " & UneTable & _
" where " & Left(LesChamps, Len(LesChamps) - 3) & _
" like '*" & Trim(UneChaine) & "*'"
Set qry = CurrentDb.CreateQueryDef("tmp", strsql)
DoCmd.OpenQuery "tmp"
CurrentDb.QueryDefs.Delete "tmp"
Set qry = Nothing
End Function
Si rien n'est saisi dans txtSeekCar, tu as tout le jeu d'enregistrements
d'une requête normale. (pas changé avec la 1ère version)
VoilaBonjour Eric
le temps de reponse est correcte rien a voir avec les 12 secondes voir plus
par rapport au autes methodes je concatenais en mettant un espace entre
chaque champs et de plus par rapport a cette methode peut - on l'adapter à
une zone de texte au lieu de inpubox("Caractère(s) cherché(s)") et mette en
variable le nom de la table et nom le inputbox?
Merci pour tous
Yannick
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr