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

InterBase Discussion :

Jointure de table avec Interbase


Sujet :

InterBase

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2002
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 33
    Points : 20
    Points
    20
    Par défaut Jointure de table avec Interbase
    A l'aide Svp

    je dois éclater ma seule base
    en 2 (bases)

    la 1ere pour les tables communes
    la 2eme pour les tables qui se cloturent chaque année


    J'ai 2 tables chacune dans une base
    comment dois-je écrire une jouture

    d'habitude j'écris de cette façon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
         select  *   from  table1  TB1
         left OUTER JOIN  table2 TB2 
          on  (TB1.NUM=TB2.NUM)
    normalement je dois ajouter les alias
    comme ceci (paradox)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
         select  *   from  :ALIAS1:table1  TB1
         left OUTER JOIN  :ALIAS2:table2 TB2 
          on  (TB1.NUM=TB2.NUM)

    mais je l'ai pas essayer avec interbase
    Merci à tous
    Ada_B

  2. #2
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    Sauf erreur de ma part, Interbase n'admet pas les requêtes "multibase". Toutes les tables doivent être dans la même base. Désolé

    Roland
    Roland

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2002
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 33
    Points : 20
    Points
    20
    Par défaut mm Sujet
    Merci bien pour la Réponse
    si on peut pas joindre 2 tables
    a partir de base differente
    je dois penser autrement
    c'est vraiment désolant
    Ada_b

  4. #4
    Membre actif Avatar de TMuet
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2003
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 225
    Points : 288
    Points
    288
    Par défaut
    Au contraire, je crois qu'InterBase est l'un des rares SGBD-R du marché à autoriser les requêtes multi-bases.

    Par contre, il va te falloir éplucher le forum ou la doc pour trouver comment procéder

  5. #5
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 679
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 679
    Points : 954
    Points
    954
    Par défaut
    Au contraire, je crois qu'InterBase est l'un des rares SGBD-R du marché à autoriser les requêtes multi-bases.
    ca c'est une info qui m'interresse : en effet avec la doc que j'ai lu jusqu'a présent et aussi les reponses de ce forums ja sais que interbase n'autorise pas de requête multibases en tout cas pas Ib6
    j'aimerai bien savoir donc d'ou tu tient cette information
    ce serait important pour nous tous

  6. #6
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Citation Envoyé par TMuet
    Au contraire, je crois qu'InterBase est l'un des rares SGBD-R du marché à autoriser les requêtes multi-bases.

    Par contre, il va te falloir éplucher le forum ou la doc pour trouver comment procéder

    Ou avez vous vu ca ?? :

    Vous ne devez pas parler d'interbase je pense ni de firebird d'ailleur...

  7. #7
    Membre actif Avatar de TMuet
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2003
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 225
    Points : 288
    Points
    288
    Par défaut


    Alors, je vais peut-être vérifier un peu plus et je reviens...

  8. #8
    Membre actif Avatar de TMuet
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2003
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 225
    Points : 288
    Points
    288
    Par défaut
    Voici une fonction de l'API qui devrait éclairer un peu le débat :
    Il faut l'utiliser pour ouvrir une transaction lors d'une opération multi-bases de données.
    Et hop

  9. #9
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 679
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 679
    Points : 954
    Points
    954
    Par défaut
    Voici une fonction de l'API qui devrait éclairer un peu le débat :
    Code:
    isc_start_multiple
    as tu vraiment testé cette fonction

  10. #10
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Citation Envoyé par TMuet
    Voici une fonction de l'API qui devrait éclairer un peu le débat :
    Il faut l'utiliser pour ouvrir une transaction lors d'une opération multi-bases de données.
    Et hop
    En effet, cette fonction de l'API (donc non accessible en SQL) permet de créer une transaction commune à plusieures bases de données.

    Mais cette fonction n'est à utiliser que si votre langage de programmation ne permet pas l'appel de fonction avec un nombre de paramètre variable (comme le FORTRAN par exemple). Sinon la plus classique fonction isc_start_transaction de l'API permet de créer des transactions communes à plusieures bases de données (jusqu'à 16 bases).

    Mais celà n'est que la création d'une transaction commune à plusieures bases ce qui permet de commiter ou annuler toutes les actions dans toutes les bases.
    Mais celà ne permet pas il me semble de faire comme demandé ci dessus des requetes cross bases de données à moins que j'ai mal compris ce point. Mais dans ce cas quel est la syntaxe des requetes pour préciser si je m'adresse à la table personne de ma base 1 ou de ma base 2 ?

    Et si seul la transaction est importante lorsqu'on lance une requete pourquoi l'API réclame également le handle de le base à qui s'adresse la requete ? ?

    Pour moi ces deux fonctions permettent juste de créer une transaction communes à plusieures bases. Une fois créée, on lance des requetes s'adressant à une seule des bases mais à l'interieure de la transaction commune.

    Voilà mais encore une fois je le réécris, c'est ce que j'en ai compris, je n'ai pas eut l'occasion de le tester. Et si je me trompe je ne vois pas comment une fois cette transaction créée on pourrait exécuter des requetes avec des jointures de tables se trouvant dans des bases différentes car il y a deux problemes :
    - La syntaxe des requetes
    - L'appel de l'API d'exécution des requetes qui réclame en paramètre obligatoire l'handle de la base. Et donc lequel mettre ?? Pouquoi ce paramètre existe si seul la transaction suffit ?

    Bref deux mystères qui font que je crois que ce n'est pas possible.

  11. #11
    Membre actif Avatar de TMuet
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2003
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 225
    Points : 288
    Points
    288
    Par défaut
    Citation Envoyé par Barbibulle
    - La syntaxe des requetes
    - L'appel de l'API d'exécution des requetes qui réclame en paramètre obligatoire l'handle de la base. Et donc lequel mettre ?? Pouquoi ce paramètre existe si seul la transaction suffit ?
    • Concernant le premier point, je dois bien admettre mon ignorance la plus absolue

    • Cependant, concernant le second je pense que tu as tord car, si tu as bien vu que isc_start_multiple s'adresse en effet aux langage de programmation qui ne peuvent utiliser les paramètres optionnels, c'est uniquement car le dernier paramètre est une structure d'information sur LES bases de données.
    On ne renseigne pas nécessairement 1 seul handle de base de données comme tu le dis, mais autant qu'on le souhaite ; il suffit pour cela de "tailler" le TEB comme on le souhaite et d'en indiquer le nombre à isc_start_multiple.
    Le commentaire ci-dessous est issu de la doc Interbase 6 mais très éclairant sur ce point (d'autant qu'il me semble bien qu'il aille dans mon sens ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    A single transaction can access multiple databases. This function passes information
    about each database it accesses and the conditions of access for that database in a
    transaction parameter buffer (TPB). The TPB is a variably-sized vector of bytes declared
    and populated by the program. It contains information describing intended transaction
    behavior such as its access and lock modes.
    isc_start_transaction() can start a transaction against up to 16 databases. You must pass
    a database handle and a TPB for each referenced database.

  12. #12
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Oui on est bien d'accord :

    isc_start_transaction et isc_start_multiple permettent de démarrer une transaction sur plusieurs bases. Je n'ai jamais dit le contraire. La différence entre ces deux fonctions c'est que la première est utilisable par tous les languages acceptant les appel de fonction avec parametres optionnels alors que la seconde est à réserver aux autres languages de programmation.
    Pour ce faire il faut évidemment indiquer le ou les handles de la ou des bases sur lequel on va demarrer la transaction. Je n'ai jamais dit le contraire.

    Là ou vous ne m'avez pas compris c'est la suite. Une fois cette transaction multi-base ouverte, on va pouvoir executer des requetes pour celà on va continuer à utiliser l'API comme la fonction (pour faire simple) isc_dsql_exec_immed2() (qui a l'avantage d'éviter de devoir préparer la requete mais le probleme est le meme pour les autres fonctions).
    Cette fonction donc demande bien entendu le handle de la transaction que l'on a créé précédemment (donc pourquoi pas une transaction multi-bases), et elle demande également le handle de la base de données auquel il va appliquer l'ordre SQL.
    Et c'est donc sur ce paramètre (le handle de la base de données pour l'execution de la requete) que je vous demandai à quoi il sert ?? Et c'est ce qui me fait dire qu'une requete n'est applicable qu'a une et une seule base, même si la transaction est elle multi-base.

    Voilà relisez mes propos et comprenez bien que je nie pas qu'on puisse créer des transactions multi-bases mais je doute que l'on puisse adresser une requete à plusieurs bases puisqu'on est obligé de lui donner le handle de la base à laquel elle doit s'appliquer. Combiné au fait qu'il n'y a rien dans les donc concernant la syntaxe des éventuelles ordres SQL multi-bases, je me dit que ce n'est pas possible de faire des jointures multibases dans une requete tant bien même quelle est exécutée au sein d'une transaction multi-base.

    J'espère avoir été plus claire

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    735
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 735
    Points : 807
    Points
    807
    Par défaut
    je pense que cela dépend essentiellement du middleware que tu utilises :
    - si tu utilises IBX, FIBPLus ou des composants d'accès natif d'interbase c'est impossible !
    - si tu utilses le bon vieux bde, je crois que cela dois pouvoir se faire !
    je crois même que tu peux faire des requêtes hétérogènes sur des SGDB différents !

  14. #14
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Citation Envoyé par VLDG
    je pense que cela dépend essentiellement du middleware que tu utilises :
    - si tu utilses le bon vieux bde, je crois que cela dois pouvoir se faire !
    je crois même que tu peux faire des requêtes hétérogènes sur des SGDB différents !
    Peut etre mais certainement pas dans la même transaction !
    De plus celà veux dire que c'est BDE qui se tappe le boulot de décodage de la requete, appels des différents SGBD/tables impliquées puis rassemblement des données ce qui plutot lourd pour un simple middleware. Normalement c'est le boulot du serveur.

    De plus BDE est déprécié par Borland, ce qui veux dire qu'il est abandonné et plus maintenue, il n'est donc pas à utiliser dans le cadre d'un nouvelle application.

  15. #15
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    AHHHHHHHHHHHHHHHHHH MEACULPA je viens de découvrir qu'à priori c'est possible.

    Donc non seulement on peut créer une transaction commune à plusieures bases (Ca je ne le niai pas) mais on peut bien exécuter des requetes multibases (jointures) (ce que je mettais en doute à cause des paramettres de l'API).

    En effet cette fonctionnalité est utilisable en "Embedded SQL" (mais pas autorisé cependant en "embedded DSQL".

    Et donc si c'est réalisable en embedded SQL c'est que l'API le permet également je suppose.

    Donc désolé pour avoir soutenu le contraire.

    Mais je ne pense pas que le BDE utilise quand même cette fonctionnalité car celui ci si j'ai bien compris le permet entre des SGBD différents et donc c'est bien une spécificité de BDE.

  16. #16
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 679
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 679
    Points : 954
    Points
    954
    Par défaut
    BONJOUR A TOUS
    en definitive on peut dire que les requêtes multibases sont possibles avec interbase :
    merci

  17. #17
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Oui c'est possible en embedded SQL, utilisant GPRE.

    Et donc je pense qu'avec des appels direct aux API celà doit également être possible.

    Par contre je ne vois pas comment le faire avec les IBX, j'ai l'impression que ce n'est pas possible avec eux. De même que je pense que BDE le permet peut être mais à mon avis pas en natif (celà reste à vérifier).

    Celà dit je ne sais pas comment ce type de requête est traité (sur le serveur ? sur le client ?) et ce que celà donne d'un point de vue performance.

  18. #18
    dug
    dug est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 151
    Points : 84
    Points
    84
    Par défaut
    Bonjour tout le monde,

    heu... j'ai pas bien saisie ce que tu dis Barbibulle:

    "Oui c'est possible en embedded SQL, utilisant GPRE."
    c'est quoi GPRE ?
    j'utilise FlameRobin pour visualiser mes bases. Quelle autre interface je peux utiliser pour faire ce genre de requête ?
    Quelle est la syntaxe SQL pour faire cela ?

    je repose un peu les même questions, mais je n'ai pas trouvé de réponse clair...


    merci d'avance.

  19. #19
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 712
    Points
    3 712
    Par défaut
    Citation Envoyé par ada_b Voir le message
    A l'aide Svp

    je dois éclater ma seule base
    en 2 (bases)

    la 1ere pour les tables communes
    la 2eme pour les tables qui se cloturent chaque année


    J'ai 2 tables chacune dans une base
    comment dois-je écrire une jouture

    d'habitude j'écris de cette façon

    select * from table1 TB1
    left OUTER JOIN table2 TB2
    on (TB1.NUM=TB2.NUM)

    normalement je dois ajouter les alias
    comme ceci (paradox)

    select * from :ALIAS1:table1 TB1
    left OUTER JOIN :ALIAS2:table2 TB2
    on (TB1.NUM=TB2.NUM)



    mais je l'ai pas essayer avec interbase
    Merci à tous
    Ada_B
    impossible avec Interbase
    mais pourquoi éclater la base ?
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

  20. #20
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Requete multibases - Interbase / Firebird
    Requete multibases sont donc impossibles avec Interbase?

    Quid de Firebird? v1.5 / v2

Discussions similaires

  1. Jointure de table avec champs calculé sur serveur lié
    Par Themacleod1980 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 28/04/2010, 14h57
  2. Réponses: 3
    Dernier message: 03/03/2010, 19h05
  3. [SQL] Jointure de table avec SUM et GROUP BY
    Par waterjetmedia dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 20/09/2007, 13h17
  4. créer une table avec interbase
    Par solidleon dans le forum Bases de données
    Réponses: 3
    Dernier message: 01/11/2006, 15h39

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