2009-09-23 12 views
1

J'ai donc un formulaire de saisie que je veux utiliser pour mettre à jour une table avec certains champs d'information. J'ai l'ID de l'enregistrement qui arrive automatiquement dans une zone de texte. J'ai trois zones de texte que je dois ajouter à la table (excluant l'identification) sur un clic de bouton.VBA pour extraire des informations des zones de texte et les insérer dans la table

Name 
Date 
Method

sont les noms des champs.

As_Name 
As_Date 
As_Method

sont les noms de zone de texte

Le nom de la table est POC, et l'ID est POC_ID (son un autonumber). Donc je ne veux pas que ces objets (boîtes de texte) soient liés à la table parce que c'est un petit formulaire "pop-up" séparé qui vient d'une forme que la table, et je veux seulement que l'entrée soit par rapport au POC_ID déjà sélectionné via le formulaire d'origine.

Alors comment écrire la vba pour ceci: 1) vérifier que les enregistrements n'existent pas déjà ... 2) mettre à jour les champs (listés ci-dessus) avec les données saisies dans les zones de texte (listées ci-dessus) . Je veux être en mesure de l'utiliser avec un bouton clic ....


EDIT:

en fait il est une table à deux pas; J'ai deux formes que je veux pouvoir envoyer l'information à la même table (l'information différente cependant). ce db a déjà été construit par quelqu'un d'autre et je sais qu'on m'a appris à le reprendre.

J'ai besoin d'ajouter un second petit pop-up pour ajouter des informations supplémentaires en fonction des nouvelles exigences (il n'y a littéralement pas de place pour moi de placer cela sur l'autre). J'ai déjà fait cela, et j'ai utilisé une approche d'objet suggérée pour référencer les premiers formulaires (à partir desquels cette seconde forme "pop-up" jaillit) pour ajouter les champs id relatifs. Maintenant, j'ai cette petite petite fenêtre qui demande juste trois valeurs à entrer (qui sont celles listées ci-dessus). Je ne sais tout simplement pas comment lier la zone de texte, avec un champ de sorte qu'une fois qu'un utilisateur entre dans l'information, clique sur "enregistrer", il enregistre l'information dans la table par rapport au TripID qui est là (un mentionné ci-dessus). La seule façon de savoir comment obtenir les zones de texte pour enregistrer des données dans la table est d'utiliser le générateur/assistant lorsque j'en crée un nouveau. Je voudrais apprendre à lier un objet (zone de texte, cmb, liste) etc sur un formulaire, à une table avec une méthode "On Click" afin que je puisse utiliser un bouton de sauvegarde. Fondamentalement c'est ça!

+0

des excuses pour être incertain. ce formulaire a de nombreuses entrées qui mettent à jour plusieurs tables, et la méthode qu'il utilise est sur un bouton cliquez sur exécuter sql pour vérifier qu'il n'y a pas d'enregistrement pour le numéro d'identification attribué en premier, puis vérifier pour s'assurer que tous les Les valeurs nécessaires sont saisies, il entre les informations dans la table appropriée via une mise à jour SQL. Je ne l'ai pas créé, mais j'ai été chargé d'ajouter des champs de données supplémentaires au formulaire (en fin de compte pour la capacité de reporting supplémentaire) ... il y a beaucoup trop de choses ici pour moi (un novice) pour déchiffrer quoi .. – Justin

+0

donc je suis venu avec l'idée brillante (nous verrons) que j'ajouterais un petit bouton à l'endroit approprié sur ce formulaire, cela ouvrirait juste une autre petite forme avec les trois choses que j'ai besoin d'ajouter. alors maintenant je me demande comment dupliquer cette procédure SQL de sorte que lorsque l'utilisateur entre info, il va dans la table dans les champs appropriés, en fonction du numéro POC_ID approprié. Par exemple, par exemple .... disons que je crée un formulaire vierge, entrez des zones de texte, nommez txt1-txt3 et ajoutez un bouton au formulaire. ce que je cherche est le vba que je peux employer "sur le clic" .... – Justin

+0

qui fera que l'information dans ces zones de texte pour aller à la table que je veux, dans le domaine que je veux, par rapport à l'identification ID) que je veux .... ... encore les gars je suis désolé si je n'étais pas clair. Merci pour l'aide car cela me rend complètement fous. – Justin

Répondre

1

Je ne suis toujours pas certain de comprendre votre situation, mais permettez-moi d'offrir les grandes lignes d'une réponse. Si mon plan n'est pas assez proche, veuillez expliquer où je me suis égaré.Votre formulaire parent, frmParent, a un bouton de commande (cmdMoreFields) qui ouvre le formulaire enfant (frmChild) dans lequel vous allez entrer des valeurs pour 3 champs supplémentaires dans l'enregistrement actuellement affiché dans frmParent. Après que l'utilisateur a entré ces valeurs dans frmChild (dans les contrôles de zone de texte nommés As_Name, As_Date et As_Method), il clique sur un bouton de commande (cmdSave) pour stocker ces valeurs dans les champs (Name, Date et Method) de la table POC. fermer frmChild. De plus, frmParent inclut une zone de texte (txtPk_field) qui contient la valeur de la clé primaire (champ pk_field dans la table POC) de l'enregistrement en cours.

Cependant, je ne suis pas sûr du champ/contrôle que vous utilisez pour txtPk_field, et doute que cette valeur soit disponible si l'enregistrement en cours n'a pas encore été enregistré. Alors, je vais vous proposer ce code pour le cmdMoreFields "sur clic" l'événement:

If Me.Dirty Then Me.Dirty = False 
DoCmd.OpenForm "frmChild" 

En cas de cmdSave (sur frmChild) "sur clic", le code similaire à essayer:

Dim strSql As String 
strSQL = "UPDATE POC SET [Name] = """ & Me.As_Name & """, [Date] =#" _ 
    & Me.As_Date & "#, Method = """ & Me.As_Method & """ WHERE pk_field = " _ 
    & Forms!frmParent.txtPk_field & ";" 
Debug.Print strSql 
CurrentDb.Execute strSql, dbFailOnError 
DoCmd.Close 

Si cette approche fonctionne, envisagez de transmettre la valeur pk_field à frmChild avec Openargs, comme suggéré par Remou.

Remarque: Je supposais que le type de données pour Nom est du texte, Date est la date/heure et Méthode est du texte. Vous devrez modifier les délimiteurs de l'instruction UPDATE pour tous les champs dont les types de données diffèrent de mes suppositions.

+0

merci beaucoup HansUp !! J'apprécie que tu me colle avec ma mauvaise explication parce que je crois que c'est exactement ce que je cherchais !! J'apprécie vraiment cela! En fait, je – Justin

+0

le réglage de la nouvelle forme comme des Option Explicit PreviousForm dim comme frmParent (comme vous le dites) set PreviousForm = formes! FrmParent me.POC_ID = PreviousForm.POC_ID ce qui transportait sur l'ID numéro dans une zone de texte pour moi bien. Je ne savais juste pas le SQL pour insérer les informations des prochaines zones de texte dans la table spécifiquement pour cet ID # ne peut pas attendre pour se mettre au travail (relatif) pour l'essayer! j'apprécie! – Justin

2

La méthode OpenForm de DoCmd permet plusieurs arguments, y compris Where et Openargs. Vous pouvez en profiter. Cependant, il semble que quelque chose ne va pas dans la conception de votre table, car il semble que vous conserviez la même information dans deux tableaux et ce, sans raison apparente. Avez-vous lu http://www.r937.com/relational.html?

Je suggérerais que la conception dont vous avez besoin inclut probablement uniquement un champ numérique POC_ID qui est une clé étrangère à la table principale.

Questions connexes