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

Prolog Discussion :

Base de données déductive : Prolog (XPCE) + Oracle


Sujet :

Prolog

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 40
    Points : 27
    Points
    27
    Par défaut Base de données déductive : Prolog (XPCE) + Oracle
    Bonjour a tous,

    je voudrais implémenter une base de données déductives, alors les tables sont dans une SGBDR (Oracle), les requêtes seront écrites avec Prolog(SWI-Prolog) ces deux dernier sont liés grâce a l'interface ODBC offerte par SWI-Prolog;

    tous ceux ci marche trés bien.

    Pour l'interface j'ai choisit de travailler avec XPCE de SWI-Prolog, qui plus facile a manipuler( en plus le code est en Prolog ) que de le faire avec JAVA qui est beaucoup plus complexe;

    bref, j'ai créer une boite de dialogue toute simple( edit + boutton+ label);

    MA question: Comment afficher le résultat de la requete sur la boite de dialogue? dois-je obligatoirement utiliser "sformat" pour l'affichage? sinon quoi faire?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    :- use_module(library(pce)).
    :- use_module(oracle).
    dialog('Recherche',
           [ object        :=
         Recherche,
         parts         :=
         [ Recherche := dialog('Recherche'),
           OK        := button('OK'),
           Text_item := text_item(text_item),
           Annuler   := button(annuler),
           Name      := label(name, ''),
           Resultat  := label(resultat,'')
         ],
         modifications :=
         [ Text_item := [ label  := 'Ville',
              length := 26
            ],
           Annuler   := [ default_button := @on
            ]
         ],
         layout        :=
         [ area(OK,
          area(59, 149, 80, 24)),
           area(Text_item,
          area(42, 51, 219, 24)),
           area(Annuler,
          area(234, 143, 80, 25)),
           area(Name,
          area(36, 92, 184, 18)),
           area(Resultat,
          area(127, 103, 184, 18))
         ],
         behaviour     :=
         [ OK := [ message := message(@prolog,
              recherche,
              Text_item?selection,
              Resultat)
           ],
           Annuler := [
          message := message(Recherche, destroy)
               ]
         ]
           ]).
     
     
    affichage :-
           make_dialog(D, 'Recherche'),
           send(D,open).
     
    bdd(Pere):-  db_open('oraclebd', 'scott', 'tiger'),
             db_import('PERE'('PERE','ENFANT'),pere),
              pere(PERE,ENFANT),
              write_ln([PERE,ENFANT]),
              db_close.
     
    recherche:-      bdd(Pere),
    %  Comment faire pour afficher les element de la table pere
    %  ??????????????????????????????

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    D'abord transforme ta balise [quote] en balise [code] le texte sera beaucoup plus facile à lire.
    J'ai essayé d'installer le module PrologSQL mais au lancement il me dit qu'il ne trouve pas OCI.dll. Quelle version d'Oracle as-tu d'installée, et même que faut-il installer ?
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 40
    Points : 27
    Points
    27
    Par défaut
    J'ai installer Oracle 9i; pour PrologSQL je l'ai téléchagé de http://www.geocities.com/SiliconVall...PrologSQL.html

    Il faut le dézipper et ensuite enregistrer les programmes Prolog dans ce même répertoire, sans oublier de mettre :- use_module(oracle). au début du code.

    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    :- use_module(oracle).
    % se connecté a la base: oraclebd, nom utilisateur: scott, mot de passe: tiger
    bdd(Pere):- db_open('oraclebd', 'scott', 'tiger'),
    %impoter des les attributs de la table PERE(PERE, ENFANT)
    db_import('PERE'('PERE','ENFANT'),pere),
    pere(PERE,ENFANT),
    % afficher les éléments de la table
    write_ln([PERE,ENFANT]),
    %fermer la base de données
    db_close.

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Merci pour ces renseignements.
    Sinon, pour ta question, sformat me paraît tout à fait approprié.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  5. #5
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 40
    Points : 27
    Points
    27
    Par défaut
    Je n'arrive pas a afficher les éléments de la table,comment faire??
    Je n'ai pas beaucoup de notions de Prolog, la doc sur sformat n'est pas trés explicite; j'arrive pas a relier les entrées pour le traitement et le résultat pour l'affichage .

    J'attend toutes vos suggestions, et de l'aide pour comprendre le sformat ou autre méthode pour l'affichage ( dans le label de la boite de dialogue)

  6. #6
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Salut
    Après pas mal d'essais infructueux, j'arrive à quelques résultats.

    Je te propose ce bout de code :
    D'abord pour la fonction liée au bouton OK
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	 behaviour :=
    	 [ OK := [ message := message(@prolog,
    				      recherche,
    				      Text_item?selection,
    				      Resultat)
    		 ],
    	   Annuler := [
    		       message := message(Recherche, destroy)
    		      ]
    	 ]
    Et le code de la fonction recherche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    recherche(Pere, Resultat):- 
            db_open('oraclebd', 'scott', 'tiger'),
            db_import('PERE'('PERE','ENFANT'),pere),
    	sformat(Str, 'SELECT ENFANT FROM pere WHERE PERE LIKE \'~w%\'',[Pere]),
    	db_sql_select( Str,L),
            db_close,
    	sformat(Str1, '~w',L),
    	send(Resultat, selection, Str1).
    [Edit]Il était tard et j'ai omis de dire ce que faisait la requête, elle est censée afficher tous les enfants dont le nom du père débute par "toto" par exemple.
    Il y a un problème car elle devrait fournir tous les enfants, or elle ne donne que le premier enfant.
    [/Edit]
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  7. #7
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 40
    Points : 27
    Points
    27
    Par défaut
    Merciiiiiiiiiiiiiiiii beaucoup pour votre aide, ça a bien marché; sauf que maintenant je voudrais afficher tous les élément de la table qui satisfont la requete;

    faut il changer le Label par un Editor?

  8. #8
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Salut
    Si tu veux afficher une liste de résultats, je pense qu'il vaut mieux utiliser un browser de listes.
    J'ai fait le test et ça marche correctement.
    Comme c'est mon jour de bonté , je te donne le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    :- use_module(library(pce)).
    :- use_module(library('oracle/oracle')).
     
    dialog('Recherche',
           [ object        :=
    	   Recherche,
    	 parts         :=
    	   [ Recherche := dialog('Recherche'),
    	     OK        := button('OK'),
    	     Text_item := text_item(text_item),
    	     Annuler   := button(annuler),
    	     Name      := label(name, ''),
    	     List      := list_browser(@default, 37, 6)
    	   ],
    	 modifications :=
    	   [ Text_item := [ label  := 'Nom',
    			    length := 32
    			  ],
    	     Annuler   := [ default_button := @on
    			  ],
    	     List      := [ name       := list,
    			    show_label := @on,
    			    label      := 'Liste des résultats'
    			  ]
    	   ],
    	 layout        :=
    	   [ area(OK,
    		  area(50, 230, 80, 24)),
    	     area(Text_item,
    		  area(42, 51, 264, 24)),
    	     area(Annuler,
    		  area(230, 230, 80, 24)),
    	     area(Name,
    		  area(36, 92, 184, 18)),
    	     area(List,
    		  area(43, 96, 271, 112))
    	   ],
    	 behaviour     :=
    	   [ OK      := [ message := message(@prolog,
    					     recherche,
    					     Text_item?selection,
    					     List?dict)
    			],
    	     Annuler := [ message := message(Recherche, destroy)
    			]
    	   ]
           ]).
     
     
    affichage :-
    	make_dialog(D, 'Recherche'),
    	send(D,open).
     
    recherche(Pere, Resultat):- 
    	send(Resultat, clear),
    	db_open('oracledb', 'scott', 'tiger'),
    	db_import('PERE'('PERE','ENFANT'),pere),
    	sformat(Str, 'SELECT ENFANT FROM pere WHERE PERE LIKE	\'~w%\'',[Pere]),
    	forall(	db_sql_select( Str,L),
    		(   sformat(Str1, '~w',L),
    		    send(Resultat, append, Str1))),
    	db_close.
    Le forall permet de récupérer toutes les lignes dont le PERE débute par toto par exemple.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  9. #9
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 40
    Points : 27
    Points
    27
    Par défaut
    Je ne vous remercierai jamais assez pour l'aide précieuse que vous me donner; j'avance rapidement dans mon travail;

    a l'execution du programme, il ne reconnais pas :- use_module(library('oracle/oracle')).
    alors j'ai utilisé :- use_module(oracle). je pense que c'est pareil;

    Quand clic sur ok, il n' y a rien qui s'affiche

    Vous pouvez m'explique List?dict ?

    J'ai essayer de recréer la boite de dialogue, mais je n'arrive pas a retrouvé le Dict

  10. #10
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Le browser de liste s'occupe de l'affichage des éléments (dict_items) d'un dictionnaire (dict).
    Donc pour ajouter des éléments à une liste, il faut les ajouter au dictionnaire c'est pour celà que je fournis la "propriété" dict du browser de liste à la fonction Recherche pour pourvoir ajouter les noms.

    Il me semble que tu as pourtant trouvé la bonne adresse pour tout ce genre de problèmes : http://hcs.science.uva.nl/projects/xpce/UserGuide/

    Pour ce qui est les browser de listes :
    Pour ce qui est des dicts :

    Pour ce qui est de oracle, effectivement, j'ai tout mis dans un sous rep (c'est plus propre )

    Ceci dit, continue à poser des questions si tu as des problèmes.


    Citation Envoyé par t_aicha
    Quand clic sur ok, il n' y a rien qui s'affiche
    Quand tu fais la même interrogation, sous Oracle, as-tu une réponse ?
    Fais afficher la réponse à la requête par un writeln pour savoir exactement ce qui se passe.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  11. #11
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 40
    Points : 27
    Points
    27
    Par défaut
    Les choses se compliquent un peu, j'ai deux tables USER_ et POSTALADDRESS, je voudrais afficher les utilisateur (first_name) qui vivent a COUNTRY;

    si j'exécute la requête dans l'éditeur de Prolog( pas dans XPCE), sa marche bien, il affiche toute la liste.
    je vous donne le code de "recherche", et malheureusement il n'affiche rien.

    en plus je voudrais afficher dans le LIST_BROWSER toutes les colonne de la table résultante de la requete, comment faire?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    recherche(COUNTRY, Resultat):-
    send(Resultat, clear),
             db_open('oraclebd', 'scott', 'tiger'),
             db_import('USER_'('ID','HOME','LID','OBJECTTYPE','STATUS','VERSIONNAME','COMMENT_','PERSONNAME_FIRSTNAME','PERSONNAME_MIDDLENAME','PERSONNAME_LASTNAME'),user),
             db_import('POSTALADDRESS'('CITY','COUNTRY','POSTALCODE','STATE','STREET','STREETNUMBER','PARENT'),'postaladdress'),
             db_query(search(ID,PERSONNAME_FIRSTNAME,PERSONNAME_LASTNAME,COUNTRY),
                              (  user(ID,HOME,LID,OBJECTTYPE,STATUS,VERSIONNAME,COMMENT_,PERSONNAME_FIRSTNAME,PERSONNAME_MIDDLENAME,PERSONNAME_LASTNAME),
                                 postaladdress(CITY,COUNTRY,POSTALCODE,STATE,STREET,STREETNUMBER,ID)
                              )
             ),
            search(ID,PERSONNAME_FIRSTNAME,PERSONNAME_LASTNAME,COUNTRY),
           sformat(Str, 'SELECT PERSONNAME_FIRSTNAME FROM search  WHERE  COUNTRY LIKE \'~w%\'',[COUNTRY]),
             forall(
            db_sql_select( Str,L),
            (
            sformat(Str1, '~w ',L),
           send(Resultat, append, Str1))
            ),
             db_close.

  12. #12
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Salut

    Au moins avec toi , je progresse dans ma connaissance de XPCE
    D'abord, pour ce qui est des recherches, je préfère utiliser les requêtes SQL directement.
    Tu as du faire une faute de frappe, je ne vois pas comment relier tes deux tables USER et POSTALADDRESS.

    Maintenant, pour ce qui est d'afficher en colonne dans le browser de liste.

    Premiere chose : les données extraites des tables oracle sont formatées sur un certain nombre de caractères, il peut être intéressant de se débarasser des espaces en fin de chaines, c'est le but du prédicat trim fournit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    % si la liste des atomesà nettoyer est vide ...
    trim([], []).
    % on nettoie atome par atome
    trim([H | T], [H1 | T1]) :-
    	un_trim(H, H1),
    	trim(T,T1).
     
    % nettoyage d'un atome
    un_trim(H,H1) :-
         % l'atome est d'abord transformé en chaîne de caractères
    	string_to_atom(L, H),
        % la chaînes est transformée en liste d'entiers
    	string_to_list(L,L1),
        % pour la nettoyer on l'inverse
    	reverse(L1, L2),
        % on la purge des espaces
    	purge(L2,L3),
       % on refait les opérations dans l'ordre inverse
    	reverse(L3,L4),
    	string_to_list(L5,L4),
    	string_to_atom(L5,H1).
     
    % si le premier caractères de la liste/chaîne est un espace (code 32)
    % on le passe
    purge([32 | T], L) :- !,
    	purge(T,L).
     
    % sinon fini !
    purge(L,L).
    Deuxième point : l'affichage en colonne.
    On utilise l'objet string dont la syntaxe de formatage est très proche du C :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    % je nettoie ma chaîne, je sais qu'elle possède 2 atomes
    trim(L,[H , T]),
     
    % je crèe une string à l'aide du formatage
    % le premier atomeest sur 20 caractères
    % onsépare par une tabulation
    % on écrit le deuxième atome
    new(S, string('%-20s\t%s', H, T)),
     
    % on envoie à l'affichage la propriété value de la string.
    send(Resultat, append, S?value))),
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  13. #13
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Citation Envoyé par Trap D
    D'abord, pour ce qui est des recherches, je préfère utiliser les requêtes SQL directement.
    +1000
    C'est plus simple et plus rapide.
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  14. #14
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 40
    Points : 27
    Points
    27
    Par défaut
    Tu as du faire une faute de frappe, je ne vois pas comment relier tes deux tables USER et POSTALADDRESS.
    Je n'ai pas fais d'erreur le lien est quand ID=PARENT

    Merci pour votre aide;
    en fait Je voudrais implémenter une base de donnée déductive, alors je suis sensé utilisé la logique( logique du premier ordre) et le moteur d'inférence de prolog pour remplacé les requêtes SQL, et montrer leur intérêts par rapport a ces dernières;

    parce que si je dois en fin de compte revenir au SQL, il n'y aura pas d'intérêt a passé par prolog.

  15. #15
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Voilà en effet une tout à fait bonne raison, bon courage
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  16. #16
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 40
    Points : 27
    Points
    27
    Par défaut
    S'il vous plait, aidez moi si j'arrive a afficher(ex : search) en utilisant les prédicats, je pourrais généraliser aux autres problèmes.

    est ce que la syntaxe de recherche(COUNTRY, Resultat) est correcte au moin?

  17. #17
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Si j'ai bien compris ton problème, tu peux tester celà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    recherche(COUNTRY, Resultat):-
    send(Resultat, clear),
             db_open('oraclebd', 'scott', 'tiger'),
             db_import('USER_'('ID','HOME','LID','OBJECTTYPE','STATUS','VERSIONNAME','COMMENT_','PERSONNAME_FIRSTNAME','PERSONNAME_MIDDLENAME','PERSONNAME_LASTNAME'),user),
             db_import('POSTALADDRESS'('CITY','COUNTRY','POSTALCODE','STATE','STREET','STREETNUMBER','PARENT'),'postaladdress'),
     
             % tu définis ta recherche
             db_query(search(PERSONNAME_FIRSTNAME,COUNTRY), % tu n'as besoin que de ces deux renseignements
                              (  user(ID,_,_,_,_,_,_,PERSONNAME_FIRSTNAME,_,_),
                                 postaladdress(_,COUNTRY,_,_,_,_,ID)
                              )),
     
            % tu effectues la recherche
            forall(search(PERSONNAME_FIRSTNAME,COUNTRY),
    	        (sformat(Str1, '~w ~w',[PERSONNAME_FIRSTNAME,COUNTRY)]),
           		send(Resultat, append, Str1))),
             db_close.
    Maintenant se pose un problème pour la recherche d'un COUNTRY donné, il faut le taper de manière exacte, tel qu'il a été enregistré dans la base de données, avec éventuelllement les espaces de fin de champ.

    Pour plus d'informations, je pense que tu connais ce lien :
    http://www.cs.sunysb.edu/~sbprolog/manual2/node70.html
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  18. #18
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 40
    Points : 27
    Points
    27
    Par défaut
    Merci pour votre aide, mais je n'arrive toujours pas a afficher; en faisant des tests d'affichage avant et apres
    search(PERSONNAME_FIRSTNAME,COUNTRY),
    , j'ai remarqué que c'etait ça le probleme, il bloque sur ça.


    Mais si je change COUNTRY(celui en entrée dans recherche et celui de search) par un autre nom de variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    recherche(C, Resultat):-
    ..........
     forall(
              search(PERSONNAME_FIRSTNAME,C),
              (sformat(Str1, '~w ~w',[PERSONNAME_FIRSTNAME,C]),
              send(Resultat, append, Str1))),
             db_close.
    il les affiche mais il attribut le nom C a toutes les personnes de la liste; il ne respecte pas le critere de selection.

  19. #19
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 40
    Points : 27
    Points
    27
    Par défaut
    J'ai reglé le probleme en rajoutant a serach le ID, c'est surement important car il est le lien entre les deux tables d'origines; en plus j'ai changé la variable en entrée
    et c'est bon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    recherche(COUNTR, Resultat):-
    send(Resultat, clear),
             db_open('oraclebd', 'scott', 'tiger'),
             db_import('USER_'('ID','HOME','LID','OBJECTTYPE','STATUS','VERSIONNAME','COMMENT_','PERSONNAME_FIRSTNAME','PERSONNAME_MIDDLENAME','PERSONNAME_LASTNAME'),user),
             db_import('POSTALADDRESS'('CITY','COUNTRY','POSTALCODE','STATE','STREET','STREETNUMBER','PARENT'),'postaladdress'),
     
             % tu définis ta recherche
             db_query(search(ID,PERSONNAME_FIRSTNAME,COUNTRY), % tu n'as besoin que de ces deux renseignements
                              (  user(ID,_,_,_,_,_,_,PERSONNAME_FIRSTNAME,_,_),
                                 postaladdress(_,COUNTRY,_,_,_,_,ID)
                              )),
     
            % tu effectues la recherche
            forall(search(ID,PERSONNAME_FIRSTNAME,COUNTR),
    	        (sformat(Str1, '~w ~w',[PERSONNAME_FIRSTNAME,COUNTR)]),
           		send(Resultat, append, Str1))),
             db_close.

  20. #20
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Alors, un petit sera du meilleur effet !
    a +
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/03/2014, 14h04
  2. Réponses: 5
    Dernier message: 25/03/2014, 10h35
  3. [Concept] Stabilité d'une base de donnée
    Par lassmust dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 03/07/2002, 16h16
  4. Bases de données
    Par dev dans le forum C++Builder
    Réponses: 4
    Dernier message: 01/07/2002, 22h55
  5. associer une base de données(access) a un dbgrid
    Par ange1708 dans le forum MFC
    Réponses: 3
    Dernier message: 11/06/2002, 12h18

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