Requete sql et vb6 [Résolu]

Signaler
Messages postés
35
Date d'inscription
dimanche 19 décembre 2010
Statut
Membre
Dernière intervention
14 juillet 2011
-
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
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

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
68
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)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
68
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...)
Messages postés
286
Date d'inscription
dimanche 3 octobre 2010
Statut
Membre
Dernière intervention
16 mai 2014

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 ?
Messages postés
35
Date d'inscription
dimanche 19 décembre 2010
Statut
Membre
Dernière intervention
14 juillet 2011

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?
Messages postés
14677
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 juillet 2020
143
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
Messages postés
35
Date d'inscription
dimanche 19 décembre 2010
Statut
Membre
Dernière intervention
14 juillet 2011

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)
Messages postés
14677
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 juillet 2020
143
Bonjour,

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

Mon site
Messages postés
35
Date d'inscription
dimanche 19 décembre 2010
Statut
Membre
Dernière intervention
14 juillet 2011

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)
Messages postés
35
Date d'inscription
dimanche 19 décembre 2010
Statut
Membre
Dernière intervention
14 juillet 2011

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?
Messages postés
35
Date d'inscription
dimanche 19 décembre 2010
Statut
Membre
Dernière intervention
14 juillet 2011

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?
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
68
Si tu en fais l'expérience, tu comprendras vite, sinon, jette un coup d’œil dans l'aide.