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

Access Discussion :

pour oracle on a La TABLE systeme DUAL et pour access ??


Sujet :

Access

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 13
    Points : 11
    Points
    11
    Par défaut pour oracle on a La TABLE systeme DUAL et pour access ??
    slt,
    voulant tester la requête ci dessous sur sql ACCESS 2000 , ca n'a pas voulu marcher "logique il reconnait pas la table DUAL " y a t'il une table systéme temporaire à laquelle je pourrai affecter des valeurs dynamiquement à partir de vba acccess
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     INSERT INTO client
    (id, nom, prenom)
    SELECT " & variableVBA1 & ", '" & variableVBA2 & "', '" & variableVBA3 & '"
    FROM dual
    WHERE not exists (select * from client
    where client.id = " & variableVBA1 & ");
    la requete en question insere dans ma table client les id et nom et prénom de client qui n'existe pas dans ma table
    et ca marche pas
    si qq'un peut m'aider

    [Modération, cafeine : Pensez à utiliser la balise [CODE] qui améliore la lisibilité, merci]

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,
    Je ne connais pas d'équivalent à la table DUAL dans Access.

    J'ai essayé en créant une table appelée DUAL avec un champ et un enregistrement.
    Et là la requête fonctionne. Mon exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO Files ( File, Path )
    SELECT "file1" AS F, "C:\" AS P
    FROM DUAL
    WHERE NOT Exists (SELECT * FROM Files WHERE Files.Path="C:\")
    Access nomme ses tables systemes MSysXXXXX.
    Tu n'as qu'à créer une table MSysDUAL que tu utilise comme DUAL dans ORACLE et lui mettre la propriété 'Masqué'.

    Cdlt

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    sltt LedZeppII
    si j'ai bien compris il faut que je crée une table masqué , car au fait le but d'utiliser la table temporaire " comme dual pour oracle" c par rapport à mon importation , si je crée cette table il va falloir penser à la vider a chaque traiment et à la compacter pour ne pas voir ma bd gonflé anormalement aprés une semaine ..
    j'aurai bien aimé savoir si cette table exsite bien dans access ou pas , ca m'aurait vachement faciliter le travail .. mais bon je vais essayer ca
    merci pour ta réponse 8)

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 345
    Points : 23 805
    Points
    23 805
    Par défaut
    Par mesure de prudence, je déconseille d'utiliser un nom de table semblable aux table MSys.

    On ne sais jamais comment le moteur de la base fonctonne et il pourrait réagir assez mal à la présence d'une table qu'il pense être à lui et qui ne l'est pas.

    A part cela je n'ai jamais rien lu à propos de table temporaire gérer par le système dans Access.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour hnb2003,
    Je recommendais de masquer cette table pour être sûr de ne pas l'effacer par erreur. Ce n'est pas indispensable.
    Dans mon exemple je me suis contenté de reproduire ce que j'ai lu dans une documentation SQL Oracle. Ils disent que la table DUAL est simplement une table ne contenant qu'un seul enregistrement. Je ne pense pas qu'il s'agisse d'une table temporaire.
    J'ai l'impression que c'est pour répondre à un besoin de syntaxe, dans les cas où la clause FROM est obligatoire (tout le temps dans oracle ?).
    Moi j'ai eu le pb inverse, connaissant Access mais pas Oracle. Je faisais des SELECT sur des expressions sans mettre FROM DUAL, et je me faisais jeter. En parcourant les exemples j'ai vu cette fameuse table DUAL.

    Bon courage pour la suite.

  6. #6
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    bonjour,
    merci pôur vos réponse(marot_r et Auteur Message
    LedZeppII) ,en ce qui concerne le select j'ai du modifier ma requete car la clause FROM est obligatoire si je veux injecter mes données car par rapport a ce queje voulais "injecter des données directement à partir de variable vba contenant des enregistrements EXCEL " en fin de compte j'ai opté pour une autre solution en passant par un DELETE puis un INSERT .. lol c pas puissant comme méthode ,
    le insert a partir d'une table extérieur , je n'arrive pas trop a voir comment je le ferai : surtout que l'application sera en mode partage en réseau..
    le req ci dessous marche pas ..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    INSERT INTO client 
    (id, nom, prenom) 
    SELECT " & variableVBA1 & ", '" & variableVBA2 & "', '" & variableVBA3 & '" 
    WHERE not exists (select * from client 
    where client.id = " & variableVBA1 & ");
    >>>>>>>>>>>>>>>>>>ERREUR


    [RAPPEL]
    [Modération, cafeine : Pensez à utiliser la balise [CODE] qui améliore la lisibilité, merci]

  7. #7
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Il manque le FROM dans le SELECT

  8. #8
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    bonjour hnb2003,
    J'ai retrouvé la définition de DUAL:
    DUAL is a table automatically created by Oracle along with the data dictionary.
    DUAL is in the schema of the user SYS, but is accessible by the name DUAL to all users. It has one column, DUMMY, defined to be VARCHAR2(1), and contains one row with a value ’X’. Selecting from the DUAL table is useful for computing a constant expression with the SELECT statement. Because DUAL has only one row, the constant is returned only once. Alternatively, you can select a constant, pseudocolumn, or expression from any table, but the value will be returned as many times as there are rows in the table.
    Si tu crée dans ta base une table à un seul enregistrement et que tu l'appelle DUAL, tu pourra mettre la clause FROM DUAL dans ta requête et elle fonctionnera. C'est ce que j'ai fait avant d'envoyer ma première réponse.

    Sinon, tu mets tes valeurs dans une table temporaire
    1. supprimer la table temporaire si elle existe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    On Error Resume Next
    DoCmd.RunSQL "DROP TABLE zTMP;"
    On Error GoTo 0
    2. stocker les valeurs en créant une table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT '" & variableVBA1 & "' AS id, " & variableVBA2 & "' As nom, '" & variableVBA3 & "' as prenom" & " INTO zTmp;"
    3. Requête ajout.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     INSERT INTO client (id, nom, prenom)
    SELECT zTmp.id, zTmp.nom, zTmp.prenom FROM zTmp LEFT JOIN Client ON zTmp.id=Client.id
    WHERE ((Client.id) Is Null);
    Bonne continuation.

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/02/2013, 15h10
  2. [system join ]Comment faire pour relier les tables systems?
    Par zoltix dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 16/11/2007, 07h52
  3. Réponses: 3
    Dernier message: 18/07/2007, 17h20

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