Requête sql dans code d'un formulaire Access

Fermé
washa Messages postés 8 Date d'inscription vendredi 3 janvier 2003 Statut Membre Dernière intervention 28 juin 2004 - 19 juil. 2003 à 17:22
washa Messages postés 8 Date d'inscription vendredi 3 janvier 2003 Statut Membre Dernière intervention 28 juin 2004 - 19 juil. 2003 à 21:12
Mon problème est basique : dans le code d'un formulaire Acces (Private Sub Form_Current()), je veux juste récupérer la valeur d'un champ dans une table de la base de données en cours.

J'ai parcouru les exemples du forum CCM (problématique ADO AOD ....) sans réussir à en appliquer un seul.

Décidément j'ai du mal avec Access, malheureusement je dois absolument l'utiliser pour aider un copain .

Je prends un exemple tiré du forum et qui a l'air de fonctionner pour les autres pour m'expliquer (cf. EXEMPLE ci-dessous).
1. je ne sais pas quoi mettre pour 'TaBaseDeDonnées' ci-dessous (le fichier *.mdb que j'utilise n'est-il pas la base de données implicite?), 2. le terme 'Currentdb' ne veut-il pas dire 'base de données en cours'? C'est un peu ontradictoire avec le point 1.
3. pourquoi faut-il fermer 'TonRecordset 'et 'TaBaseDeDonnée' ( 'TonRecordset.Close' et 'TaBaseDeDonnée.Close')?

EXEMPLE :
Dim TaBaseDeDonnée As Database
Dim TonRecordset As Recordset
Dim requete As String
requete = "select val_num from parametres where val_nom='chemin photos';"
Set TonRecordset = CurrentDb
Set TonRecordset = TaBaseDeDonnée.OpenRecordset(requete, dbDynaset)

rep = TonRecordset!cequetuveux

TonRecordset.Close
TaBaseDeDonnée.Close
A voir également:

6 réponses

Utilisateur anonyme
19 juil. 2003 à 20:37
mais au pire je peux utiliser des paramètres en dur dans le code qui iront très bien, à condition de ne pas changer de PC

euh attends, tu parles de quoi là? t'avais pas du tout parlé d'un problème de type. Tu veux assurer la distribution? de quels "paramètres" tu parles? pourquoi veux-tu les mettre "en dur" et pour répondre à quel problème?

kinder.surprise,
le maton du matou
1
Utilisateur anonyme
19 juil. 2003 à 18:25
je pense qu'il faut tout simplement relire le fichier d'Aide et les exemples. Il est vrai qu'il peut arriver qu'on ne les comprenne pas à la première lecture, faut se concentrer un poil...

mais tout ça est dedans.

J'ai parcouru les exemples du forum CCM (problématique ADO AOD ....) sans réussir à en appliquer un seul.

et qu'est-ce qu'on peut faire? il faut venir avec un problème _précis_ qui appelle une réponse _précise_

quand tu extrapoles un exemple, il faut l'adapter. Ce que tu demandes, le code que tu inclus et les erreurs qui s'y trouvent sont de l'ordre de l'archi-base de DAO. Il faut lire un peu les documents relatifs à DAO, et si on ne les comprend pas, les relire. Si on ne les comprend touours pas, je ne sais pas ce qu'on pourra faire de plus, puisque quand quelqu'un ici pose une question dont la réponse est dans son propre fichier d'Aide, en général il a comme réponse un extrait idoine dudit fichier d'aide.

relis le code que tu as noté, ouvre l'Aide et dis nous déjà ce qui te frappe (du genre set yaourt=la_crémière)

quant à la fermeture des objets, c'est comme si tu demandais pourquoi il faut refermer le pot de confiture quand on a fini de préparer ses tartines.

kinder.surprise,
le maton du matou
0
washa Messages postés 8 Date d'inscription vendredi 3 janvier 2003 Statut Membre Dernière intervention 28 juin 2004
19 juil. 2003 à 18:53
Bonjour kinder.surprise,

Merci pour ta réponse, j'ai effectivement manqué de précision. Mon problème devrait être simplissime et j'aurais dû donner un exemple plus simple, les questions auraient paru moins stupides : effectivement quand on ouvre un pot de confiture on doit le refermer après usage, mais j'ai constaté qu'il n'y a rien de tel dans le code vb d'un formulaire qui a été généré avec l'assistant, c'est pour cela que je posais la question (je débute enAccess, et tout paraît facile au premier abord).

Je vais donc suivre ton conseil et essayer de comprendre (mais franchement l'aide de VB est souvent obscure).

Merci pour ton aide, et au plaisir d'une prochaîne discussion.
0
Utilisateur anonyme
19 juil. 2003 à 19:19
en fait, à ta décharge, si j'ose dire, je ne sais pas quelle verison d'access tu utilises mais je dois admettre qu'autant l'aide de la V97 est bien faite, autant celle de la V2000 (et sûrmeent suivante) est une grosse daube. Donc c'est probablement moins simple à utiliser et à explorer si tu as une version > 97.

quand tu crées un formulaire avec l'assistant, basé sur une table ou une requête, en fait il n'a pas recours au modèle d'objet DAO ou ADO dans le code, ça passe directement pas es propriétés du formaulaire et des champs. De fait, on n'a pas vraiment d'exemple de cette manière.

Normalement, à l'installation d'Access, il t'a peut-être proposé (ou a installé carrément) des applications exezmples, dont les noms sont solution.mdb, comptoir.mdb et commande.mdb ou un truc du genre. Solution.mdb est un formidable exemple à explorer, une sorte de tutoriel, qui entre autres montre comment exploiter, parfois, les accès aux données dans le code.

Et si tu peux dégoter le (cher) manuel du développeur Access chez Microsoft Press (celui de la 97 en tout cas, parce qu'à mon avis les usivant doivent plutôt s'attarder sur ADO) tu y trouveras une foultitude d'informations sur DAO, c'est un livre très bien fait, très didactique. Comme il est un peu vieux tu le trouveras peut-être d'occasion. Mais pour se familiariser avec DAO il est génial.

Si tu as un MSDN qui traîne c'est très complet aussi.

kinder.surprise,
le maton du matou
0
washa Messages postés 8 Date d'inscription vendredi 3 janvier 2003 Statut Membre Dernière intervention 28 juin 2004
19 juil. 2003 à 19:37
Effectivement j'ai Access 2000, ceci expliquant peut-être celà. Je nai toujours pas trouvé, mais au pire je peux utiliser des paramètres en dur dans le code qui iront très bien, à condition de ne pas changer de PC.

Merci pour les infos sur la doc, je pense pouvoir la trouver d'occase.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
19 juil. 2003 à 20:37
de ce</bras> type, voulais-je dire...

kinder.surprise,
le maton du matou
0
Utilisateur anonyme
19 juil. 2003 à 20:41
bonche je crois comprendre que c'est le currentDB qui te perturbe là. Y a rien à mettre en dur, non.

Dim ça sert à créer un objet

Dim Prout as database

et ensuite seulemen tu fais l'affectation

set Prout=CurrentDB

bonche désolé que t'aies le fichier d'aide de A2000 mais bonche je te laisse découvrir tout ça hein :-/

kinder.surprise,
le maton du matou
0
washa Messages postés 8 Date d'inscription vendredi 3 janvier 2003 Statut Membre Dernière intervention 28 juin 2004
19 juil. 2003 à 21:12
T'es vraiment un pote, il faut donc que je te dise tout.

Le contexte d'abord, JE DOIS utiliser Access pour gérer des membres d'une association, et y ajouter leurs photos de nom '<nom> <prenom>.jpg' stockkées dans un répertoire dont le nom est paramétrable dans la base (car en fonction du poste sur lequel se situe cette base à un instant donné, ça peut varier).

Vu mes faibles connaissances, j'ai pensé que le mieux était de créer une table 'parametres' avec les champs 'par_nom' et 'par_val' qui représentent respectivement le nom et la valeur du paramètre, mon premier enregistrement étant le nom du chemin des photos. Cette technique me permettra d'ajouter d'autres paramètres si nécessaire.

Mais il y a peut-être une autre solution plus simple ?

Ci-dessous le code qui marche actuellement (procédure évènementielle sur activation du formulaire), en commentaires ce que je tente de faire sans succès :

Private Sub Form_Current()
'Dim rsMain As Recordset
'Dim ReqSql As String
'Dim sTable As String
'ReqSql = "select val_num from parametres where val_nom='chemin photos'"
'Set rsMain = CurrentDb.OpenRecordset(ReqSql)
Me.photo.Picture = ""
rep = "c:\Photos_Id\"
fic = Me.pra_nom & " " & Me.pra_pre & ".jpg"
If (Dir(rep & fic) <> "") Then
Me.photo.Picture = rep & Me.pra_nom & " " & Me.pra_pre & ".jpg"
End If
End Sub
Voila, je pense que c'est plus clair. A propos, j'ai vu un message de Carole du 9/7 qui a l'air d'avoir les mêmes problèmes, je la préviens.
0