Requete sql et vb6

Résolu
praetor62 Messages postés 35 Date d'inscription dimanche 19 décembre 2010 Statut Membre Dernière intervention 14 juillet 2011 - 21 juin 2011 à 16:32
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 22 juin 2011 à 23:17
Bonjours,

J'ai beaucoup posté de sujet sur les requêtes je dois voir une malédiction je ne sais pas
Si on dit "on apprend de ses erreurs" ben moi la je vais apprendre beaucoup beaucoup de choses.. ^^'

Alors voila le contexte :

Dans Access j'ai une table qui contient tous les critères d'organismes : le nom, la ville, l'arrondissement etc.
Parmi ces champs, j'en sélectionne trois ( le nom, la ville et l'arrondissement) que j'affiche dans une msflexgrid. Ainsi j'ai la liste de tous mes organismes avec leurs infos importantes..
J'ai donc un bouton "ajouter"(dans une form à coté) qui exécutera une requête "INSERT INTO" :

ROrganisme = "INSERT INTO ORGANISME (NOMORGANISME, TYPEORGANISME, GENREORGANISME, INTERLOCUTEUR,FONCTION,TELPERSONNEL,TELTRAVAIL,ADRESSEORGANISME,ARRONDISSEMENT,VILLEORGANISME,CP,RMQ) VALUES ('" & TNomOrganisme.Text & "', '" & ComboType.Text & "', '" & ComboGenre.Text & "', '" & TInterlocuteur.Text & "', '" & TFonction.Text & "', '" & TPortable.Text & "', '" & TTTravail.Text & "', '" & TAdresse.Text & "', '" & TArrondissement.Text & "', '" & TVille.Text & "', '" & TCP.Text & "', '" & TRemarque.Text & "')"
base.Execute (ROrganisme)


Seulement voila, ma requête s’exécute normalement pour un nouvel enregistrement mais SI j'ai par exemple dans ma table un organisme "a" dans une ville "a" ayant pour arrondissement "a" et que j'ajoute dans ma table par cette requête un organisme lui aussi appelé "a" mais qui est dans une ville "b" et un arrondissement "b" ou "a" (peu importe) ma requête insert rien dans ma base de donnée
Comment y remédier?

11 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
21 juin 2011 à 21:06
Salut

"Ma clé primaire est sur "NomOrganisme""
"j'ai par exemple dans ma table un organisme "a""
"et que j'ajoute (...) un organisme lui aussi appelé "a""

La réponse est dans ta question.
Les clés primaires doivent être uniques.
A mon avis, il te faut sélectionner un couple de champs pour clé primaire, ou ce n° d'organisme, s'il est unique.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
21 juin 2011 à 23:54
Cette erreur apparait-elle dès premier item ?
Peut-être parce que le compilateur interprète tes signes + comme une demande de calcul mathématique (*). Pour concaténer des chaines, il faut utiliser &.
(*) renforcé par le fait que ton premier champ est surement numérique et que parmi les suivants, il trouve une chaine, d'où l'incompatibilité.

Il est important de bien utiliser les syntaxes et ne laisser aucune interprétation de la part du compilateur. C'est valable ici pour les chaines, mais il serait souhaitable de dimensionner chaque variable utilisée afin d'avoir conscience du type de donnée qu'on veut lui attribuer et penser écrire les fonctions de conversion nécessaires (les fonctions qui commencent par C, comme CStr, CLong, CDbl, CInt, CDate, CDille, CFoutu, CTard, CDodo...)
Moundir76 Messages postés 281 Date d'inscription dimanche 3 octobre 2010 Statut Membre Dernière intervention 16 mai 2014
21 juin 2011 à 17:36
Salut,
est ce que tu as une erreur lors de ta requete insert ?

Ce n'est pas un problème lié a la clé primaire ?
praetor62 Messages postés 35 Date d'inscription dimanche 19 décembre 2010 Statut Membre Dernière intervention 14 juillet 2011
21 juin 2011 à 17:50
Non aucune erreur lors de la requête insert.
Ma clé primaire est sur "NomOrganisme" Est-ce un problème de la mettre ici ou dois-je plutôt la mettre sur mon champ "N°Organisme"? Qu'est ce que cela changerais?

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NHenry Messages postés 15140 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 30 juin 2024 159
21 juin 2011 à 18:57
Bonjour,

Quel est la requête que tu obtient une fois tout remplacé à l'intérieur (quelle est la requête réellement executée ?)
Histoire de voir si par hasard les champs sont biens remplis.

Mon site
praetor62 Messages postés 35 Date d'inscription dimanche 19 décembre 2010 Statut Membre Dernière intervention 14 juillet 2011
21 juin 2011 à 20:35
je n'ai pas très bien compris ta question ^^'
Quand j’exécute ma requête, il n'ajoute/remplit aucun champs dans ma base de donnée (bien-sur tant que le nom de l'organisme est le même, sinon elle insert bien tout ce que je veux dans ma bdd)
NHenry Messages postés 15140 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 30 juin 2024 159
21 juin 2011 à 21:08
Bonjour,

Que vaut ROrganisme quand avant que tu l'execute ?
Une fois tous les remplacements (de variables) effectués.

Mon site
praetor62 Messages postés 35 Date d'inscription dimanche 19 décembre 2010 Statut Membre Dernière intervention 14 juillet 2011
21 juin 2011 à 21:34
Merci Jack je vais tester et voir si ça marche.
NHenry, Enfaite, ROrganisme est déclaré en tant que string

voici mon code en entier :

Dim Nb As Integer
Dim ROrganisme As String

    
 ''==> probleme
ROrganisme = "INSERT INTO ORGANISME (NOMORGANISME, TYPEORGANISME, GENREORGANISME, INTERLOCUTEUR,FONCTION,TELPERSONNEL,TELTRAVAIL,ADRESSEORGANISME,ARRONDISSEMENT,VILLEORGANISME,CP,RMQ) VALUES ('" & TNomOrganisme.Text & "', '" & ComboType.Text & "', '" & ComboGenre.Text & "', '" & TInterlocuteur.Text & "', '" & TFonction.Text & "', '" & TPortable.Text & "', '" & TTTravail.Text & "', '" & TAdresse.Text & "', '" & TArrondissement.Text & "', '" & TVille.Text & "', '" & TCP.Text & "', '" & TRemarque.Text & "')"
base.Execute (ROrganisme)
praetor62 Messages postés 35 Date d'inscription dimanche 19 décembre 2010 Statut Membre Dernière intervention 14 juillet 2011
21 juin 2011 à 22:28
Merci Jack ça a bien l'air d’être ça

Dans le même élans, j'ai une autre question :

je voudrais rajouter dans la msflexgrid que je parlais au début du post le numéro d'organisme afin de pouvoir l'utiliser dans d'autre form.
J'ai modifié mon code pour remplir ma flexgrid afin d'avoir ceci :

Dim requete As String

MSFlexGrid1.Cols = 4
MSFlexGrid1.ColWidth(0) = 500
MSFlexGrid1.ColWidth(1) = 1500
MSFlexGrid1.ColWidth(2) = 1500
MSFlexGrid1.ColWidth(3) = 1500
MSFlexGrid1.Row = 0
MSFlexGrid1.Col = 0
MSFlexGrid1.Text = "Num :"
MSFlexGrid1.Col = 1
MSFlexGrid1.Text = "Organisme :"
MSFlexGrid1.Col = 2
MSFlexGrid1.Text = "Ville :"
MSFlexGrid1.Col = 3
MSFlexGrid1.Text = "Arrondissement :"

Set base = OpenDatabase(App.Path + "\CirqueDB97")
    requete = "select NOrganisme, NomOrganisme, VilleOrganisme, Arrondissement from ORGANISME"
Set rs = base.OpenRecordset(requete)


Do While rs.EOF = False
    MSFlexGrid1.AddItem rs("NOrganisme") + Chr(9) + rs("NOMORGANISME") + Chr(9) + rs("VilleOrganisme") + Chr(9) + rs("Arrondissement")
    rs.MoveNext
Loop


Quand cette requête de remplissage est executée l'erreur suivante apparait : "runtime error '13' Type mismatch"

l'erreur est sur cette ligne " MSFlexGrid1.AddItem rs("NOrganisme") + Chr(9) + rs("NomOrganisme") + Chr(9) + rs("VilleOrganisme") + Chr(9) + rs("Arrondissement")"
Comment cela ça se fait?
praetor62 Messages postés 35 Date d'inscription dimanche 19 décembre 2010 Statut Membre Dernière intervention 14 juillet 2011
22 juin 2011 à 09:20
Oui cette erreur apparaissait dès le premier item ^^'

Effectivement en mettant Cstr devant mon rs("NOrganisme") ça à marché..
Je te remercie de toutes tes précisions ça m'est fort utile
J'ai mis aussi devant non pas Cstr mais Str c'est quoi la différence?
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
22 juin 2011 à 23:17
Si tu en fais l'expérience, tu comprendras vite, sinon, jette un coup d’œil dans l'aide.
Rejoignez-nous