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 :

Message "L'opération doit utiliser une requête qui peut être mise à jour." aléatoire


Sujet :

Access

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 113
    Points : 205
    Points
    205
    Par défaut Message "L'opération doit utiliser une requête qui peut être mise à jour." aléatoire
    Bonjour,

    J'ai un module qui insert des données dans différentes tables, avec des boucles, à partir de fichier csv.
    Ce module est excécuté toutes les nuits.

    Lorsque je lance ce module.
    Sur certaines tables et au bout d'un certain nombre d'enregistrements, il me met le message "L'opération doit utiliser une requête qui peut être mise à jour."
    Mais les tables sur lesquelles le module "bloque" ne sont pas les mêmes à chaque excécution ni l'enregistrement non plus.


    Les requetes sont très simples : INSERT INTO [deg1_Prod] ( id, type )VALUES ('DEGBOU0890000180', 'VOLAI');
    Il y a juste le nombre de champs qui change (de 2 à 8 champs) suivant les tables.

    J'ai cherché par rapport à la doc de Microsoft ou les posts sur ce message dans différents forums ou blog.
    Ca peut pas être un problème de droit d'accès à la table, sinon ça bloquerait à chaque fois et dès le premier enregistrement
    C'est pas une erreur dans le SQL car pareil, ça bloquerait à chaque fois et dès le début.

    J'ai pensé à une saturation de la mémoire. C'est pour ça que je mets à Nothing les Recordset et la Database à la fin de chaque fonction. Mais cela n'a rien changé.

    Ce message "L'opération doit utiliser une requête qui peut être mise à jour." ne correspond-t-il pas un autre problème qui n'a rien à voir avec les causes indiqués dans la doc de Microsoft ?


    Ce module met à jour presque 400 tables dont certains ont plus de 4000 enregistrements.

    Merci de votre aide


    Voici le code d'une des fonctions (J'ai différentes fonctions suivant le nombre de champ de la table).

    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
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
     
    Public Function maj_table_faire_savoir_2ch(champ, table, table_origine, table_faire_savoir, champAccess1, champAccess2)
     
    Dim db As Database
    Dim rdcChamp As Recordset
    Dim Flchamp, FlId As Field
    Dim nb, i, PosDollar, DebDollar, PosZQ1 As Integer
    Dim Valchamp, ValId, Newchamp, Newch1, Newch2, Sql As String
     
    On Error GoTo Err_Conquenation
     
    DoCmd.SetWarnings False
     
     
     
     
    Set db = CurrentDb
    If table Like "loi" & "*" Then
    table = remplace(table, "loi", "asc")
     
    Else
    Sql = "DELETE DISTINCTROW " & table & ".* FROM [" & table & "];"
    DoCmd.RunSQL Sql, -1
    End If
     
    Sql = "SELECT [" & table_faire_savoir & "].* FROM [" & table_faire_savoir & "]  WHERE ((rien([" & table_faire_savoir & "]." & champ & ") =false) and (([" & table_faire_savoir & "]." & champ & ") <>'ZZ')) order by ID;"
    Set rdcChamp = db.OpenRecordset(Sql)
    nb = rdcChamp.RecordCount
     
    Select Case nb
    Case Is = 0
     
    Case Else
    rdcChamp.MoveLast
    nb = rdcChamp.RecordCount
     
    rdcChamp.MoveFirst
    i = 0
    Set Flchamp = rdcChamp(champ)
     
    If Valchamp Like "LOIZQ" & "*" Then
    Valchamp = Replace(Replace([Flchamp], " $ ", "$LOIZQ"), "'", "''")
    Else
    Valchamp = Replace(Replace([Flchamp], " $ ", "$"), "'", "''")
    End If
     
     
    Set FlId = rdcChamp("id")
    ValId = [FlId]
    DebDollar = 0
    Do While InStr(DebDollar + 1, Valchamp, "$") > 0
    PosDollar = InStr(DebDollar + 1, Valchamp, "$")
     
    Newchamp = Right(Left(Valchamp, PosDollar - 1), PosDollar - (DebDollar + 1))
    PosZQ1 = InStr(1, Newchamp, "ZQ")
    If PosZQ1 > 0 Then
    Newch1 = Left(Newchamp, PosZQ1 - 1)
    Newch2 = Right(Newchamp, Len(Newchamp) - (PosZQ1 + 1))
    Sql = "INSERT INTO [" & table & "] ( id, [" & champAccess1 & "],[" & champAccess2 & "] ) VALUES ('" & ValId & "', '" & Newch1 & "', '" & Newch2 & "');"
    DoCmd.RunSQL Sql, -1
    End If
     
    DebDollar = PosDollar
    Loop
     
    Newchamp = Right(Left(Valchamp, Len(Valchamp)), Len(Valchamp) - DebDollar)
    PosZQ1 = InStr(1, Newchamp, "ZQ")
    If PosZQ1 > 0 Then
    Newch1 = Left(Newchamp, PosZQ1 - 1)
    Newch2 = Right(Newchamp, Len(Newchamp) - (PosZQ1 + 1))
     Sql = "INSERT INTO [" & table & "] ( id, [" & champAccess1 & "],[" & champAccess2 & "] ) VALUES ('" & ValId & "', '" & Newch1 & "', '" & Newch2 & "');"
     DoCmd.RunSQL Sql, -1
    End If
     
    For i = 1 To nb - 1
    If Int(i / 100) = i Then
    Sleep (300)
    End If
     
    rdcChamp.MoveNext
    Set Flchamp = rdcChamp(champ)
     
    If Valchamp Like "LOIZQ" & "*" Then
    Valchamp = Replace(Replace([Flchamp], " $ ", "$LOIZQ"), "'", "''")
    Else
    Valchamp = Replace(Replace([Flchamp], " $ ", "$"), "'", "''")
    End If
     
     
    Set FlId = rdcChamp("id")
    ValId = [FlId]
    DebDollar = 0
    Do While InStr(DebDollar + 1, Valchamp, "$") > 0
    PosDollar = InStr(DebDollar + 1, Valchamp, "$")
     
    Newchamp = Right(Left(Valchamp, PosDollar - 1), PosDollar - (DebDollar + 1))
    PosZQ1 = InStr(1, Newchamp, "ZQ")
    If PosZQ1 > 0 Then
    Newch1 = Left(Newchamp, PosZQ1 - 1)
    Newch2 = Right(Newchamp, Len(Newchamp) - (PosZQ1 + 1))
    Sql = "INSERT INTO [" & table & "] ( id, [" & champAccess1 & "],[" & champAccess2 & "] ) VALUES ('" & ValId & "', '" & Newch1 & "', '" & Newch2 & "');"
    DoCmd.RunSQL Sql, -1
    End If
    DebDollar = PosDollar
    Loop
     
    Newchamp = Right(Left(Valchamp, Len(Valchamp)), Len(Valchamp) - (DebDollar))
    PosZQ1 = InStr(1, Newchamp, "ZQ")
    If PosZQ1 > 0 Then
    Newch1 = Left(Newchamp, PosZQ1 - 1)
    Newch2 = Right(Newchamp, Len(Newchamp) - (PosZQ1 + 1))
    Sql = "INSERT INTO [" & table & "] ( id, [" & champAccess1 & "],[" & champAccess2 & "] ) VALUES ('" & ValId & "', '" & Newch1 & "', '" & Newch2 & "');"
    DoCmd.RunSQL Sql, -1
    End If
     
    Next i
    End Select
    rdcChamp.Close
    Set rdcChamp = Nothing
    Set Flchamp = Nothing
    Set FlId = Nothing
     
    Sql = "UPDATE FICHIER_TS SET FICHIER_TS.fait = No WHERE (((FICHIER_TS.Fichier)='" & table_origine & "'));"
    DoCmd.RunSQL Sql, -1
     
    db.Close
    Set db = Nothing
     
    Exit Function
    Err_Conquenation:
    Debug.Print "Table=" & table_origine & " / ID=" & ValId & " / SQL=" & Sql & " / ERREUR=" & Err.Description
    Sql_bug = "INSERT INTO [Bug_MAJ_TS] ( ID,ligne,table_bug,sql,erreur,date_bug )VALUES ('" & ValId & "'," & i & ",'" & table_origine & "','" & remplace_m(Sql, "'", "") & "','" & remplace_m(Err.Description, "'", "") & "',#" & Now & "#);"
    DoCmd.RunSQL Sql_bug, -1
    If Err.Description <> "L'opération doit utiliser une requête qui peut être mise à jour." Then
                   MsgBox Err.Description
                   End If
                   rdcChamp.Close
    Set rdcChamp = Nothing
    Set Flchamp = Nothing
    Set FlId = Nothing
     
    db.Close
    Set db = Nothing
                   Sleep (3000)
     
     End Function
    Voici les 3 premières ligne d'un fichier CSV
    Les "ZQ" séparent les différentes valeurs pour un même enregistrement et le $ sépare les différents enregistrements dans un champ du fichier CSV (qui correspond à une table dans Access)
    Les "ZZ" dans certains champs correspondent à l'absence de valeurs dans la table correspondant et ça permet de sauter la table.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    id;hot1_cat;hot1_chaine;hot1_comm;hot1_cont;Hot1_Label;Hot1_Label_TH;Hot1_Label_AV;hot1_type;hot2_point;hot2_zone;hot3_direct;hot3_resa;hot4_ecrit;hot4_group;hot4_horaire;hot4_parle;hot5_mode;hot5_tarif;hot5_tarif_n1;hot6_conf;hot7_activ;hot7_equip;hot7_prest;hot7_serv
     
    "HOTBOU0890000440";"CA3HO";"CIBIS";"C1ZQ03 86 48 30 55ZQ $ C2ZQ03 86 42 91 51ZQ $ C4ZQh1361@accor.comZQ $ C5ZQhttp://www.ibishotel.comZQ";"MMEZQCélineZQANTOSIKZQDirectriceZQB0001";"QUAFR";"zz";"";"HOTEL";;;"C1ZQ03 86 48 30 55ZQ $ C2ZQ03 86 42 91 51ZQ $ C4ZQh1361@accor.comZQ";"C5ZQhttp://www.ibishotel.comZQ";"zz";"zz";"01/01/2016ZQ31/12/2016ZQ";"AL $ AN $ ES $ FR";"AMX $ CB $ CPT $ DC $ EM $ ESP1 $ MANDA $ VAC $ VIR $ VSA";"";"";"CABLE $ CANAL $ CLIM $ DVITR $ NET $ NETCC $ PTDIR $ TELCO";"zz";"ASC $ BAR $ BRACT $ BRNET $ GARPR $ LOCMA $ PARPR";"";"AUTRR $ COFFR $ COURR $ INFOR $ MESSA $ PLARE $ RESPA $ TELEC $ WIFI"
     
    "HOTBOU0890000442";"CA3HO";"CLOGF";"C1ZQ03 86 41 81 21ZQ $ C4ZQresa@lesoleil-dor.comZQ $ C5ZQhttp://www.lesoleil-dor.comZQ";"MMEZQMyriamZQBAUJARDZQZQB0001";"QUAFR";"zz";"";"HOTRE";;;"C1ZQ03 86 41 81 21ZQ $ C4ZQresa@lesoleil-dor.comZQ $ C5ZQhttp://www.lesoleil-dor.comZQ";"C5ZQhttp://ldf-bourgogne.reservit.com/reservit/avail-info.php?hotelid=1446ZQ";"zz";"zz";"";"AN $ FR";"AMX $ B0003 $ CB $ CHQ $ DC $ ESP $ ESP1 $ VAC $ VSA $ WC";"TARSIZQ69ZQ69ZQZQ $ TARDOZQ89ZQ89ZQZQ $ TARTRZQ95ZQ95ZQZQ $ TAXESZQ1ZQ1ZQZQ";"TARSIZQ69ZQ69ZQZQ $ TARDOZQ89ZQ89ZQZQ $ TARTRZQ95ZQ95ZQZQ $ TAXESZQZQZQZQ";"CABLE $ CANAL $ CLIM $ DVITR $ MINIB $ NET $ NETCC $ PTDIR $ TELCO";"zz";"BAR $ PARPR $ RESTO $ SALON $ TERRA";"RESBOU0890000532ZQLe Soleil d'OrZQ";"COFFR $ COURR $ MESSA $ PLARE $ PLATS $ SERCH $ WIFI"
     
    "HOTBOU0890000497";"NCLASS";"zz";"C1ZQ03 86 34 17 00ZQ $ C2ZQ03 86 34 28 48ZQ";"MRZQZQHURIONZQZQB0001";"zz";"zz";"";"HOTEL";;;"C1ZQ03 86 34 17 00ZQ $ C2ZQ03 86 34 28 48ZQ";"";"zz";"zz";"";"zz";"zz";"";"";"TELCO";"zz";"BAR";"";"zz"

  2. #2
    Membre éprouvé Avatar de HDU71000
    Homme Profil pro
    Développement Access - En recherche de poste télétravail (invalide)
    Inscrit en
    Août 2016
    Messages
    716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement Access - En recherche de poste télétravail (invalide)

    Informations forums :
    Inscription : Août 2016
    Messages : 716
    Points : 1 023
    Points
    1 023
    Par défaut
    Salut,

    juste au premier coup d'oeil, ça ne serait pas des enregistrements contenant des " ' " qui mettraient la merde ???

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "RESBOU0890000532ZQLe Soleil d'OrZQ";
    A voir et tester...

    A+

Discussions similaires

  1. Réponses: 6
    Dernier message: 16/02/2010, 07h41
  2. Réponses: 0
    Dernier message: 17/01/2010, 17h42
  3. Réponses: 1
    Dernier message: 18/12/2009, 10h29
  4. Réponses: 1
    Dernier message: 23/05/2008, 11h45
  5. Réponses: 7
    Dernier message: 29/04/2008, 12h16

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