2009-09-26 7 views
2

hey les gars, quelqu'un peut-il me montrer la simple requête de mise à jour via vb? J'ai besoin d'ajouter de nouveaux champs à la table (juste 3) et ajouter quelques boîtes de texte sur un formulaire afin que les utilisateurs puissent ajouter des données supplémentaires par rapport à l'enregistrement (qui est déjà ce que ce formulaire est basé). Donc la première forme que j'ai est une forme qui remplit une liste, quand l'utilisateur clique deux fois sur une sélection de cette liste, elle ouvre un nouveau formulaire, de sorte que l'ID de la table qui est liée à cette forme que j'ai besoin d'ajouter ces boîtes de texte (toutes les listes déroulantes et les zones de texte relatives à un enregistrement sont liées à la forme active à ce stade, mais elles sont toutes non liées.) En cliquant sur un bouton, il y a déjà à la table). Je n'ai pas créé ceci cependant, il a été construit par quelqu'un qui n'est plus là, et apparemment est meilleur que moi sur ce truc. Mon problème est qu'il y a tellement de vb qui vérifie les enregistrements, et diverses instructions sql basées sur le cas, que je ne peux pas le déchiffrer sous sa forme la plus simple. Donc, je cherchais un exemple simple d'une instruction sql de mise à jour dans vb afin que je puisse essayer de le séparer.MS Acess 2003 - VBA pour la requête Update SQL?

je en ai besoin de mettre à jour l'enregistrement en fonction de l'ID: sql OÙ RecordID = me.RecordID

En fait, je pensais que je savais comment faire cela à partir d'exemples, mais chaque fois que je, puis essayez d'exécuter En cliquant sur le bouton, j'obtiens une erreur d'exécution de l'erreur SYNTAX, et le débogage ne fait que mettre en évidence la partie db.execute (sql). J'ai donc essayé d'obtenir la fenêtre immédiate de l'instruction SQL résultant, et il semble bien pour moi:

UPDATE tblMain 
    SET [Name] = "John Doe", 
     [DATE] = #9/30/2009#, 
     [TYPE] = "TypeA", 
WHERE RecordID = 958; 

Puis-je mettre à jour une table sans tenir compte de tous les domaines dans le tableau (parce que celui-ci a 15 plus la nouveau 3, donc je suis ignorant sur 14 champs ici, mais je ne veux pas modifier ces de toute façon ???

donc, comme toujours, je vous remercie de l'aide yall !! Merci

EDIT:

Désolé, je l'oublie toujours .... Je l'essayais actaully DAO ... .

Dim db as DAO.Database 
    Dim sql as String 
    set db = CurrentDb 

etc

+0

Utilisez-vous .NET Framework et ses objets ActiveX Data Objects .NET (ADO.NET)? –

+0

Parce que VBA et VB.NET sort de manières très différentes, si je me souviens bien. Même VB6 a sa propre façon de faire ADO. –

+0

wow c'est quelque chose que je devrais savoir, hélas je ne sais pas. le mieux que je pourrais dire c'est MS XP OS, et l'accès 00-02/03 je pense .... celui où vous travaillez en 00 et ensuite convertir en 02/03 ?? est-ce logique? Je suis à peine un novice – Justin

Répondre

4

Vous étiez thaaat fermer! Vous avez une virgule supplémentaire simple après votre dernière colonne. Débarrassez-vous et ça fonctionne bien.

UPDATE tblMain SET 
[Name] = "John Doe", 
[DATE] = #9/30/2009#, 
[TYPE] = "TypeA" 
WHERE RecordID = 958; 

Oui, vous ne pouvez absolument mettre à jour que quelques colonnes au lieu de toutes. C'est une pratique exemplaire, BTW.

Enfin, il est considéré comme une mauvaise pratique de nommer vos colonnes après des mots réservés comme "Nom" et "Date", mais je sais que vous avez hérité de cela.

+0

merci! Je vous en suis reconnaissant. oui, ces noms de champs sont par exemple réellement; beaucoup trop dans la DB pour les noms de champ vagues! – Justin

2

Vous avez été sage d'inclure Debug.Print sql dans votre code. bpayne a déjà souligné la virgule supplémentaire dans votre instruction SQL.

Je tiens à signaler une autre technique de dépannage que vous pouvez trouver utile pour déboguer des problèmes d'instructions SQL.

Copiez l'instruction à partir de la fenêtre Exécution et collez-la dans la vue SQL d'une nouvelle requête. Modifiez la requête dans le concepteur de requêtes jusqu'à ce que vous puissiez la faire fonctionner, puis modifiez votre code VBA pour générer une instruction SQL correspondante.

Dans ce cas, vous n'avez peut-être pas remarqué la virgule supplémentaire. Toutefois, vous pouvez créer une nouvelle requête et créer l'instruction UPDATE à partir de zéro dans le concepteur de requêtes. Après avoir fonctionné, vous pouvez comparer sa vue SQL à la requête qui échoue.

+0

merci! J'ai l'habitude d'utiliser la fenêtre immédiate au lieu de la msgbox, parce que pour moi, c'est plus facile mais c'est juste moi. Ok, donc j'ai pensé à faire cela (copier l'instruction sql résultante de l'IW et coller dans la vue SQL d'un objet de requête), mais qu'est-ce que je fais à propos de tous les parenthèses et parenthèses ??? J'ai aussi pensé à trouver une instruction sql en sens inverse (en la prenant de la vue sql au code vba), mais la chaîne SQL sera-t-elle acceptable avec toutes ces parenthèses et parenthèses en vb? merci! – Justin

+0

Désolé, je ne comprends pas votre préoccupation au sujet des parenthèses et des parenthèses. RE l'autre point: je rédige habituellement une requête dans le concepteur de requêtes. Utilisez ensuite VBA pour créer une instruction SQL qui correspond à l'affichage SQL de la requête. – HansUp

+0

bien que ce que je voulais dire, j'apprends à la fois (sql et vba et sql en vb), parfois, quand j'essaie de trouver SQL pour les requêtes qui sont top nth avec plusieurs tables, etc .. Je dois utiliser la requête constructeur, pour apprendre le sql. alors puis-je utiliser ce sql exact dans une chaîne vba ?? parce que du peu que j'ai appris sur les chaînes sql dans vba, tous les parenthèses et les parenthèses qui existent dans la vue sql, je ne suis pas sûr si elles peuvent travailler dans une chaîne sql dans le vba ?? désolé c'était plus une question générale et pas spécifique à la requête ci-dessus .... simplement vérifier les requêtes de cette manière .. merci – Justin

Questions connexes