Bonjour à tous
Depuis peu, lors de la copie du contenu d'un champ mémo vers une autre table, si ledit champ contient plus de 100 lignes se lève une erreur 3709 "La clé d'enregistrement n'a été trouvée dans aucun enregistrement"...
Ce champ mémo ne dépasse pourtant pas la limite de contenu (que je sache...), il est en rich text et lorsque il contient moins de 100 lignes tout fonctionne à merveille.
Si plus de 100 lignes au format "ligne + espace <br> ou vbcrlf" tel que vous le voyez dans la capture jointe alors l'erreur apparaît et bloque définitivement le code qui vient juste après...
Voici les tests que j'ai effectué, sans succès :
- Annulation des indexes sur le champ en question
- Compactage et réparation (tout revient à la normale jusqu'à ce que l'on sollicite la copie du champ dépassant 100 lignes... rebelotte)
- Création d'une nouvelle base et importation du data
- Transformation en "texte brut"
En principe ce type de champ doit pouvoir contenir beaucoup plus que ce que je lui demande et être optimisé en adaptant exclusivement sa taille finale au contenu
Existe t'il selon vous une explication ou solution de contournement ?
Code qui copie dans la table définitive et efface de la table temporaire (qui produit l'erreur 3709 seulement si > à 100 lignes):
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 Public Sub btnSelectionnerSuggestionActive_Click() Dim db As DAO.Database Set db = CurrentDb Dim rs As DAO.Recordset Dim rs2 As DAO.Recordset Dim rs3 As DAO.Recordset Dim NumTerrier As String Dim nbSuggestions As Single NumTerrier = NumAutoTerrier() nbSuggestions = DCount("*", "[suggestion terriers]", "[sélection]=true") Set rs2 = db.OpenRecordset("terriers", dbOpenDynaset) Set rs3 = db.OpenRecordset("select * from [suggestion terriers] where sélection=true", dbOpenDynaset) On Error GoTo err Select Case nbSuggestions Case Is <> 0 rs3.MoveLast rs3.MoveFirst Do While Not rs3.EOF rs2.AddNew rs2!idSuggestion = rs3!idSuggestion rs2!IdTerrier = NumAutoTerrier rs2!ListeProprietaires = rs3!ListeProprietaires rs2!Propriétaires = rs3!Propriétaires rs2!Parcelles = rs3!Parcelles rs2!ListeParcelles = rs3!ListeParcelles rs2!Exploitant = rs3!Exploitant rs2!CodeExploitant = rs3!CodeExploitant rs2.update db.Execute ("delete * from [suggestion terriers] where idsuggestion=" & rs3!idSuggestion) db.Execute ("update [suggestion terriers] set sélection=false") rs3.MoveNext Loop Case Is = 0 Set rs = db.OpenRecordset("select * from [suggestion terriers] where idsuggestion=" & Me.SFSuggestionTerriersGauche!idSuggestion, dbOpenDynaset) rs2.AddNew rs2!idSuggestion = rs!idSuggestion rs2!IdTerrier = NumAutoTerrier Debug.Print NumTerrier rs2!ListeProprietaires = rs!ListeProprietaires rs2!Propriétaires = rs!Propriétaires rs2!Parcelles = rs!Parcelles rs2!ListeParcelles = rs!ListeParcelles rs2!Exploitant = rs!Exploitant rs2!CodeExploitant = rs!CodeExploitant rs2.update db.Execute ("delete * from [suggestion terriers] where idsuggestion=" & rs!idSuggestion) End Select 'Me.Parent.SF_Terriers.Form.Requery Form_SFSuggestionTerriersGauche.Requery [Form_SF Terriers].Requery [Form_ListeTerriersChoisis].Requery Form_SFSuggestionTerriersGauche.CocheSelectionnerTousTerriers = False 'Me.NavTerriers.Requery 'Me.SFNavTerriers.Form.Requery 'Me.cboExploitant = "" rs.Close rs2.Close rs3.Close Set rs = Nothing Set rs2 = Nothing Set rs3 = Nothing 'RemplirTreeViewParcelles err: If err.Number = 3022 Then MsgBox ("Un des terriers que vous avez choisi fait déjà partie d'une sélection antérieure, veuillez affiner votre choix. Opération annulée"), vbCritical, "Risque de doublon" Exit Sub End If db.Close: Set db = Nothing End Sub![]()
Partager