Mini moteur de recherche sous access - VB/VBA/VBS - Programmation
Marsh Posté le 05-07-2004 à 17:07:53
1- ?
2- Voir objet.SetFocus (qui envoie le curseur sur l'objet)
3- Voir propriété TabIndex (qui donne la sequence de selection quand on appuie sur "TAB" ).
Marsh Posté le 05-07-2004 à 17:08:52
Mazurier veux, HFR donner
Marsh Posté le 05-07-2004 à 17:20:00
ben j'avais deja essayé pour setfocus mais ca marche po !
j'ai fait zonetext.setfocus (je pense que c'est tout ce qu'il faut mettre ) mais il veut pas
merci pour le 3
pour le 1, je voudrais, par exemple taper blue dans la zone de texte et qu'il affiche l'enregistrement qui lui ressemble le plus, donc bluecom
je vais ressayer pour le 2
"Mazurier veux, HFR donner"
sinon desole de pas tout savoir mais j'ai essayer avant avec ce que je savais et avec google mais j'ai pas d'idée alors c'est pas evident de rechercher quelque chose que l'on imagine meme pas.
Marsh Posté le 07-07-2004 à 15:50:01
il me reste que la recherche, le reste est reglée
j'ai une requete :
Set qdReq = CurrentDb.CreateQueryDef("", "SELECT * FROM entreprise WHERE ent_nom LIKE '" & strnom & "';" )
Set rs = qdReq.OpenRecordset
mais meme avec like, si je tape blueco, il ne trouve pas bluecom. je comprend pas... y un truc de pas bon ?
et puis comme le nom de l'entre prsie est la clé primaire, il m'affiche un erreur qd je change d'enregistrement. Faut il que je mette une numéroauto comme clé primaire ou y a til une autre solution ?
Marsh Posté le 07-07-2004 à 16:05:17
LIKE c'est comme =, mais pour les chaines de caractères. il faut mettre le caractère générique %.
SELECT * FROM maTable WHERE monNom LIKE '%blueco%'
Marsh Posté le 07-07-2004 à 16:15:15
JagStang a écrit : LIKE c'est comme =, mais pour les chaines de caractères |
Marsh Posté le 07-07-2004 à 16:23:53
vi mossieur.
c'est pour lui dire que faire LIKE 'truc' équivaut à faire = 'truc'
tu me suis ?
Marsh Posté le 07-07-2004 à 16:25:47
JagStang a écrit : vi mossieur. |
ben...non.
spa pareil, sinon LIKE n'aurait pas d'intérêt...
Marsh Posté le 07-07-2004 à 16:28:06
et ça fonctionne pour les chiffres, testé à l'instant :
Code :
|
Marsh Posté le 07-07-2004 à 16:29:48
ah merde c'est un varchar en fait...je teste avec un number...:whistle:
[edit]
avec un number ça fonctionne aussi...
Code :
|
Marsh Posté le 07-07-2004 à 16:35:45
bon ben avec mon code
Dim strnom As String
Dim rs As DAO.Recordset
Dim qdReq As DAO.QueryDef
strnom = Ent_nom
Set qdReq = CurrentDb.CreateQueryDef("", "SELECT * FROM entreprise WHERE ent_nom LIKE '%" & strnom & "%';" )
Set rs = qdReq.OpenRecordset
If rs.EOF And rs.BOF Then
MsgBox "vide"
Exit Sub
End If
Ent_nom.SetFocus
Ent_nom.Text = rs.Fields("ent_nom" )
Ent_adr.SetFocus
Ent_adr.Text = rs.Fields("ent_adr" )
il m'affiche vide. or ce n'est pas vrai, il y a deux champs dans cette table. ai je fais une erreur dans mon code ?
je pense que c'est ma requete ...
Marsh Posté le 07-07-2004 à 16:38:49
Tu peux afficher la requête générée à l'exécution?
Marsh Posté le 07-07-2004 à 16:41:52
skeye a écrit : ben...non. |
au niveau de la compréhension bobet.
sinon essaie de faire un ='%skeyeFouteurDeMerde%'
Marsh Posté le 07-07-2004 à 16:48:44
Set qdReq = CurrentDb.CreateQueryDef("", "SELECT * FROM entreprise WHERE ent_nom = '%" & strnom & "%';" )
elle est pas grande et quand elle s'execute ( lorsque le ent_nom est modifié, c'est une zone de texte ) il me dit, arrivé a
Marsh Posté le 07-07-2004 à 16:50:03
Ent_nom.Text = rs.Fields("ent_nom" ) qu'il n'y a aucun enregistrement en cours
Marsh Posté le 07-07-2004 à 16:50:37
Mr Mazurier a écrit : Set qdReq = CurrentDb.CreateQueryDef("", "SELECT * FROM entreprise WHERE ent_nom = '%" & strnom & "%';" ) |
après ça fait afficher ta requête dans le navigateur, s'il y a une erreur tu le verras plus facilement...
Marsh Posté le 07-07-2004 à 17:08:33
bon je suis revenue en arriere
voila le code
Dim strnom As String
Dim rs As DAO.Recordset
Dim qdReq As DAO.QueryDef
strnom = InputBox("Nom de l'entreprise?" )
Set qdReq = CurrentDb.CreateQueryDef("", "SELECT * FROM entreprise WHERE ent_nom LIKE '" & strnom & "';" )
Set rs = qdReq.OpenRecordset
If rs.EOF And rs.BOF Then
MsgBox "Rien! Que dalle! Nada!"
Exit Sub
End If
Ent_nom.SetFocus
Ent_nom.Text = rs.Fields("ent_nom" )
Ent_adr.SetFocus
Ent_adr.Text = rs.Fields("ent_adr" )
ce qui est bizarre c'est que sans les % ca marche ! alors est ce qu'il son mal placé ?
Marsh Posté le 07-07-2004 à 17:11:13
LIKE '%" & strnom & "%'
Marsh Posté le 07-07-2004 à 17:20:13
ben non il me dit que c'est vide. ca marche plus du tout maintenant.
Set qdReq = CurrentDb.CreateQueryDef("", "SELECT * FROM entreprise WHERE ent_nom LIKE '%" & strnom & "%';" )
Marsh Posté le 07-07-2004 à 17:23:24
Mr Mazurier a écrit : ben non il me dit que c'est vide. ca marche plus du tout maintenant. |
crée une chaine de caractères dans laquelle tu vas mettre ton "SELECT * FROM entreprise WHERE ent_nom LIKE '%" & strnom & "%';" et fais-la afficher par ton programme. Ensuite colle la ici.
Marsh Posté le 07-07-2004 à 17:27:11
stop j'ai pas tout compris la
par exemple je fais :
dim requete as string
requete = "SELECT * FROM entreprise WHERE ent_nom LIKE '%" & strnom & "%';"
msgbox=(requete)
c'est ca que tu dis ? parceque sinon j'ai pas compris et je vois pas trop l'interet mais tu dois plus t'y connaitre
Marsh Posté le 07-07-2004 à 17:27:47
Mr Mazurier a écrit : stop j'ai pas tout compris la |
L'intérêt c'est de vérifier que ta requête générée est bonne...
Marsh Posté le 07-07-2004 à 17:28:56
l'intéret c'est de voir la chaine contstruite telle qu'elle est passée au SGBD...
Marsh Posté le 07-07-2004 à 17:30:04
mais en tout cas j'ai bien compris c'est ca que tu me dis de faire ?
Marsh Posté le 07-07-2004 à 17:32:08
oui oui...
[edit]
...et la requête générée tu essaie de l'exécuter à la main, pour voir...
Marsh Posté le 07-07-2004 à 17:39:07
il souligne Msgbox et dit :
" un appel de fonction dans la partie gauche de l'affectation doit renvoyer variant ou object "
il affiche rien du tout et va direct au message d'erreur meme si je mets un autre msgbox avant
Marsh Posté le 08-07-2004 à 00:20:07
c'est pas msgbox=(requete) mais plutot msgbox requete
de plus le faite de mettre cette condition %montexte% recherche l'occurence montexte quelque soit sa position hors si j'ai bien compris, toi tu veux le text qui commence par donc je préconise LIKE 'montexte%' mais attention pour la syntaxe je ne sais pas si tu travailles sous ACCESS ou via ADO mais la syntaxe peut legerement etre differente LIKE 'montexte*'
Marsh Posté le 08-07-2004 à 07:46:58
Citation : via ADO mais la syntaxe peut legerement etre differente LIKE 'montexte*' |
+1
Marsh Posté le 08-07-2004 à 09:49:45
ca na marche toujours pas mais je pense que ma requete a un pb autre part. il me dit qu'il n'y a pas d'enregistrement.
pour tester ma requete en manuel, je vois pas comment la faire. pour afficher le message avec la requete, msgbox tjrs souligné et il dit la meme chose :
" un appel de fonction dans la partie gauche de l'affectation doit renvoyer variant ou object "
qu"est ce que ca veut dire ? mon msgbox est incomplet ?
SELECT *
FROM entreprise
WHERE ent_nom LIKE [quel est le nom de l'entreprise ?];
ou dois je mettre le % ?
Marsh Posté le 08-07-2004 à 09:53:21
Mr Mazurier a écrit : ca na marche toujours pas mais je pense que ma requete a un pb autre part. il me dit qu'il n'y a pas d'enregistrement. |
bidoch78 a écrit : c'est pas msgbox=(requete) mais plutot msgbox requete |
Si tu pouvais prendre la peine de lire toutes les réponses ce serait pas mal.
Marsh Posté le 08-07-2004 à 10:38:44
excuser moi j'avais pas vue qu'il fallait enlever le =, j'avais juste enlever les ()
le msgbox donne :
SELECT * FROM entreprise WHERE ent_nom LIKE '%';
donc ca veut dire que le sgbd ne reconnait/voit/n'utilise pas ma variable
Marsh Posté le 08-07-2004 à 10:44:25
Donc ton pb vient de la récupération de strnom pour commencer.
Marsh Posté le 08-07-2004 à 10:51:54
Sans vouloir vous offenser, je crois que vous faites fausse route. Comme dit + haut, le problème viendrait plutôt du joker (* au lieu de %). A ta place, Mr Mazurier, je reprendrais mon code initial avec cette petite modif:
Set qdReq = CurrentDb.CreateQueryDef("", "SELECT * FROM entreprise WHERE ent_nom LIKE '*" & strnom & "*';" )
Set rs = qdReq.OpenRecordset
Marsh Posté le 08-07-2004 à 10:58:01
JiHemAir a écrit : Sans vouloir vous offenser, je crois que vous faites fausse route. Comme dit + haut, le problème viendrait plutôt du joker (* au lieu de %). A ta place, Mr Mazurier, je reprendrais mon code initial avec cette petite modif: |
Oui, mais je voyais l'absence du contenu de strnom comme un premier problème à régler avant d'essayer d'exécuter sa requête...si son machin génère un
SELECT * FROM entreprise WHERE ent_nom LIKE '**';
Il risque d'avoir bcp de résultats...
Marsh Posté le 08-07-2004 à 11:02:07
ok ok MrSkeye pensais juste, il me renvoi
SELECT * FROM entreprise WHERE ent_nom LIKE '**';
donc il considere strnom comme vide
Marsh Posté le 08-07-2004 à 11:04:54
Mr Mazurier a écrit : ok ok MrSkeye pensais juste, il me renvoi |
...donc essaye de récupérer correctement strnom pour commencer...
Marsh Posté le 05-07-2004 à 17:01:40
bon je voudrais que lorsque j'ouvre le formulaire, dans n'importe quel enregistrement, lorsque je tape un lettre dans le champ de la clef primaire, access m'ammene au 1er enregistrement commencant par cette lettre et plus je precise le mot plus access fais des mise a jour
( en gros un peu comme dans vb apres un point, une liste de choix apparait et defile selon ce que l'on tape )
deuxieme chose: je voudrais que le curseur se mettent dans la zone de texte apres avoir cliquer sur un bouton
troisieme chose (reglé): dans mon formulaire, lorsque je clique sur tab, le curseur ne navigues pas entre les champs comme je le voudrais, passe du premier a la dixieme zone de texte. Comment faire pour changer cela ?
merci d'avance
Message édité par Mr Mazurier le 05-07-2004 à 17:34:37