Requete sql

Résolu
cs_zaatout
Messages postés
156
Date d'inscription
dimanche 19 novembre 2006
Statut
Membre
Dernière intervention
20 novembre 2013
- 26 avril 2008 à 11:47
cs_zaatout
Messages postés
156
Date d'inscription
dimanche 19 novembre 2006
Statut
Membre
Dernière intervention
20 novembre 2013
- 27 avril 2008 à 15:03
Bonjour les Amis
comment ecrire la rêquete suivante
j'ai une table stock  et autre compta

les champs stock :
date ,nbr,mtbr,compte,struct,etat

les champs compta :
arr,piece,br,mt,cpte,etat1

je voudrais cherche les numeros (nbr) qui existe en stock et qui n'existe pas en compta (br)
et les inserés dans la table tstk qui comporte les même champs que stock.

Merci d'avance a +

13 réponses

cs_zaatout
Messages postés
156
Date d'inscription
dimanche 19 novembre 2006
Statut
Membre
Dernière intervention
20 novembre 2013

27 avril 2008 à 15:03
Salut

Ca marche Bien c'ete la virgule !!!!!!!!!

bdd.Execute "delete from tstk"


bdd.Execute "insert into tstk " & _
"SELECT stock.date, " & _
"       stock.nbr, " & _
"       stock.mtbr, " & _
"       stock.compte, " & _
"       stock.struct, " & _
"       stock.etat " & _   ' Pas de virgule ici............
"  FROM stock " & _
" where nbr not in (select br from compta)"

Merci et bye a +
3
LIBRE_MAX
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
26 avril 2008 à 12:44
Salut,
Est_ce que nbr de Stock et br de Compta sont de même type ?
Si oui, fais une requete de non correspondance.
Lies ta table Stock à Compta sur nbr d' un coté et br de l' autre.Propriétés de la relation: Tout de Stock et seulement
ceux de Compta pour lesquels les enregistrements sont égaux.
Sélectionnes ensuite tout les champs de Stock avec la condition Compta.br est null.
Tu pourras ensuite faire l' Insertion du résultat de cette requete dans tstk.

<hr />
... Y'en a même qui disent qu'ils l'ont vu voler.
/PRE>
0
cs_zaatout
Messages postés
156
Date d'inscription
dimanche 19 novembre 2006
Statut
Membre
Dernière intervention
20 novembre 2013

26 avril 2008 à 12:52
Salut


nbr et br sont de même type j'ai fais ca mais ca donne une erreur
erreur d'execution 3134
syntaxe erreur in insert into statement


bdd.Execute "delete from tstk"


bdd.Execute "insert into tstk " & _
"SELECT stock.date, " & _
"       stock.nbr, " & _
"       stock.mtbr, " & _
"       stock.compte, " & _
"       stock.struct, " & _
"       stock.etat, " & _
"  FROM stock " & _
" where nbr not in (select br from compta)"


A +
0
LIBRE_MAX
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
26 avril 2008 à 13:37
renommes ton champ date.
Il y' a risque de confusion...

<hr />
... Y'en a même qui disent qu'ils l'ont vu voler.
/PRE>
0

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

Posez votre question
LIBRE_MAX
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
26 avril 2008 à 13:44
si ça te coûte de le renommer, entoures le de crochets ou précèdes le du nom de la table.
[date] ou Stock.fate.

<hr />
... Y'en a même qui disent qu'ils l'ont vu voler.
/PRE>
0
cs_zaatout
Messages postés
156
Date d'inscription
dimanche 19 novembre 2006
Statut
Membre
Dernière intervention
20 novembre 2013

26 avril 2008 à 14:08
Salut

ca ne marche toujour pas!
0
LIBRE_MAX
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
26 avril 2008 à 14:21
essaies ceci :
bdd.Execute "insert into tstk " & _
"(SELECT DISTINCTROW Stock.sDate, Stock.nbr, Stock.mtbr, Stock.compta, Stock.struct, Stock.etat
FROM Stock LEFT JOIN compta ON Stock.nbr = compta.br WHERE (((compta.br) Is Null)));"

ps: j' ai remplacé date par sDate.

et ma requete étant faite sur une seule ligne, à toi de la réécrire en rajoutant les " & _

<hr />
... Y'en a même qui disent qu'ils l'ont vu voler.
/PRE>
0
cs_zaatout
Messages postés
156
Date d'inscription
dimanche 19 novembre 2006
Statut
Membre
Dernière intervention
20 novembre 2013

26 avril 2008 à 14:30
salut

même erreur

je veux le numero qui exite en stock et non pas en compta
 A+
0
LIBRE_MAX
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
26 avril 2008 à 14:42
oui oui j' ai compris !
le numero qui exite en stock et non pas en compta...
Bon , fais d' abord ta requete Selection
"SELECT DISTINCTROW Stock.sDate, Stock.nbr, Stock.mtbr, Stock.compta, Stock.struct, Stock.etat
FROM Stock LEFT JOIN compta ON Stock.nbr = compta.br WHERE (((compta.br) Is Null));"

pour voir si elle te renvoit quelque chose.
Ensuite tu passeras à l' insertion.

Chez moi il n' y a pas d' erreur au niveau de la selection.

<hr />
... Y'en a même qui disent qu'ils l'ont vu voler.
/PRE>
0
LIBRE_MAX
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
26 avril 2008 à 14:51
pour l' insertion  il faudra enumèrer les champs que tu veux insèrer.
essaies ceci:


bdd.Execute "insert into tstk (sDate, nbr, mtbr, compta, struct, etat  )  Value ( " &
"(SELECT DISTINCTROW Stock.sDate, Stock.nbr, Stock.mtbr, Stock.compta, Stock.struct, Stock.etat
FROM Stock LEFT JOIN compta ON Stock.nbr = compta.br WHERE (((compta.br) Is Null))));"

                   
<hr />
... Y'en a même qui disent qu'ils l'ont vu voler.
/PRE>
0
LIBRE_MAX
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
26 avril 2008 à 14:52
non non pas de Value !
bdd.Execute "insert into tstk (sDate, nbr, mtbr, compta, struct, etat  )  " &
"(SELECT DISTINCTROW Stock.sDate, ....

<hr />
... Y'en a même qui disent qu'ils l'ont vu voler.
/PRE>
0
cs_zaatout
Messages postés
156
Date d'inscription
dimanche 19 novembre 2006
Statut
Membre
Dernière intervention
20 novembre 2013

26 avril 2008 à 16:28
salut

ca n'a pas marche
A +
0
cs_Jack
Messages postés
14007
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
78
26 avril 2008 à 18:17
Salut
Zaatout : "ça ne marche pas" ne veut rien dire.
Soit tu as une erreur et tu nous diras laquelle, soit l'action n'insère pas de données et là c'est dans le SQL que ça se passe.
Pour info, la requète que tu nous a fourni fonctionne :
bdd.Execute "insert into tstk " & _
   "SELECT stock.date, " & _
   "       stock.nbr, " & _
   "       stock.mtbr, " & _
   "       stock.compte, " & _
   "       stock.struct, " & _
   "       stock.etat, " & _      <-- Pas de virgule finale
   "  FROM stock " & _ 
   " where nbr not in (select br from compta)"

sauf :
- Qu'il ne faut pas de virgule après le dernier terme, celui juste avant le FROM
- Par précaution, désigne le nom de la table dans chaque champ car ici les deux tables tstk et stock comportent les mêmes noms de champ :
   " where stock.nbr not in (select compta.br From compta)"

Cette mise en forme est aussi possible :
bdd.Execute "insert into tstk " & _
   "SELECT tstk.date   = stock.date, " & _
   "       tstk.nbr    = stock.nbr, " & _
   "       tstk.mtbr   = stock.mtbr, " & _
   "       tstk.compte = stock.compte, " & _
   "       tstk.struct = stock.struct, " & _
   "       tstk.etat   = stock.etat " & _
   "  FROM stock " & _ 
   " where stock.nbr not in (select compta.br from compta)"

De plus, pour contrôler l'insertion, la commande Execute accepte un deuxième paramètre permettant de renvoyer le nombre de lignes touchées par la requète :
   Dim NbLignes As Long
   bdd.Execute "insert into tstk ....", NbLignes
   MsgBox NbLignes

PS : Merci d'avoir fait l'effort de la mise en forme de la requète beaucoup plus facile à lire (pas fréquent dans ce forum).

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

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0