Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2356 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [Résolu] Erreur dans l'ouverture d'un recordset

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] Erreur dans l'ouverture d'un recordset

n°1436905
Alphajet
Faites le vous-même!
Posté le 05-09-2006 à 16:18:32  profilanswer
 

Bonjour,
 
Je laisse ce message parce que je ne comprends vraiment pas pourquoi une erreur se produit.
 
Le contexte : je crée un formulaire dans Access, qui doit permettre d'importer les données d'un fichier Excel directement dans certaines colonnes de la base de données. Mais les données que l'utilisateur va importer dépendent du mois de l'année. L'utilisateur choisit donc dans une liste le mois correspondant.
 
C'est pour cela que j'utilise un recordset : en fonction du mois choisi, je fais une requete de sélection sur une table qui contient des informations qui me permettent de localiser les données à importer.
 
Maintenant voilà le code (uniquement ce qui est utile):
 

Code :
  1. Dim dbs As DAO.Database
  2. Dim Month As String
  3. Dim Filepath As String
  4. Dim ClasseurXLS
  5. Dim Sh As Excel.Worksheet
  6. Dim rst As DAO.Recordset
  7. Private Sub Import_Data()
  8. MsgBox (" fichier : " & Filepath)
  9. '   ***   INITIALISATIONS   ***
  10. 'Création du classeur Excel
  11. Set ClasseurXLS = CreateObject("Excel.application" )
  12. 'Ouverture du classeur d'importation
  13. ClasseurXLS.Workbooks.Open Filepath
  14. Set Sh = ClasseurXLS.Worksheets("P & L" )
  15. Set dbs = CurrentDb
  16. MsgBox ("mois: " & Month)
  17. 'Récupération du numéro de colonne
  18. sqlCol = "SELECT MonthPandL FROM tbl_MonthNumber WHERE Month = '" & Month & "' ;"
  19. MsgBox (" requete :" & sqlCol)
  20. Set rst = dbs.OpenRecordset(sqlCol, dbOpenDynaset)
  21. Column = rst.Fields(0).Value
  22. MsgBox ("test rst :" & Column)
  23. ...


 
Et j'obtiens systématiquement malgré tous mes efforts une erreur 3061 "Too few parameters. 1 Expected" soit en français, "Trop peu de paramètres. 1 attendu."
 
Auriez vous une piste à me donner ?


Message édité par Alphajet le 06-09-2006 à 09:26:41

---------------
Bien joué! Mais une brique ne rend jamais les coups.
mood
Publicité
Posté le 05-09-2006 à 16:18:32  profilanswer
 

n°1436940
Lord Nelso​n
Posté le 05-09-2006 à 17:06:13  profilanswer
 

Salut,
 
On ne voit pas ce que contient ta variable "Month" qui est utilisée pour filtrer ta requête.
 
A+
Horatio
 
 
 

n°1436967
tegu
Posté le 05-09-2006 à 17:27:24  profilanswer
 

Sinon, je ne comprends pas comment tu peux vouloir ouvrir un recordset alors que tu n'as pas de table.
« dbs.OpenRecordset » permet d'ouvrir un recordset basé sur une table ou une requete enregistrées dans ta base Access.
Or ton fichier Excel est externe et je ne vois nulle part d'importation ou de liaison de ces données Excel dans un conteneur Access.

Message cité 1 fois
Message édité par tegu le 05-09-2006 à 17:31:24
n°1436969
Alphajet
Faites le vous-même!
Posté le 05-09-2006 à 17:28:48  profilanswer
 

La variable Month est bien récupérée, elle provient d'une liste déroulante dans le formulaire :
 

Code :
  1. Private Sub Month_list_AfterUpdate()
  2. Month = Month_list
  3. MsgBox ("testmois :" & Month)
  4. End Sub


 
La boite de test ici fonctionne bien et renvoie la bonne valeur.


---------------
Bien joué! Mais une brique ne rend jamais les coups.
n°1436971
JihemAir
Je sais pas
Posté le 05-09-2006 à 17:29:44  profilanswer
 

Salut,
 
  En fait, il faut que tu crée un Querydef (une requete), et que ce Querydef remplisse ton recordset:
 

Code :
  1. Dim dbs As DAO.Database
  2. Dim qdf As QueryDef
  3. Dim rs As Recordset
  4. Dim strReq As String
  5. strReq = "SELECT MonthPandL FROM tbl_MonthNumber WHERE Month = '" & Month & "' ;"
  6. Set qdf = dbs.CreateQueryDef("", strReq)
  7. Set rs = qdf.OpenRecordset
  8. If rs.RecordCount > 0 Then
  9.     ' traitement
  10. End If


 
 

Code :
  1. Set qdf = dbs.CreateQueryDef("", strReq)

 
Dans cette ligne, il faut laisser les 2 guillemets vides, sinon tu donnes un nom à ta requete qui deviendra une requete stockée.
 
Voilà.


---------------
J'ai un message.."Cliquez OK pour continuer."...Qu'est ce que je fais ?
n°1436975
Alphajet
Faites le vous-même!
Posté le 05-09-2006 à 17:33:11  profilanswer
 

tegu a écrit :

...
Sinon, je ne comprends pas comment tu peux vouloir ouvrir un recordset alors que tu n'as pas de table.
« dbs.OpenRecordset » permet d'ouvrir un recordset basé sur une table ou une requete enregistrées dans ta base Access.
Or ton fichier Excel est externe et je ne vois nulle part d'importation ou de liaison de ces données Excel dans un conteneur Access.


 
En fait le recordset en lui même n'a rien à voir avec le fichier Excel.
Il est exécuté dans la base Access sur les données d'une table dans Access.  
Tout le code VBA est exécuté depuis Access, et je ne fais aucune opération à partir du fichier Excel même.
 
En fait la suite du code permet de récupérer les valeurs de certaines cellules d'un fichier (pour éclaircir : j'ai des dizaines de fichiers Excel au format identique dont je veux récupérer les données, et ils sont classés par agence, mois et par année. Mon formulaire permet donc de sélectionner une agence, une année, un mois puis de sélectionner le fichier Excel à importer)


---------------
Bien joué! Mais une brique ne rend jamais les coups.
n°1436977
Alphajet
Faites le vous-même!
Posté le 05-09-2006 à 17:34:44  profilanswer
 

JihemAir a écrit :

Salut,
 
  En fait, il faut que tu crée un Querydef (une requete), et que ce Querydef remplisse ton recordset:


 
Ah donc le QueryDef est nécessaire ? J'avais recherché des exemples du type de ce que j'ai écrit et apparemment ils fonctionnaient. Mais je vais essayer avec le QueryDef


---------------
Bien joué! Mais une brique ne rend jamais les coups.
n°1436989
Alphajet
Faites le vous-même!
Posté le 05-09-2006 à 17:45:18  profilanswer
 

:( Malheureusement j'ai exactement le même problème, l'erreur renvoyée est la même, sur cette ligne :
 

Code :
  1. Set Rs = qdf.OpenRecordset


---------------
Bien joué! Mais une brique ne rend jamais les coups.
n°1437015
Lord Nelso​n
Posté le 05-09-2006 à 18:20:32  profilanswer
 

Re,
 
J'ai une bonne nouvelle :
- Ton code fonctionne pour ce qui est de la requête, il n'est donc pas nécessaire de passer par un QueryDef.
Lorsque Month = "Apr", on récupère bien "Avril"
etc..
 
et une mauvaise :
- Je ne vois pas ce qui cloche.
 
Es-tu bien sûr que le champ "Month" de ta table "tbl_MonthNumber" est bien une chaîne de caractères ?
 
A+
Horatio


Message édité par Lord Nelson le 05-09-2006 à 18:21:31
n°1437283
JihemAir
Je sais pas
Posté le 06-09-2006 à 07:55:40  profilanswer
 

Re:
 
  Regarde aussi dans ta base de données, si tu n'as pas une requête enregistrée.
  J'ai l'impression que ton code appelle cette requête, sans lui passer de paramètre.
 


---------------
J'ai un message.."Cliquez OK pour continuer."...Qu'est ce que je fais ?
mood
Publicité
Posté le 06-09-2006 à 07:55:40  profilanswer
 

n°1437332
Alphajet
Faites le vous-même!
Posté le 06-09-2006 à 09:26:18  profilanswer
 

Merci à vous deux pour votre aide déjà :) J'ai trouvé l'erreur grâce à vous :
 
=> Lord nelson : Le champ Month est bien une chaîne de caractères, par contre le nom de la colonne avait changé pour MonthName dans la BD, je n'avais pas répercuté ça dans le code ... D'où l'erreur, la colonne n'était pas trouvée  
 
Désolé, comme souvent, c'était une erreur bête ! Et comme souvent on cherche à côté de là où il faut chercher


Message édité par Alphajet le 06-09-2006 à 09:27:03

---------------
Bien joué! Mais une brique ne rend jamais les coups.
n°1437423
Lord Nelso​n
Posté le 06-09-2006 à 10:29:53  profilanswer
 

Salut,
 
Content que tu aies résolu ton problème.
 
Il me semble que tu pourrais obtenir un résultat analogue plus simplement en utilisant la fonction RECHDOM (DLOOKUP en anglais) d'Access. Tu récupérerais le mois dans la table sans passer par DAO.
Par exemple :
Dim MoisComplet As String
MoisComplet = DLookup("MonthPandL", "tbl_MonthNumber", "Month='" & Me.ListeMois & "'" )
MsgBox MoisComplet
 
En fait DLookup lance directement une requête sur la table.
 
A+
Horatio


Message édité par Lord Nelson le 06-09-2006 à 10:31:17

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [Résolu] Erreur dans l'ouverture d'un recordset

 

Sujets relatifs
[Résolu] Repointer au début du tableau ap un mysql_fetch_array[Resolu] Souci fusion automatisee en VBA sous word
cherchez l'erreur (SVP;)[Resolu][C#.NET] XML -> Un lire des noeuds un après l'autre ?
erreur de syntaxe inatenduel'affichage erreur php
[Delphi] utiliser des TEdit comme des tableaux edit[var].text [Résolu]erreur sur trigger
[Résolu] Macro supprimer une colonne[RESOLU] Flash : Alignement en 1er plan d'une animation
Plus de sujets relatifs à : [Résolu] Erreur dans l'ouverture d'un recordset


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR