IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

SQL - Integrer un Cint(MID) dans un UPDATE


Sujet :

Requêtes et SQL.

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 12
    Points : 3
    Points
    3
    Par défaut SQL - Integrer un Cint(MID) dans un UPDATE
    Bonjour,

    Sachant qu'on ne peux pas integrer un SELECT dans un SET en faisant un UPDATE sur ACCESS.

    J'aimerais inserer une donnée (Variant) dans une nouvelle colonne de ma table X avec un UPDATE sur ACCESS.
    Pour cela je recupere les 5 premiers et les suivants caracteres d'une données Var de la table Y, qui doit etre egal à X.Var

    Pour etre plus explicite je vous montre ce que ca donne avec un INSERT :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    INSERT INTO X (  Variant)
    SELECT Y.Variant
    FROM Y, X
    WHERE CInt(Mid(Y.Variant,1,5))= X.RD0005
    AND CLng(Mid(Y.Variant,9,6))=X.ICOMPTE;

    Quelqu'un a une solution svp ?

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour,

    De mémoire le type Variant est un type complexe VBA mais est inconnu pour Jet.

    Ou alors tu utilises des mots réservés dans tes noms de colonnes.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Variant est le nom de ma donnée dans les 2 tables, j'ai pas eu de message d'erreur par rapport à cela, ca à pas l'air de poser probleme.
    C'est au niveau de la syntaxe du "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CInt (Mid (Y.variant,1,5) ) = X.RD0005" et "CLng(Mid (Y.variant,9,6) = X.ICOMPTE
    " que ca pose probleme je pense .

    Si je dois respecter la syntaxe specifique à ACCESS pour un UDPATE ca donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    UPDATE X, Y 
    SET X.IBAN = [Y].[IBAN], X.Variant = [Y].[Variant]
    WHERE ((X.RD0005)= [Y]![Cint(Mid (Y.Variant, 1, 5))]
    AND (X.ICOMPTE)=[Y]![Cint(Mid(Y.variant, 9, 6))]);
    Alors oui c'est tres bizarre et ca m'etonne pas que ca ne passe pas mais je n'arrive pas à formaliser cela correctement.

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Utilise les crochets pour isoler ce vilain petit canard.

    Décompose ton problème.

    1) création d'un objet requête coté X puis côté Y avec de part et d'autre le cint/mid, ce qui donnera 2 objets requêtes.
    2) faire un select avec ces 2 requêtes.

    Si le point 2 marche ce dont je ne doute pas. L'update pourra être fait avec de simple Inner join via le générateur (ou à la mimine si tu préfères).

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Alors, oui c'est ce que j'avais fais, la jointure fonctionne très bien avec le INNER join et j'ai reussi à integrer X à Y grace au 2 Select:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT CInt(Mid(Variant,1,5)) AS VAR
    FROM Y;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT CLng(Mid(Variant,9,6)) AS ICPT
    FROM Y;
    Mais j'aimerais ajouter les 2 colonnes VAR & ICPT dans la table X car au final la JOINTURE (que j'ai fais en mode "creation de requete") je dois l'executer à chaque fois

  6. #6
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Donc tu as 2 objets requêtes le inner join fonctionne, tu n'as plus qu'à appliquer ça dans un troisième objet requête (qui feront appel au 2 premiers) sous la forme INSERT INTO ... SELECT ... décrite dans ce cours :

    https://access.developpez.com/sql/#L2.2.5.b

    PS : les balises de code sont OBLIGATOIRES dans tes posts. Merci
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Je reexpliqe plus clairement :

    Dans ma table X j'ai 2 données : X1 & X2. J'aimerais inserer 2 nouvelles données dans cette table X qui sont X3 & X4 qui sont identiques à Y3 & Y4 (qui viennent d'une table Y).

    La donnée Y4 est sur 14 chiffres.
    Les 5 premiers chiffres de la données Y4 doivent correspondre à X1.
    Les 6 derniers doivent correspondre à X2.

    J'ai donc fait 2 requetes SELECT qui selectionnent :

    -les 5 premiers (requete "MID_X1" ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                                                  SELECT MID(Variant,1,5) 
                                                             FROM Y;
    -les 6 derniers (requete "MID_X2") :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                                                 SELECT CLng(Mid(Variant,9,6)) 
                                                            FROM Y;

    J'aimerais integré les 2 requetes dans le UPDATE afin de faire la comparaison :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE  X 
    JOIN Y ON MID_X2 = X.X2
    JOIN Y ON MID_X1 = X.X1
    SET X.X3 = Y.Y3
    SET X.X4 = Y.Y4

  8. #8
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour,

    Déjà tes select ne renvoie pas le même type (clong d'un côté et string de l'autre). Les 2 doivent avoir le même type (long de préférence).

    Ensuite ton update, tu l'as probablement fait à la main, mais il me semble que tu as des lacunes en langage SQL.

    Si c'est le cas utilises le générateur de requête d'ACCESS. Il t'aidera à composer une requête select avec de vrais jointures et en transformant le tout en requête update tu n'auras plus que la correspondance champ source/champ destination à faire.

    Et si tu veux vraiment le faire à la mimine la syntaxe est la suivante (entre autre) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE A 
    INNER JOIN B 
    ON A.champ1= B.Champ1 
    SET A.Champ2 = B.Champ2, A.ChampX = B.champY
    WHERE ...

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

Discussions similaires

  1. SQL 2000 : forcer un commit dans un update
    Par usf70 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 01/06/2007, 09h30
  2. [SQL] problème de SUM dans un update
    Par _Jérôme_ dans le forum Langage SQL
    Réponses: 5
    Dernier message: 12/03/2007, 18h22
  3. [SQL] concaténation dans un UPDATE
    Par jiojioforever dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 02/02/2007, 13h38
  4. [Forms 9i] Integrer du code java dans un bloc PL/SQL
    Par mohmanjdo dans le forum PL/SQL
    Réponses: 2
    Dernier message: 07/02/2006, 13h54
  5. Une ch'tite bizarrerie dans les Updates de SQL Server
    Par Wakko2k dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 08/04/2004, 14h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo