Probleme requete ajout dans bdd en vb6
Résolu
Utilisateur anonyme
-
william7007 Messages postés 335 Date d'inscription Statut Membre Dernière intervention -
william7007 Messages postés 335 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
voilà j'ai un petit souci avec mon programme vb6 qui est relié avec une base de données existante. Dans celle-ci se trouve une table 'produit' et une table 'famille'. J'ai créé un form qui me permettrait d'ajouter un produit à la base de données. Le form contient un champ texte pour l'id du produit (nommé identification), un pour son nom (nom), un pour son prix (prix), un pour son stock (quantité) et enfin un combobox (fam) pour choisir la famille à laquelle va appartenir le produit.
Mon problème est que le programme m'affiche un message d'erreur en me disant qu'il y a une erreur de syntaxe au niveau du select (opérateur absent..). Pourtant je ne vois vraiment pas où est la faute de syntaxe. Voici le code du bouton ajout pour ajouter le produit :
Private Sub ajouter_Click()
Dim cnn As New ADODB.Connection
Dim req As String
Dim req2 As String
' Connexion à la base de donnée
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\Raito-Kun\Mes documents\Numérim\calcul stock\numérim.mdb"
req2 = "SELECT famille FROM produit WHERE famille IN (SELECT id_famille FROM famille WHERE famille = '" & (fam.Text) & "')"
cnn.Execute req2 <---ici je ne suis pas sûr que ce soit necessaire
req = "INSERT INTO produit VALUES ('" & (identifiant) & "', '" & (nom) & "', '" & (prix) & "', '" & (req2) & "', '" & (quantité) & "')"
cnn.Execute req
cnn.Close
End Sub
voilà donc j'espère avoir été le plus précis possible pour vous aider à y voir clair. Je vous remercie d'avance de votre aide si précieuse. En plus c'est assez urgent car je suis en stage et je dois rendre mon programme opérationnel bientôt donc ça me stress. Merci encore de votre aide.
Nague29
voilà j'ai un petit souci avec mon programme vb6 qui est relié avec une base de données existante. Dans celle-ci se trouve une table 'produit' et une table 'famille'. J'ai créé un form qui me permettrait d'ajouter un produit à la base de données. Le form contient un champ texte pour l'id du produit (nommé identification), un pour son nom (nom), un pour son prix (prix), un pour son stock (quantité) et enfin un combobox (fam) pour choisir la famille à laquelle va appartenir le produit.
Mon problème est que le programme m'affiche un message d'erreur en me disant qu'il y a une erreur de syntaxe au niveau du select (opérateur absent..). Pourtant je ne vois vraiment pas où est la faute de syntaxe. Voici le code du bouton ajout pour ajouter le produit :
Private Sub ajouter_Click()
Dim cnn As New ADODB.Connection
Dim req As String
Dim req2 As String
' Connexion à la base de donnée
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\Raito-Kun\Mes documents\Numérim\calcul stock\numérim.mdb"
req2 = "SELECT famille FROM produit WHERE famille IN (SELECT id_famille FROM famille WHERE famille = '" & (fam.Text) & "')"
cnn.Execute req2 <---ici je ne suis pas sûr que ce soit necessaire
req = "INSERT INTO produit VALUES ('" & (identifiant) & "', '" & (nom) & "', '" & (prix) & "', '" & (req2) & "', '" & (quantité) & "')"
cnn.Execute req
cnn.Close
End Sub
voilà donc j'espère avoir été le plus précis possible pour vous aider à y voir clair. Je vous remercie d'avance de votre aide si précieuse. En plus c'est assez urgent car je suis en stage et je dois rendre mon programme opérationnel bientôt donc ça me stress. Merci encore de votre aide.
Nague29
A voir également:
- Probleme requete ajout dans bdd en vb6
- Vb6 - Télécharger - Divers Utilitaires
- Demande d'ajout snap qui disparait ✓ - Forum Snapchat
- Ajout rapide snap - Forum Snapchat
- Ajout snap sans rien d'écrit - Forum Snapchat
- Comment enlever la limite d'ajout sur snapchat - Forum Snapchat
8 réponses
Bonjour
j'ai d'abord un tout petit conseil à te donner
1. " sauf si ton application va tourner sur le poste où tu programme, le mieux serais d'éviter les chemin absolus en occurence au niveau de la connexion à la BDD "C:\Documents and Settings\Raito-Kun\Mes documents\Numérim\calcul stock\numérim.mdb"
2. essaie également d'utiliser les modules. ce la dit, tu écris une procedure pour le connexion et une autre pour la deconnexion dans le module, ces procédures doivent etre declarées PUBLIC car tu les appeleras dans tes forms.
Ben pour dire vrai voilà comment je procède moi pour utiliser une BDD avec VB6.0
1. je declare un objet Connexion qui se connecte à la BDD
2. je declare un objet Recordset (ou Command) dans lequel je stock ma requette
3. essaie ça voir et dit moi le resultat. (utilise les recordset )
j'ai d'abord un tout petit conseil à te donner
1. " sauf si ton application va tourner sur le poste où tu programme, le mieux serais d'éviter les chemin absolus en occurence au niveau de la connexion à la BDD "C:\Documents and Settings\Raito-Kun\Mes documents\Numérim\calcul stock\numérim.mdb"
2. essaie également d'utiliser les modules. ce la dit, tu écris une procedure pour le connexion et une autre pour la deconnexion dans le module, ces procédures doivent etre declarées PUBLIC car tu les appeleras dans tes forms.
Ben pour dire vrai voilà comment je procède moi pour utiliser une BDD avec VB6.0
1. je declare un objet Connexion qui se connecte à la BDD
2. je declare un objet Recordset (ou Command) dans lequel je stock ma requette
3. essaie ça voir et dit moi le resultat. (utilise les recordset )
Bonjour william7007 !
Je te remercie de bien vouloir m'aider c'est sympa de ta part. Au fait j'ai déjà essayé avec les recordset, les modules etc... en m'inspirant d'autres programmes mais je ne comprenais vraiment rien et je n'arrivais pas à adapter cette méthode à mon programme. Du coup j'avais à chaque fois des erreurs que je ne comprenais pas non plus et j'ai ensuite découvert cette solution toute simple. Mais je me doute bien qu'elle est bien moins pratique que les recordset je te l'accorde.
Pour la connexion à la base de données tu a tout à fait raison je voudrais éviter également éviter ce genre de chemins puisque effectivement le programme marchera sur un autre poste.
Mais je veux bien essayer les recordset de nouveaux si ça ne te dérange pas de m'aider bien sûr. ça ne me dérange pas d'apprendre donc... Par contre je ne suis pas la star du vb je te prévient !^^
Pour info c'est bien current db quelque chose comme ça pour éviter le chemin pour la connexion non?
Je te remercie de bien vouloir m'aider c'est sympa de ta part. Au fait j'ai déjà essayé avec les recordset, les modules etc... en m'inspirant d'autres programmes mais je ne comprenais vraiment rien et je n'arrivais pas à adapter cette méthode à mon programme. Du coup j'avais à chaque fois des erreurs que je ne comprenais pas non plus et j'ai ensuite découvert cette solution toute simple. Mais je me doute bien qu'elle est bien moins pratique que les recordset je te l'accorde.
Pour la connexion à la base de données tu a tout à fait raison je voudrais éviter également éviter ce genre de chemins puisque effectivement le programme marchera sur un autre poste.
Mais je veux bien essayer les recordset de nouveaux si ça ne te dérange pas de m'aider bien sûr. ça ne me dérange pas d'apprendre donc... Par contre je ne suis pas la star du vb je te prévient !^^
Pour info c'est bien current db quelque chose comme ça pour éviter le chemin pour la connexion non?
ben pas tout à fait
si tu peux me contacter hrs forum pour que nous voyons ça je t'aiderais volontier, mais faire passer cette quantité de message sur le forum je trouve pour moi que c'est encombrant et surchargera le forum.
mais si tu y tiens on y vas je suis partant
je ne te ferais pas une leçon sur le VB mais je te montrerais juste comment t'y prendre avec les recordset et tu veras crois moi c'est d'une tres grande simplicité vraiment
cdlt.
si tu peux me contacter hrs forum pour que nous voyons ça je t'aiderais volontier, mais faire passer cette quantité de message sur le forum je trouve pour moi que c'est encombrant et surchargera le forum.
mais si tu y tiens on y vas je suis partant
je ne te ferais pas une leçon sur le VB mais je te montrerais juste comment t'y prendre avec les recordset et tu veras crois moi c'est d'une tres grande simplicité vraiment
cdlt.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ok ben je t'ai envoyé un message privé avec mes coordonnées pour me contacter donc voilà.
merci encore
nague29
merci encore
nague29
ben excuse le retard de mes reponses, j'etais pris avec un autre programme.
Ok , Ok ok ok on y vas
tout d'abord je part ici du principe que tu as intégré deja le réference à ton projet, pour pouvoir utiliser les objet ADO à savoir (Connexion, RecordSet, Command et Parameter).
si tel est le cas alors :
1. il te suffit de créer un module (tu peux laisser le nom pad defaut du module car c'est le seul qu'n utilisera à savoir: Module1 (Module1.bs))
2. et là dans le module on vas ecrire une procedure qui va se charger simplement de la connexion à notre BDD. pour info moi je prefere souvent implementer cette conexion dans la procedure "Main", ce ci a pour avantage que je n'aurais plus à appeler la connexion à la BDD lorsque j'aurais besoin d'elle, car la connexion se faisant dans la procédure Main, elle est toujours active et globale à toute l'application (ben faut dire ici que c'est pa l'ideale lorsue l'application est prevue d'etre distribuer en réseaux)
voici un apperçu de mes dires
code à mettre dans le Module
je m'explique:
a. je declare un objet Public (globale) adoCon de type Connexion que j'alloue directement avec l'operateur New
b. puis dans la procedure Main, je crée ma connexion à la BDD, et regarde bien ici :
c. frmPrincipale ici designe la feuille qui doit apparaitre directement apres que la connexion soit établi. si c'est une autre feuille exemple feuille de connexion, acceuille... tu met (frmConnexion.show, frmSplash.show...)
et là c'est pas tout reste le plus important. il faut maintenant dire à ton projet qu'il va demarer dans la procédure Main(). hé oui car par defaut il demare sur des feuille que tu lui indique si tu ne sais pas comment le faire ben voilà.
il suffit ssimplement d'aller dans la barre de menu et tu clique sur Projet/Propriétés de nom_de_ton_projet/ en suite sur l'onglet générale tu choit "Sub Main " dans "objet de demarage"
et là tu teste ton projet si tu voie la feuille que tu as demandé apparaitre alors Bravooooooo tu viens de surmonter la partie la plus difficile. car la connexion est établie avec un chemin relatif et plus mieux elle est dans la procédure Main(), tu ne vas plus te casser la tête à l'appeler, ni mm à l'ecrire elle sera appelée automatique par le programme. essaie ça voir
et si tu es pret pour le deuxieme round fait moi signe et on continuera dac?
tu voie je t'ai dit que ce sera penible sur le forum, mais bon puisque tu es pressé par le projet autant mettre le paquet dessus
amicallement
Ok , Ok ok ok on y vas
tout d'abord je part ici du principe que tu as intégré deja le réference à ton projet, pour pouvoir utiliser les objet ADO à savoir (Connexion, RecordSet, Command et Parameter).
si tel est le cas alors :
1. il te suffit de créer un module (tu peux laisser le nom pad defaut du module car c'est le seul qu'n utilisera à savoir: Module1 (Module1.bs))
2. et là dans le module on vas ecrire une procedure qui va se charger simplement de la connexion à notre BDD. pour info moi je prefere souvent implementer cette conexion dans la procedure "Main", ce ci a pour avantage que je n'aurais plus à appeler la connexion à la BDD lorsque j'aurais besoin d'elle, car la connexion se faisant dans la procédure Main, elle est toujours active et globale à toute l'application (ben faut dire ici que c'est pa l'ideale lorsue l'application est prevue d'etre distribuer en réseaux)
voici un apperçu de mes dires
code à mettre dans le Module
Option Explicit Public adoCon As New ADODB.Connection Sub Main() adoCon.Open "provider=microsoft.jet.oledb.4.0;data source=" & App.Path & "\nom_De_Ta_BDD.mdb" frmPrincipale.Show End Sub
je m'explique:
a. je declare un objet Public (globale) adoCon de type Connexion que j'alloue directement avec l'operateur New
b. puis dans la procedure Main, je crée ma connexion à la BDD, et regarde bien ici :
App.Pathdesigne le chemin d'acces à ton application, en d'autre terme c'est le dossier où se trouve ton application, form, module,... dons pour moi ici pour ne pas casser la tête, jai mis ma BDD dans le même dossier d'où la concatenation "\nom_de_ta_bdd.mdb"
c. frmPrincipale ici designe la feuille qui doit apparaitre directement apres que la connexion soit établi. si c'est une autre feuille exemple feuille de connexion, acceuille... tu met (frmConnexion.show, frmSplash.show...)
et là c'est pas tout reste le plus important. il faut maintenant dire à ton projet qu'il va demarer dans la procédure Main(). hé oui car par defaut il demare sur des feuille que tu lui indique si tu ne sais pas comment le faire ben voilà.
il suffit ssimplement d'aller dans la barre de menu et tu clique sur Projet/Propriétés de nom_de_ton_projet/ en suite sur l'onglet générale tu choit "Sub Main " dans "objet de demarage"
et là tu teste ton projet si tu voie la feuille que tu as demandé apparaitre alors Bravooooooo tu viens de surmonter la partie la plus difficile. car la connexion est établie avec un chemin relatif et plus mieux elle est dans la procédure Main(), tu ne vas plus te casser la tête à l'appeler, ni mm à l'ecrire elle sera appelée automatique par le programme. essaie ça voir
et si tu es pret pour le deuxieme round fait moi signe et on continuera dac?
tu voie je t'ai dit que ce sera penible sur le forum, mais bon puisque tu es pressé par le projet autant mettre le paquet dessus
amicallement