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

Langage SQL Discussion :

Comparaison 2 requêtes


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2011
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2011
    Messages : 172
    Points : 88
    Points
    88
    Par défaut Comparaison 2 requêtes
    Bonjour forum,

    J'ai une liste des livraison a effectuer dans un server SQL.
    Ensuite J'ai le détail des livraisons (Emplacement, Heure de livre, etc..) dans une BD Access.

    Lorsque j'effectue une requête afin de savoir l'ensemble de mes livraisons à effectuer dans une journée (Vers un tableau excel), j'aimerais que les informations contenues dans ma BD access en lien avec ses lignes de livraison se transporte.

    Les critères afin de voir si même ligne de livraison: date,Contrat, Produit, Amount, cleints, address, ville

    et ensuite les données qui ont la même date de livraison mais qui n'on pas trouver de correspondance, soit supprimer de ma base de donnée.

    Je procède ainsi, car je ne peux pas modifier les données dans mon server SQL, afin de contourner ce problème j'ai donc créé une 2e BD dans laquelle j'entre les informations en liens avec mes livraisons, ces informations doivent donc se transporter lorsque j'effectue ma requête dans mon server SQL.

    PS: Si vous pensez à une autre façon n'hésitez pas je suis ouvert a toute suggestion.

    Merci!
      0  0

  2. #2
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2011
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2011
    Messages : 172
    Points : 88
    Points
    88
    Par défaut
    Rebonjour forum,

    Je vais reformulé, afin de vous donner le maximum d'information possible

    J'ai une première requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT sch.prodstatusid, sch.prodstatusid2, Q.sonbralt, sch.prodid, sch.siteid, sch.deliveryno, sch.floorid, sch.location, SUM(sch.amount) as amount, MAX(sch.schdate), sch.deliverydate, C.shortname, R.c_address, M.descr
                    FROM Customers C
                    INNER JOIN roadsheet R ON C.custid = R.custid
                        INNER JOIN rsscheduledtl sch ON R.roadsheetid = sch.roadsheetid
                            INNER JOIN QOHdr Q ON sch.qonbr = Q.qonbr
                            INNER JOIN Municipality M ON Q.municipalityId = M.Municipalityid
                    WHERE sch.prodid IN (" & critereProd & ")
                    AND sch.deliverydate = '" & dateLiv & "'
                    AND Q.sonbralt <>''
                    AND sch.isactive = 1
                    AND Q.isActive = 0
                    GROUP BY sch.prodstatusid, sch.prodstatusid2, Q.sonbralt, sch.prodid, sch.deliveryno, sch.floorid, sch.location, sch.deliverydate, C.shortname, R.c_address, M.descr, sch.siteid

    J'aimerais lors de ma requête, qu'une seconde requête compare les données des champs ( deliverydate, sonbralt, amount ) dans mon autre base de donnée, qui est une BD Access.

    Ensuite lorsqu'il a trouver les données correspondante, qu'il ajoute les nouvelles données (Notrailer, Ordre, Periode, Camionneur, Commentaire)

    Pour finir tous les enregistrements dans ma BD qui n'ont pas trouver de correspondance et qui ont cette même date de livraison soient supprimer, ou peu-être supprimer toutes les données avec cette date de livraison et lorsque je ferai le prochain enregistrement les données désiré seront sauvegardé.

    PS: cette requête ne présente pas énormément de données, 100 ligne maximum

    Merci de votre aide
      0  0

  3. #3
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 18
    Points : 39
    Points
    39
    Par défaut
    J'étais parti sur un truc compliqué, mais j'ai vu qu'il y avait ça :

    http://office.microsoft.com/fr-fr/ac...001034599.aspx

    qui devrait suffire.

    Sinon la solution compliqué partait du principe qu'on ne pourrait pas requêter les deux bases depuis sql server, et je conseillais de faire un export des données d'access vers une nouvelle table dans sql server qui permettrais ce traitement. Mais pour une centaine de lignes seulement c'est peut-être un peu excessif.
      0  0

  4. #4
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2011
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2011
    Messages : 172
    Points : 88
    Points
    88
    Par défaut
    Ok merci je regarde ça et je te tiens au courant !!
      0  0

  5. #5
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2011
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2011
    Messages : 172
    Points : 88
    Points
    88
    Par défaut
    salut samael314,

    J'ai regardé ça un peu et je ne sais pas si c'est cela que je recherche, car je crois que si j'utilise Access pour faire le lien avec ma base SQL, il va faloir que j'ouvre access afin d'actualiser mes tables et ensuite faire mes opérations dans Excel. Je doit faire l'ensemble de mes opération via Excel.

    Ce que j'avais pensé, était de créer une table (ou un vue) avec une requête dans ma base de donnée SQL selon la date de livraison, et le même chose pour ma base de donnée Access.

    Par le suite je pourrais comparer ces deux table selon quelques critère, et ensuite afficher les résultat dans excel. Je pourrais créer un clé primiare en combinant ces critères?? je pourrais donc finir par avoir une requête qui ressemble à celle la:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT .... FROM SQLView SV INNER JOIN ACCESView AV ON SV.Clef = AV.Clef
    Ou ma colonne "clef" est la colonne qui est créé en combinant les info de mes différents critère


    Est-ce possible, sans que ça soit trop compliquer?
      0  0

  6. #6
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 18
    Points : 39
    Points
    39
    Par défaut
    Es-tu sûr de pouvoir interroger simultanément les deux bases avec la même requête ? Perso j'en doute.

    Tu peux faire une requête sur plusieurs bases différentes mais au sein d'un même SGBD (système de gestion de base de données : oracle, sql server...). Par contre entre deux SGBD différents, je ne pense pas, et requêter une base access depuis sql server ça m'étonnerait aussi.

    Donc si j'ai bien compris, tu veux tout faire depuis Excel. C'est à dire interroger la base access et la base sql server. Je te le déconseille :
    - déjà tu ne pourras pas faire une seule requête pour comparer directement les deux tables depuis Excel, ça serait trop facile. Tu pourras seulement ramener les données dans les feuille excel et tu devra comparer avec les fonctions excel.
    - ensuite je ne sais pas si microsoft a fait un effort la dessus (c'est possible) mais les requêtes sql sont extrêmement lentes depuis excel, ensuite tu dois donner des identifiants de connection sql (user, password), et il y a qq années le mot de passe était stocké dans la feuille excel en texte : il suffisait d'ouvrir le document excel avec un éditeur de texte (bloc note par ex) pour voir le mot de passe en clair...

    Quelle que soit la solution que tu choisis tu devras de toute façon synchroniser régulièrement tes données : soit de access vers sql server soit l'inverse.
    C'est à dire que tu fait passer les données de access dans une table dédiée côté sql server.

    Sinon tu as toujours le bon vieux copier/coller, puisque tu n'as qu'un centaines de lignes, tu copie colle les données access et sql server dans une feuille excel et utilise le fonction EXACT de excel pour comparer tes valeurs.

    Je te donne la solution à laquelle j'avais pensé au départ :

    Je pense que le plus simple serait d'exporter les données de la table de la bd access vers une nouvelle table (CustFromAccess dans les exemples en dessous) dans la base sql server.
    Je ne connais pas d'outil qui pourrait faire de l'import/export entre access et sql server, mais il est facile de sortir un script de type "insert into", surtout si le volume est limité à une centaines de lignes. L'idéal serait un petit bouton dans access qui recréérait un script sql des données à importer dans sql server à la demande (le bouton lance une macros en vb qui crée un fichier texte contenant le script), sur ce modèle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    delete CustFromAccess; -- ou truncate customer pour les puristes
     
    insert into CustFromAccess(field1, field2, ..., field n) values ('val1', 'val2', ..., 'valn');
    insert into CustFromAccess(field1, field2, ..., field n) values ('val1', 'val2', ..., 'valn');
    insert into CustFromAccess(field1, field2, ..., field n) values ('val1', 'val2', ..., 'valn');
    --etc.
    Ensuite il faut exe le script dans la base mais si tu es dba (puisque tu fais des livraison semble-t-il), ça ne devrait pas poser de pb.
    Cette partie c'est pour l'extraction des données access vers sql server. Donc il faudra le refaire régulièrement pour avoir les données à jour.

    Ensuite, d'après ce que j'ai compris, il y a de la mise à jour de données (update) et de la suppression de lignes (delete).

    Donc comme on a les données access dans la base sql server, il suffit de requêter sur la nouvelle table.

    Par exemple (attention j'ai tapé de tête, vérife la syntaxe) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    update customer
    set customer.Notrailer = CustFromAccess.Notrailer,
    customer.Ordre = CustFromAccess.Ordre,
    customer.Periode = CustFromAccess.Periode,
    customer.Camionneur = CustFromAccess.Camionneur,
    customer.Commentaire = CustFromAccess.Commentaire
    from
    customer
    , CustFromAccess
    where 
    customer.deliverydate = CustFromAccess.deliverydate
    and customer.sonbralt = CustFromAccess.sonbralt
    and customer.amount = CustFromAccess.amount
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    delete from customer
    where 1 = (
    select 1
    from CustFromAccess
    where CustFromAccess.sonbralt = customer.sonbralt
    and CustFromAccess.amount = customer.amount
    )
    and customer.deliverydate <> CustFromAccess.deliverydate
    Evidemment tout ça pour une poignée de lignes, c'est un peu bourrin. Moi à ta place j'oublierais access et je ferais tout dans la même base.
      0  0

  7. #7
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 18
    Points : 39
    Points
    39
    Par défaut
    N'hésites pas à détailler plus ton besoin car je ne suis pas sur de bien saisir ce que tu veux.
      0  0

  8. #8
    SLE
    SLE est déconnecté
    Membre éclairé Avatar de SLE
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 604
    Points : 799
    Points
    799
    Par défaut
    Citation Envoyé par samael314 Voir le message
    Es-tu sûr de pouvoir interroger simultanément les deux bases avec la même requête ? Perso j'en doute.
    Bien sûr que si ! Avez-vous pensé à utiliser un linkedserver ? ou OpenRowSet() ?
      1  0

  9. #9
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 18
    Points : 39
    Points
    39
    Par défaut
    Citation Envoyé par SLE Voir le message
    Bien sûr que si ! Avez-vous pensé à utiliser un linkedserver ? ou OpenRowSet() ?
    Merci pour le tuyau.

    Donc Beaudelicius ça se passe là :

    http://msdn.microsoft.com/fr-fr/libr...v=sql.90).aspx

    et là :

    http://msdn.microsoft.com/fr-fr/library/ms190312.aspx
      0  0

  10. #10
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 154
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Access dispose de mécanismes similaires en utilisant l'assistant de données externes, et en "important en tant que tables liées" les tables de la base SQL Server.

    La base Access pouvant être déplacée, copiée, etc. je pense qu'il est plus pratique de faire dans ce sens, plutôt que de lire les données d'Access depuis SQL Server.
    D'autant qu'Access dispose de tous les outils permettant à un utilisateur lambda de faire des requêtes et états, sans vous demander d'intervenir sur le serveur SQL Server à chaque fois.

    Attention cependant, lors de l'import des tables liées, il faudra peut-être faire une liaison en lecture seule, histoire d'éviter qu'un utilisateur maladroit n'efface les données du serveur par erreur, c'est très vite arrivé avec Access
    On ne jouit bien que de ce qu’on partage.
      1  0

Discussions similaires

  1. [MySQL] Comparaison 2 requêtes SQL
    Par Invité dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 10/04/2013, 19h27
  2. Comparaison de requêtes Oracle
    Par yoyostras dans le forum SQL
    Réponses: 2
    Dernier message: 29/04/2008, 09h08
  3. [requête] comparaison de date
    Par Fabouney dans le forum DB2
    Réponses: 4
    Dernier message: 31/01/2006, 21h24
  4. Requête de comparaison
    Par Jess71 dans le forum Access
    Réponses: 2
    Dernier message: 22/09/2005, 08h26
  5. Comparaison de résultats de requêtes
    Par Nyx de Tours dans le forum Requêtes
    Réponses: 7
    Dernier message: 31/07/2004, 15h49

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