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

Access Discussion :

Changement de base de données = vba incompatible


Sujet :

Access

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut Changement de base de données = vba incompatible
    Bonjour,

    J'ai sous la main un outil Access 2003 qui me permet, en me connectant à une base de donnée, de sortir des infos concernant la structure de ma boîte ainsi que son personnel.

    Le problème est que la base de donnée sur laquelle cet outil s'appuye n'est plus maintenue à jour, je suis donc obligé de changer de base de donnée, où je retrouve sensiblement les mêmes informations.

    Lorsque j'ouvre l'outil access, un bouton me permet de mettre à jour les bases de données créées dans cet outil (qui pompent leurs info sur les bases de données distantes, de manière plus ciblée). Seulement, le code vba derrière ce bouton ne fonctionne plus:

    Message d'erreur:

    Run - Time error '3141':

    The SELECT statement includes a reserved word or an argument name that is misspelled or missing, or the punctuation is incorrect.
    Voici le code:

    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
    
    Function gen_struct(entity As Integer)
    Dim db As Database
    Dim rs As Recordset
    
    Set db = CurrentDb
    DoCmd.SetWarnings False
    Set rs = db.OpenRecordset("SELECT  'fnc_lvl' AS fnc_lvl & [fnc_lvl_no] FROM dbo_vw_ou WHERE (((dbo_vw_ou.ou_no)=" & entity & "));")
    sqlcmd entity, rs("fnc_lvl")
    rs.Close
    DoCmd.SetWarnings True
    Set rs = Nothing
    Set db = Nothing
    End Function
    C'est la ligne en gras qui apparaît en jaune lorsque je clique sur le bouton "debug". Je ne vois pas où se situe l'erreur vu que le nom des champs (fnc_lvl et fnc_lvl_no) sont restés les mêmes dans la nouvelle base de données.

    Quelqu'un aurait-il une idée?

    Merci d'avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Pourquoi des ' ici
    alors que c'est le nom d'un champ

    Starec

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    J'ai enlevés les ' mais ça ne change rien, il me surligne toujours la ligne en jaune.

  4. #4
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Ceci devrait mieux convenir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set rs = db.OpenRecordset("SELECT  'fnc_lvl' & [fnc_lvl_no] AS fnc_lvl FROM dbo_vw_ou WHERE (((dbo_vw_ou.ou_no)=" & entity & "));")
    le premier champ etant composé de la concatenation d'un texte fnc_lvl et du contenu du champ fnc_lvl_no

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    J'obtiens ça:


    Run - Time error '3464':

    Data type mismatch in criteria expression

  6. #6
    Invité
    Invité(e)
    Par défaut
    Re

    Le champ
    comporte un point, il me semble que tu ne peux l'utiliser dans un nom de champ, de plus ce champ est-il numérique ou texte ?

    Starec

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    Le champ ou_no est numérique, la séparation par un point est nécessaire non?

    Le pire c'est que ce code fonctionnait lorsqu'il était connecté à la base de données précédente. Maintenant ça ne fonctionne plus alors qu'il y a exactement les mêmes tables avec les mêmes champs.

    EDIT: en fait dbo_vw_ou est la table, ou_no est le champ

  8. #8
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    sqlcmd n'est pas une fonction Access
    en isolant celle-ci (apostrophe devant) le defaut existe-t'il toujours

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ' sqlcmd entity, rs("fnc_lvl")

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    L'erreur se situe toujours dans la ligne au-dessus de sqlcmd, donc le debuggeur s'arrête là.

    Puis comme je l'ai dit ce code fonctionnait bien avant, avec l'ancienne base de données. Depuis la nouvelle (malgré le fait que les tables et les champs portent les mêmes noms), y'a un truc qui le dérange.

  10. #10
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Créer la requete avec le paramètre entity quelconque
    Vérifier le bon fonctionnement
    Lire le code SQL pour comparaison

  11. #11
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    est-ce que ce ne serait pas le légendaire oubli d'ajout de référence DAO ?
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    Je n'en sais pas plus, cet outil n'a pas été conçu par moi mais par mon prédécesseur, je découvre Access en même temps donc c'est pas évident.

    Logiquement si je connecte cet outil à une autre base de données qui comporte les mêmes tables et les mêmes champs ça devrait fonctionner non? Rien dans le code ne fait référence au nom de l'ancienne db, c'est ça que je ne comprends pas.

  13. #13
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    pas nécessairement, merci de vérifier les références.

    1. aller dans l'éditeur VBA
    2. menu outils > références ...
    3. cocher DAO
    4. la "monter" devant ADO si besoin
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  14. #14
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    J'ai ça de coché:

    - Visual Basic For Applications
    - Microsoft Access 11.0 Object Library
    - Microsoft DAO 3.6 Object Library
    - Microsoft Calendar Control 11.0
    - OLE Automation
    - Microsoft Visual Basic for Applications Extensibility 5.3

  15. #15
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    OK, ce n'était donc pas ça.

    Maintenant, debogons ton SQL.

    fais nous un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    debug.print "SELECT  'fnc_lvl' & [fnc_lvl_no] AS fnc_lvl FROM dbo_vw_ou WHERE (((dbo_vw_ou.ou_no)=" & entity & "));"
    montre nous ce que ça donne et dis nous quel est le type de données pour ou_no

    perso j'aurais plus vu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     "SELECT  ""fnc_lvl""" & [fnc_lvl_no] & " AS fnc_lvl FROM dbo_vw_ou WHERE (((dbo_vw_ou.ou_no)=" & entity & "));"
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  16. #16
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    Il me renvoie un compile error: syntax error lorsque je rajoute debug.print devant ma ligne sql.

    EDIT: ou_no est un champ texte.

  17. #17
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    peut-être remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set rs = db.OpenRecordset("SELECT  'fnc_lvl' AS fnc_lvl & [fnc_lvl_no] FROM dbo_vw_ou WHERE (((dbo_vw_ou.ou_no)=" & entity & "));")
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set rs = db.OpenRecordset("SELECT  'fnc_lvl' & [fnc_lvl_no] AS fnc_lvl FROM dbo_vw_ou WHERE ou_no = " & chr$(34) & entity & chr$(34) & ";")

  18. #18
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par helas
    peut-être remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set rs = db.OpenRecordset("SELECT  'fnc_lvl' AS fnc_lvl & [fnc_lvl_no] FROM dbo_vw_ou WHERE (((dbo_vw_ou.ou_no)=" & entity & "));")
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set rs = db.OpenRecordset("SELECT  'fnc_lvl' & [fnc_lvl_no] AS fnc_lvl FROM dbo_vw_ou WHERE ou_no = " & chr$(34) & entity & chr$(34) & ";")
    Il me dit ça:

    Run-time error '3061':

    Too few parameters. Expected 2.

  19. #19
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    Ah attendez, il va me surligner une autre partie du code.

    Je vais poster le code tout entier, ce sera plus facile:

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
     
    Option Compare Database
     
    Public Sub sqlcmd(entity As Integer, lvl As String)
    Dim db As Database
    Dim rs As Recordset
    Dim rs2 As Recordset
    Dim tx As String
     
     
    Set db = CurrentDb
    tx = "Select ou_no, cd_fuid, ou_name as ou_short_name, ou_name, ou_start_dt, ou_end_dt, fnc_lvl_no as lvl from dbo_vw_ou where (" & lvl & " = " & entity & " and dbo_vw_ou.ou_name Not Like '*technical*' and dbo_vw_ou.Cd_Fuid<>'');"
    Set rs = db.OpenRecordset(tx)
    DoCmd.SetWarnings (False)
     
    While rs.EOF = False
    tx = "Select ou_no, fnc_lvl" & rs("lvl") - 1 & " as mother from dbo_vw_ou where ou_no = " & rs("ou_no") & ";"
    Set rs2 = db.OpenRecordset(tx)
    tx = "INSERT INTO TB_structure ( entity, fuid, entity_short_name, entity_name, valid_from, valid_to, relation_id, related_obj) Values (" & rs("ou_no") & ", " & Nz(rs("cd_fuid"), "000") & ", """ & Trim(rs("ou_short_name")) & """, """ & Trim(rs("ou_name")) & """, #" & rs("ou_start_dt") & "#, #" & rs("ou_end_dt") & "#, 'AAA1' ," & rs2("mother") & ");"
    DoCmd.RunSQL (tx)
    rs.MoveNext
    Set rs2 = Nothing
    Wend
    DoCmd.RunSQL ("UPDATE TB_structure SET TB_structure.Related_obj = Null WHERE (((TB_structure.entity)= " & entity & "));")
    DoCmd.SetWarnings (True)
     
    rs.Close
    Set rs = Nothing
    Set db = Nothing
     
    End Sub
     
    Function gen_struct(entity As Integer)
    Dim db As Database
    Dim rs As Recordset
     
    Set db = CurrentDb
    DoCmd.SetWarnings False
    Set rs = db.OpenRecordset("SELECT  'fnc_lvl' & [fnc_lvl_no] AS fnc_lvl FROM dbo_vw_ou WHERE ou_no = " & Chr$(34) & entity & Chr$(34) & ";")
    sqlcmd entity, rs("fnc_lvl")
    rs.Close
    DoCmd.SetWarnings True
    Set rs = Nothing
    Set db = Nothing
    End Function
     
    Function regenerat(entity As Integer)
     
        DoCmd.SetWarnings False
        DoCmd.OpenQuery "del_users", acViewNormal, acEdit
        DoCmd.SetWarnings False
        DoCmd.OpenQuery "del_struct", acViewNormal, acEdit
        DoCmd.SetWarnings False
        Call gen_struct(entity)
        DoCmd.SetWarnings False
        DoCmd.OpenQuery "users", acViewNormal, acEdit
        DoCmd.SetWarnings False
        DoCmd.OpenQuery "upt_funct_man", acViewNormal, acEdit
        DoCmd.SetWarnings False
        DoCmd.OpenQuery "upt_funct_mem", acViewNormal, acEdit
        DoCmd.SetWarnings True
     
    End Function
     
    Function updt(entity As Integer)
     
        DoCmd.SetWarnings False
        DoCmd.OpenQuery "mod_date_to_funct_man", acViewNormal, acEdit
        DoCmd.SetWarnings False
        DoCmd.OpenQuery "mod_date_to_funct_mem", acViewNormal, acEdit
        DoCmd.SetWarnings False
        DoCmd.OpenQuery "mod_date_to_struct", acViewNormal, acEdit
        DoCmd.SetWarnings False
        Call gen_struct(entity)
        DoCmd.SetWarnings False
        DoCmd.OpenQuery "upt_funct_man", acViewNormal, acEdit
        DoCmd.SetWarnings False
        DoCmd.OpenQuery "upt_funct_mem", acViewNormal, acEdit
        DoCmd.SetWarnings True
     
    End Function

  20. #20
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    Il m'a surligné cette ligne-là:

    Set rs = db.OpenRecordset(tx)

    dans "Public Sub sqlcmd(entity As Integer, lvl As String)", la première.

Discussions similaires

  1. [XL-2000] Ebauche de base de donnée vba.
    Par Danaxia dans le forum Excel
    Réponses: 2
    Dernier message: 20/05/2011, 20h21
  2. Hyperion Portal Server - changement de base de données
    Par pierre.zelb dans le forum EPM (Hyperion)
    Réponses: 0
    Dernier message: 03/11/2009, 17h27
  3. Réponses: 6
    Dernier message: 27/04/2009, 10h34
  4. Changement adresse base de données
    Par loig41 dans le forum VB.NET
    Réponses: 2
    Dernier message: 05/07/2007, 17h09
  5. changement de base de donnée
    Par Pitou5464 dans le forum Access
    Réponses: 3
    Dernier message: 08/08/2006, 14h37

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