Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/07/2011, 13h19   #1
Invité de passage
 
Inscription : mai 2010
Messages : 3
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 3
Points : 1
Points : 1
Par défaut recordset erreur 3265

bonjour a tous,

j’ai un problème pouvez-vous m’aider.
Je développe un facturier, dans le formulaire ou on ajoute des éléments à la facture,
j’ai un combo box peuplé par une requête sur une table contenant les articles.
Dans les événements « après MAJ » du combo,
il exécute un « docmd.runcommand acCmdSaveRecord » et ensuite fait un call de fonction qui vérifie si cet article existe déjà dans la table « article ».
La fonction recherche dans la table via un recordset et si il n’existe pas, elle l’ajoute via un RunSQL « INSERT INTO,… »
Lors de la première exécution tout va bien, mais après le premier ajout erreur 3265 j'ai testé, il ne parvient plus à connecter le res2 au 2eme appel de la fonction.

mon code:


Code :
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
Option Compare Database
 
Option Explicit
    Dim doc_type As String
    Dim res1 As New ADODB.Recordset
    Dim res2 As New ADODB.Recordset
    Dim table_org As String
    Dim table_det As String
    Dim champ_ref As String
    Dim champ_ndoc As String
    Dim booly As Boolean
    Dim code_art As String
    Dim Detail As String
 
Function update_fourniture(doc_type)
On Error GoTo update_fourniture_Err
 
    table_org = "Fournitures"
    If doc_type = "Facture" Then
            table_det = "Tb_Facture_det"
            champ_ndoc = "[N°F]"
            champ_ref = Forms!create_dev_fact!Fille16!N°F
            res1.Filter = "N°F = '" & champ_ref & "'"
    Else
        If doc_type = "Devis" Then
                table_det = "Tb_Devis_det"
                champ_ndoc = "[N°D]"
                champ_ref = Forms!create_dev_fact!Fille19!N°D
                res1.Filter = "N°D = '" & champ_ref & "'"
        End If
    End If
 
    res1.Open table_det, CurrentProject.Connection, adOpenStatic, adLockReadOnly
        res1.MoveLast
        code_art = res1(1)
    res1.Close
 
    booly = False
 
    res2.Open table_org, CurrentProject.Connection, adOpenForwardOnly
    res2.MoveFirst
        Do Until res2.EOF
            If res2(0) = code_art Then
                booly = True
            End If
            res2.MoveNext
        Loop
    res2.Close
 
    If booly = False Then
        Detail = InputBox("Nouveau code article détécté" & vbCrLf & "code : " & code_art & vbCrLf & "Veuillez introduire le descriptif " & vbCrLf & "détaillé du nouvel article")
        DoCmd.RunSQL "INSERT INTO Fournitures ( Denomination, Details_fourn ) VALUES ( '" & code_art & "', '" & Detail & "' ) ;"
        DoCmd.SAVE acTable, "Fournitures"
    End If
 
update_fourniture_Exit:
    Exit Function
 
update_fourniture_Err:
    MsgBox Err.Number & vbCr & Err.Description
    'MsgBox Error$
    Resume update_fourniture_Exit
 
End Function
hardfred est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2011, 15h39   #2
Membre confirmé
 
Homme
Chercheur
Inscription : juin 2011
Messages : 150
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Tarn (Midi Pyrénées)

Informations professionnelles :
Activité : Chercheur
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : juin 2011
Messages : 150
Points : 231
Points : 231
Bonjour,

Ce ne serait pas opportun (et plus simple) d'aller contrôler la présence de l'article avec la fonction de domaine RechDom ...

Sinon il est préconisé de faire un reset sur les recordset lorsqu'ils ne sont plus utilisés.

Bcdt
fbtsra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2011, 22h20   #3
Invité de passage
 
Inscription : mai 2010
Messages : 3
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 3
Points : 1
Points : 1
Par défaut bonne idée mais ne fonctionne pas

j'avoue, je suis loin d'être un expert.
merci de ton idée, je n'y avais pas pensé.
j'ai tésté avec Dlookup mais rien n'y fait
avec le code ci dessous, je reçois toujours une valeur null
meme si l'article existe.
j'ai aussi testé un set res2 = nothing
Fichiers attachés
Type de fichier : vb new 1.vb (300 octets, 2 affichages)
hardfred est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 11h26   #4
Invité de passage
 
Inscription : mai 2010
Messages : 3
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 3
Points : 1
Points : 1
Par défaut merci

encore merci pour l'idee
jai finalement utilisé un DCount.
ça fonctionne super.
hardfred est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 12h38   #5
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 651
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe AMBROSINO
Localisation : France

Informations professionnelles :
Activité : Panseur de bobos en solutions ETL
Secteur : Finance

Informations forums :
Inscription : mai 2004
Messages : 3 651
Points : 6 210
Points : 6 210
Envoyer un message via MSN à argyronet
DCount ou solutionner sans comprendre... Dommage

Pour info, l'erreur 3265 signifie que tu cherches à alimenter ou lire un champ qui n'existe pas... Par exemple, si ma table contient 3 champs et que ma clause INSERT en cible 4 (à cause d'une virgule le plus souvent pour un nombre représentant un prix) eh bien ça plante...

Table : MaTable
Champs : NoCommande, DateCde, Prix
OK
Code :
INSERT INTO MaTable (NoCommande, DateCde, Prix) VALUES (102254, Now, 131.90)
KO
Code :
INSERT INTO MaTable (NoCommande, DateCde, Prix) VALUES (102254, Now, 131,90)
En résumé, il faut faire un Replace() des valeurs numériques à virgule pour les remplacer par un point.

Argy
__________________
Ils comptent sur vous...

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010
MDB Viewer : Visionneuse Access v4.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h55.


 
 
 
 
Partenaires

Hébergement Web