Requete sql

[Résolu]
Signaler
Messages postés
156
Date d'inscription
dimanche 19 novembre 2006
Statut
Membre
Dernière intervention
20 novembre 2013
-
Messages postés
156
Date d'inscription
dimanche 19 novembre 2006
Statut
Membre
Dernière intervention
20 novembre 2013
-
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

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

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 +
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
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>
Messages postés
156
Date d'inscription
dimanche 19 novembre 2006
Statut
Membre
Dernière intervention
20 novembre 2013

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 +
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
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>
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
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>
Messages postés
156
Date d'inscription
dimanche 19 novembre 2006
Statut
Membre
Dernière intervention
20 novembre 2013

Salut

ca ne marche toujour pas!
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
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>
Messages postés
156
Date d'inscription
dimanche 19 novembre 2006
Statut
Membre
Dernière intervention
20 novembre 2013

salut

même erreur

je veux le numero qui exite en stock et non pas en compta
 A+
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
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>
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
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>
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
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>
Messages postés
156
Date d'inscription
dimanche 19 novembre 2006
Statut
Membre
Dernière intervention
20 novembre 2013

salut

ca n'a pas marche
A +
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
80
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)