Insertion de données

nicoine Messages postés 51 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 23 février 2012 - 27 déc. 2006 à 09:44
cavo789 Messages postés 168 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 28 juillet 2009 - 27 déc. 2006 à 15:25
Salut à tous,

Je débute en SQL et donc je bloque sur une commande d'insertion dans une table,je m'explique:
Je voudrai appliquer une mise à jour sur une base de donnée existante avec une commande SQL.

en gros j'aimerai faire ceci::

Position=SELECT NumTypeCaracteristique FROM TypeCaracteristique WHERE NomTypeCaracteristique = 'Végétal'

INSERT INTO [dbo].[Specification] ([NomSpec], [taillevalspec], [UniteSpec], [TypeSpec], [PlaceSpec], [numTypeCaracteristique])

VALUES ( "Dimension", 500, "", "0", 0, Position)

Evidement cela ne fonctionne pas, je ne sait pas si l'on peut faire intervenir une variable, je ne sait pas non plus comment remplacer cette variable par le 'select...' directement ds le 'insert into...'

Merci de m'aider

Nico.

11 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
27 déc. 2006 à 10:09
tu souhaites faire une insertion, ou une mise a jour ?

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
nicoine Messages postés 51 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 23 février 2012
27 déc. 2006 à 10:14
Une insertion: celle que j'ai spécifier sauf que à la place de la variable Position il faut que je récupère la valeur dans une autre table,
c'est ce que j'ai fait avec l'instruction Position = SELECT....

Nico
0
cavo789 Messages postés 168 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 28 juillet 2009 1
27 déc. 2006 à 10:55
Ci-dessous un petit code.   Je suppose que tu travailles en VBA Access si pas, il faudra un peu modifier le code et je suppose aussi que tout est OK (je n'ai pas fais de contrôle rs.EOF ou autre)

Dim rs As RecordSet
Dim sSQL As String

   ' Lecture de Position

   sSQL = "SELECT NumTypeCaracteristique FROM TypeCaracteristique WHERE NomTypeCaracteristique = 'Végétal'"

   Set rs = CurrentDB.OpenRecordSet(sSQL)

   Position = rs.fields("NumTypeCaracteristique")

   rs.Close

   Set rs = Nothing

   ' Insertion

   CurrentDB.Execute "INSERT INTO [dbo].[Specification] ([NomSpec], [taillevalspec], [UniteSpec], [TypeSpec], [PlaceSpec], [numTypeCaracteristique]) " & _
      "VALUES ( 'Dimension', 500, '', '0', 0, " &  Position & ")",

----

(Coloration syntaxique automatique par Kenji)




Christophe
0
nicoine Messages postés 51 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 23 février 2012
27 déc. 2006 à 11:30
Je suis dacord avec ton code mais maleurheusement je ne peus pas faire comme cela.

J'ai oublier de préciser que pour executer mes requetes SQL, je lis un fichier texte qui contient les requetes.
Je doit donc récupérer du SQL pur et dur pour ensuite les executer à partir de VB6.

Actuellement je fais comme ceci:
....
CurrentDB.Execute Text

Où Texte est la variable possédant la requete récupéré du fichier text.

Nico
0

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

Posez votre question
cavo789 Messages postés 168 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 28 juillet 2009 1
27 déc. 2006 à 13:43
Suffit dès lors que tu fasses un Replace.

Si je te comprends, la variable Text contient ceci : INSERT INTO [dbo].[Specification] ([NomSpec], [taillevalspec], [UniteSpec], [TypeSpec], [PlaceSpec], [numTypeCaracteristique]) " & _
      "VALUES ( 'Dimension', 500, '', '0', 0, Position)"

Tu fais donc un Replace(Text, "Position", Position).   Le texte Position sera dès lors remplacé par la variable.

PS : Lorsque tu poses une question, merci d'être le plus explicite possible pour éviter à tous une perte de temps.

Christophe
0
nicoine Messages postés 51 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 23 février 2012
27 déc. 2006 à 14:03
Je crois qu'on ne c'est pas très bien compris, je reformule ma question plus clairement:

Je dois créer un fichier texte dans lequel je dois indiquer des requêtes SQL et 'seulement' des requêtes SQL, rien d'autres.
Ce fichier est ensuite lu par une application écrite en  VB6, l'application récupère les requetes SQL et les executes.

Je sais éffectuer ces requête en utilisant VB mais j'aimerais savoir comment traduire ceci en language purement SQL afin des les placer dans un fichier texte,
c'est à dire traduire ceci en SQL:

MyRecordset.Open  "SELECT NumTypeCaracteristique FROM TypeCaracteristique WHERE NomTypeCaracteristique = 'Végétal'",....
Position = MyRecordset! NumTypeCaracteristique

Text = "INSERT INTO [dbo].[Specification] ([NomSpec], [taillevalspec], [UniteSpec], [TypeSpec], [PlaceSpec], [numTypeCaracteristique])
VALUES ( "Dimension", 500, "", "0", 0," & Position & ")"

J'espère avoir été plus claire.

Nico
0
cavo789 Messages postés 168 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 28 juillet 2009 1
27 déc. 2006 à 14:32
J'avais bien compris.

Ton fichier texte reprends donc une ligne exactement comme celle-ci

INSERT INTO [dbo].[Specification] ([NomSpec], [taillevalspec], [UniteSpec], [TypeSpec], [PlaceSpec], [numTypeCaracteristique])
VALUES ( "Dimension", 500, "", "0", 0, Position)

Le but de la manoeuvre est donc de remplacer de manière dynamique le mot Position par une variable lue dans ton code.

Après avoir chargé la ligne ci-dessus dans une variable (appelons-la sSQL), tu dois donc faire une requête SQL préalable pour récupérer la position.   Ceci se fait comme suit

Dim rs As RecordSet
Dim sSQL As String
Dim wPosition As Long

   ' Lecture de Position

   sSQL = "SELECT NumTypeCaracteristique FROM TypeCaracteristique WHERE NomTypeCaracteristique = 'Végétal'"

   Set rs = CurrentDB.OpenRecordSet(sSQL)

   wPosition = rs.fields("NumTypeCaracteristique")

   rs.Close

   Set rs = Nothing

Nous voici donc avec deux variables sSQL et wPosition.

Le reste est simple : il suffit de remplacer le mot Position dans sSQL avec le contenu de la variable wPosition et donc

sSQL = Replace(sSQL, "Position", wPosition).

Faire plus que ça me semble impossible

Christophe
0
nicoine Messages postés 51 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 23 février 2012
27 déc. 2006 à 14:55
Je crois que l'on ne se comprend pas du tout, mais on devrait y arriver::

Je suis à peu pret d'acord avec ton code mais ce n'est pas du code VB qu'il me faut (ca je sais faire), c'est du code SQL équivalent.

Ce que je recherche c'est une requete, ou une série de requetes SQL afin de remplir mon fichier text (ce fichier ne doit comporter que des requêtes SQL).

INSERT INTO [dbo].[Specification] ([NomSpec], [taillevalspec], [UniteSpec], [TypeSpec], [PlaceSpec], [numTypeCaracteristique])
VALUES ( "Dimension", 500, "", "0", 0, Position
:: ceci n'est pas une requête SQL car à ma connaissance SQL ne gère pas les variables,
Position sera donc ici considéré comme du text,
l'autre solution qui doit certainement être possible c'est d'imbriquer 2 requetes SQL, comme lorsque l'on utilise la command JOIN,
mais je ne sais pas comment formuler ce genre de requete avec INSERT INTO.

Nico
0
cavo789 Messages postés 168 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 28 juillet 2009 1
27 déc. 2006 à 15:04
Désolé mais on ne se comprends pas.  

>Position sera donc ici considéré comme du text,

Oui mais ... non.   Pas si tu utilises le code que je t'ai écris.

Christophe
0
nicoine Messages postés 51 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 23 février 2012
27 déc. 2006 à 15:15
Tu m'indique du code VB, je ne veux que du code SQL.

On ne se comprend donc tampis je verrais cela plus tard, ne te prend pas la tête la dessus.

Merci quand même

Nico
0
cavo789 Messages postés 168 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 28 juillet 2009 1
27 déc. 2006 à 15:25
Ce que tu demandes est impossible : pour récupérer la valeur de Position, tu dois d'abord lire ton recordset.

Christophe
0
Rejoignez-nous