IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

erreur "3421" convertion de type de données


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 8
    Points : 7
    Points
    7
    Par défaut erreur "3421" convertion de type de données
    Bonjour,
    Désolé pour cette question de débutant dans le VBA.
    j'ai récupéré le code si dessous pour établir la liste des tables de la base courante le code est celui de Fabrice Constans:Formulaire de recherche prêt à
    l'emploi.(nouvelle version)
    Cette fonction me fait une erreur à la compilation sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rst.Fields(0) = qrs(i).Name
    erreur 3421 convertion de type de données
    voici le code complet:
    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
    Function lf_GetTableList()
    ' renseigne la table tbl_TemplstTbl
    Dim qrs As TableDefs
    Dim rst As Recordset
    Dim strSql As String
    Dim i As Integer, j As Integer
    ' efface la table temporaire
    DoCmd.SetWarnings False
    strSql = "Delete tbl_TempLstTbl.*"
    strSql = strSql + " FROM tbl_TempLstTbl;"
    DoCmd.RunSQL strSql
    ' rempli la table temporaire
    Set qrs = CurrentDb.TableDefs
    Set rst = CurrentDb.OpenRecordset("tbl_TempLstTbl")
    For i = 0 To qrs.Count - 1
    ' ecarte les tables temp et systeme
    If Not (qrs(i).Name Like "*Temp*") And Not (qrs(i).Name Like "Msys*") And Not (qrs(i).Name Like "*tmp*") Then
    rst.AddNew
    rst.Fields(0) = qrs(i).Name
    rst.Update
    End If
    Next
    lf_GetTableList = rst.RecordCount
    rst.Close
    Set rst = Nothing
    Set qrs = Nothing
    DoCmd.SetWarnings True
    End Function
    quelqu'un peut-il m'aider et m'expliquer : je n'ai pas réussi à faire le lien
    merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Points : 42 925
    Points
    42 925
    Par défaut
    C'est une erreur de conversion, mais le message le dit déjà.

    On peut par exemple retrouver cette erreur si tu veux entrer du texte dans un champ numérique.

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Je suis novice en VB, mais le C et le Pascal me sont familiers.
    En fait je pense que l'erreur est générée par les déclarations des variables qui sont de types différents:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim qrs As TableDefs
    Dim rst As Recordset
    et qu'au moment de l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rst.Fields(0) = qrs(i).Name
    l'erreur est produite.
    ce code a déjà très certainement tourné, et de plus il était fait par quelqu'un de compétent. C'est là mon interrogation ?
    pouvez-vous m'expliquer les types de variables déclarées et
    merci

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Points : 42 925
    Points
    42 925
    Par défaut
    Il n'y a pas que le code qui compte.

    La table qui reçoit les données aussi.
    Pour ce qui concerne les Recordset et les TableDef, jette un oeil au lien ci-dessous.
    http://warin.developpez.com/access/dao/

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 20
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    J'ai copié le même code que cacit_boss et je suis tombée sur le même problème.

    Est-ce que finalement quelqu'un avait trouvé une solution qui ne serait pas écrite ici ?

    Si oui je veux bien l'avoir, parce que là, je craque !
    un énorme merci d'avance.

    Cordialement,

  6. #6
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 961
    Points : 939
    Points
    939
    Par défaut
    Ce sont les types des enregistrements de vos tables qui ne sont peut-être pas les mêmes que ceux du code

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 20
    Points : 16
    Points
    16
    Par défaut
    Est-ce que tu sais à quoi correspond rst.Fields(0) ?

    Sinon par "types d'enregistrement de mes tables" tu entends quoi ?
    Le type de données qui s'y trouvent ?

    (Désolée je me lance dans une aventure au-dessous de mes moyens intellectuels, je suis nulle en codes, et j'essaie de comprendre celuis-là... donc si je pose des questions idiotes, c'est au moins avec beaucoup de bonne volonté pour comprendre et apprendre)

  8. #8
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 961
    Points : 939
    Points
    939
    Par défaut
    Ben quand tu crée une table en mode création, tu as une colonne nommée Type de données dans laquelle tu peux choisir ben ... le type de tes données.
    Donc si tu choisis un type Numérique ou Numéro auto et que tu lui envois du texte, il va pas aimer

  9. #9
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 20
    Points : 16
    Points
    16
    Par défaut
    OK

    Je vais essayer de trouver quelle table est impactée et lui changer ses types de données...
    Mais a priori je pense qu'on parle d'une table qui gère provisoirement ce qui va être affiché dans un formulaire de recherche.
    Donc elle est vide !

    Et quand elle se remplit provisoirement, c'est de données ma table principale, qui elle contient tous les types de données (texte, numérique, bolléen).
    Dans ce cas, est ce que je dois mettre dans la table "temporaire" (j'ai mis entre guillemets, parce qu'elle est bien créée et tout), tous les champs de ma table principale ?

  10. #10
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 961
    Points : 939
    Points
    939
    Par défaut
    Pas forcément les mêmes noms de champs, mais le champ d'accueil doit avoir un type compatible avec le champ de départ

  11. #11
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 20
    Points : 16
    Points
    16
    Par défaut
    Merci.

    En fait ACCESS avait ajouté une clé primaire à ma "table temporaire", avec un numéro Auto.
    Je pense que l'erreur venait de là, parce qu'il n'y en a plus.

    Par contre le formulaire ne fonctionne pas pour autant...
    Je vais me relancer dedans, mais le découragement me guette.

    Merci de ton aide en tout cas, je suis contente que l'énigme soit résolue !

  12. #12
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 961
    Points : 939
    Points
    939
    Par défaut
    Oui c'était sûrement ça, tu ne peux pas affecter une valeur "de force" à un champ de type numéroAuto, vu que par définition il s'incrémente tout seul.
    Si tu as d'autres questions, n'hésite pas

  13. #13
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 20
    Points : 16
    Points
    16
    Par défaut
    Tu n'aurais pas dû dire ça !

    J'ai effacé tous les codes pour les réécrire (les re-recopier) et les revoir un par un.
    En fait le premier qui ne fonctionne pas est celui-ci (il doit faire fonctionner un bonton de recherche) :


    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
    Private Sub btn_Recherche_Click()
     
        Dim strTable As String, strField As String, strCriteria As String, strSql As String
        Dim Criter As Variant
     
        strTable = Me.cbo_table         ' recupère le nom de la table
        strField = Me.cbo_champ         ' recupère le nom du champ
     
        ' compose le critere de recherche
        strCriteria = strTable & "." & strField & " Like """ & Me.txt_critere & """"
     
        ' construit la requête sql
        strSql = "SELECT DISTINCTROW " & strTable & ".*"
        strSql = strSql & " FROM " & strTable
        strSql = strSql & " WHERE ((" & strCriteria & "));"
     
     
        Me.lst_resultat.RowSource = strSql  ' affecte sql a lst_Resultat
        Me.lst_resultat.Requery             ' recalcule la liste
     
    End Sub

    Est-ce que tu verrais un truc qui cloche dans ce code ?
    Est-ce que le guillement avant SELECT DISTINCTROW" est bien placé ?

  14. #14
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 961
    Points : 939
    Points
    939
    Par défaut
    Ben déjà est-ce qu'Access te retourne une erreur ?
    Si oui, dis-moi ce qui est surligné quand tu clique sur Débogage

  15. #15
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 20
    Points : 16
    Points
    16
    Par défaut
    Non, pas d'erreur.
    Mais rien ne s'affiche pour autant.

  16. #16
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 961
    Points : 939
    Points
    939
    Par défaut
    Tu peux faire un Debug.Print de ta requète, s'il te plait ?
    A première vue, les doubles parenthèses après le WHERE, me semblent bizarres ...

  17. #17
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 20
    Points : 16
    Points
    16
    Par défaut
    J'ai écrit debug.print SGL dans mon code, mais quand je clique sur "Exécuter Sub", il m'ouvre une nouvelle macro... c'est normal ?

  18. #18
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 20
    Points : 16
    Points
    16
    Par défaut
    Une petite question :

    Est-ce normal que l'objet "lst_resultat" ne soit déclaré nulle part ?

  19. #19
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 961
    Points : 939
    Points
    939
    Par défaut
    Ben, c'est une zone de liste non ?
    Seules les variables sont à déclarer

Discussions similaires

  1. Convertion de type de données
    Par Ljosse dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 09/12/2008, 20h36
  2. Erreur de convertion de type de données
    Par ben_skywalker dans le forum Access
    Réponses: 14
    Dernier message: 06/06/2006, 11h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo