2010-06-15 5 views
0

Dans ma base de données, j'ai un formulaire pour rechercher des produits (champs: id, nom, manufacturer_id [définir pour afficher le nom du fabricant], category_id, price). Je voudrais avoir la possibilité d'ajouter des fabricants à travers ce formulaire. J'ai donc créé le script vba mais ça ne marche pas. Encore quand j'entre un nouveau nom il me donne l'invite à "Sélectionner l'élément de la liste". Qu'est-ce que je fais mal ?Insérer un nouvel argument dans la table via un formulaire de recherche d'une autre table

Private Sub manufacturer_id_NotInTheList(NewData As String, Response As Integer) 

Dim strSQL As String, strInfo As String 

strInfo = "Manufacturer " & NewData & " is not on the list." & vbCrLf & "Add?" 
If MsgBox(strInfo, vbYesNo + vbQuestion, "Element not on the list") = vbYes Then 
    strSQL = "INSERT INTO manufacturer (name, country, id_distributor) VALUES ('" & NewData & "','Undefined', '0');" 
    DoCmd.SetWarnings (False) 
    DoCmd.RunSQL strSQL 
    Response = acDataErrAdded 
Else 
    Response = acDataErrContinue 
    NewData = "" 
    Me.manufacturer_id.Text = "" 
End If 

End Sub 
+2

Ne répond pas à la question, mais vous devez vraiment avoir DoCmd.SetWarnings True quelque part après avoir appelé DoCmd.RunSQL, ou vous pourriez manquer des avertissements importants (SetWarnings est un paramètre système et n'est pas hors de portée) . Vous devriez essayer de commenter vos DoCmd.SetWarnings existants et voir si l'insertion réussit réellement. Et vous pouvez alternativement utiliser mon code SQLRun(), que j'ai posté sur SO un bazillion fois - il ne nécessite pas de muck avec SetWarnings et c'est en fait plus sûr (DoCmd.RunSQL appliquera des mises à jour incohérentes au lieu d'échouer entièrement sur une erreur). –

Répondre

2

Si la limite liste des propriétés de votre liste déroulante est à true, Access intercepter et se plaignent d'abord (parce que votre utilisateur a ajouté un fabricant qui ne sont pas dans la liste). Essayez de définir Limiter à la liste à false, puis votre procédure doit s'exécuter.

+0

Mais ne veut-il pas que cela soit vrai? Sinon, quel est le point d'avoir ce code, puisque vous pouvez simplement taper ce que vous voulez, plutôt que de le restreindre aux valeurs de l'autre table? –

+0

J'ai compris qu'il appelait cette méthode pour valider le champ (par exemple, sur submit), car l'instruction else efface alors le champ de texte et remplit un champ d'erreur si l'utilisateur choisit de ne pas ajouter un nouveau fabricant. Aussi longtemps qu'il s'assure que cette méthode s'exécute quand il s'agit d'un nouvel élément, il limite l'entrée des utilisateurs aléatoires en leur demandant (je vois ce que vous dites et suis d'accord avec vous dans une certaine mesure). – rrrhys

+0

une zone de liste déroulante que votre contrôle est de restreindre la saisie de données. Si vous l'avez utilisé pour cela, vous n'avez pas besoin de le valider en sauvegardant l'ensemble de l'enregistrement. –

Questions connexes