Bonjour!
Comment combiner Access avec l'interface XPCE de Prolog!
Est-ce que c'est possible?
Besoins d'aide s'il vous plait!!!
Merci d'avance
Bonjour!
Comment combiner Access avec l'interface XPCE de Prolog!
Est-ce que c'est possible?
Besoins d'aide s'il vous plait!!!
Merci d'avance
C'est un exemple qui peut être réutilisé et adapté à votre base de données.
Pour comprendre, j'ai une base de données "Policier" avec 4 champs, "Nom", "Prénom", "Profession", "Auteur".
La boîte de dialogue contient un champ de saisie (pour saisir un nom d'auteur) , une liste (pour afficher les noms, prénoms et professions des héros) et deux boutons, l'un pour lancer la recherche, l'aiutre pour fermer la boîte de dialogue.
Le code :
Un exemple de requête :
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % les requetes ODBC %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% open_policiers :- odbc_connect('policiers', _Toto, [ alias(policiers), open(once) ]). requete_policiers(Nom, LX) :- sformat(A, 'SELECT Nom,Prénom,Profession FROM Personnes WHERE Personnes.Auteur = \'~w\'', [Nom]), bagof([X, Y, Z], odbc_query(policiers, A, row(X,Y, Z)),LX). close_policiers :- odbc_disconnect(policiers). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % creation de la boîte de dialogue %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% dialog(policiers, [ object := Policiers, parts := [ Policiers := dialog('Policiers'), Go := button(button), Exit := button(button), Auteur_item := text_item(auteur_item), List := list_browser(@default, 69, 10) ], modifications := [ Go := [label := 'Go'], Exit := [label := 'Terminé'], Auteur_item := [ label := 'Tapez le nom de l\'auteur :' ], List := [ name := 'Résultats de la recherche', show_label := @on ] ], behaviour := [ Exit := [message := message(Policiers, destroy)], Go := [message := message(@prolog, requete, Auteur_item?selection, List)], % il faut clore la liaison ODBC à la fin du prog Policiers := [done_message := message(@prolog, close_policiers)] ], layout := [ area(Go, area(389, 296, 80, 24)), area(Exit, area(486, 297, 80, 24)), area(Auteur_item, area(41, 32, 356, 24)), area(List, area(43, 75, 494, 176)) ], initialise := [ % il faut créerla liaison ODBC send(@prolog, open_policiers) ] ]). % requete appelée par le bouton "Go" requete(Auteur, List) :- send(List, clear), requete_policiers(Auteur, LX), forall(member([X,Y, Z], LX), (sformat(A, '~w ~w est ~w', [Y, X, Z]), send(List, append, A))). % lancement du programme main :- make_dialog(D, 'policiers'), send(D, open).
"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
Bonjour
et merci Trap D, j'ai testé le code et ai modifié sur la partie requete SQL:
ça a l'air de marcher, ça affiche la boîte de dialogue
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 requete_policiers(Nom, LX) :- sformat(A, 'SELECT personnes.Nom,personnes.Prénom,personnes.Profession FROM personnes WHERE personnes.Auteur = \'~w\'',[Nom]), bagof([X, Y, Z], odbc_query(policiers, A, row(X,Y, Z)),LX). close_policiers :-odbc_disconnect(policiers).
mais ça ne donne aucun résultat pour la recherche
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 27 ?- open_policiers. true. 28 ?- main. true.
et après fermeture(clic sur terminer)
ça donne ceci sur prolog:
je ne sais pas pourquoi!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 29 ?- Foreign predicate odbc:odbc_disconnect/1 did not clear exception: error(odbc(07001,-3010,[Microsoft][Pilote ODBC Microsoft Access] Trop peu de paramètres. 1 attendu.),_G255) Foreign predicate system:$free_variable_set/3 did not clear exception: error(existence_error(odbc_connection,policiers),_G269)
Il peut y avoir beaucoup de raisons pour lesquelles ça ne foncitonne pas.
Il faudrait avoir le code complet du programme et la liste des champs de la base de données.
"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
Voici le code policier.pl:
Je n'ai modifié que le label, et les requêtes SQL.
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89 %%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % les requetes ODBC %%%%%%%%%%%%%%% %%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%% open_policiers :- odbc_connect('policiers', _Toto, [ alias(policiers), open(once) ]). requete_policiers(Nom, LX) :- sformat(A, 'SELECT personnes.Nom,personnes.Prénom,personnes.Profession FROM personnes WHERE personnes.Auteur = \'~w\'', [Nom]), bagof([X, Y, Z], odbc_query(policiers, A, row(X,Y, Z)),LX). close_policiers :- odbc_disconnect(policiers). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % creation de la boîte de dialogue %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% dialog(policiers, [ object := Policiers, parts := [ Policiers := dialog('Policiers'), Go := button(button), Exit := button(button), Auteur_item := text_item(auteur_item), List := list_browser(@default, 69, 10) ], modifications := [ Go := [label := 'Go'], Exit := [label := 'CLOSE'], Auteur_item := [ label := 'Tapez le nom de l\'auteur :' ], List:= [name := 'Result of Research', show_label := @on ] ], behaviour := [ Go := [message := message(@prolog, requete, Auteur_item?selection, List)], Exit := [message := message(Policiers, destroy)], % il faut clore la liaison ODBC à la fin du prog Policiers := [done_message := message(@prolog, close_policiers)] ], layout := [ area(Go, area(389, 296, 80, 24)), area(Exit, area(486, 297, 80, 24)), area(Auteur_item, area(41, 32, 356, 24)), area(List, area(43, 75, 494, 176)) ], initialise := [ % il faut créer la liaison ODBC send(@prolog, open_policiers) ] ]). % requete appelée par le bouton "Go" requete(Auteur, List) :- send(List, clear), requete_policiers(Auteur, LX), forall(member([X,Y, Z], LX), (sformat(A, '~w ~w est ~w', [Y, X, Z]), send(List, append, A))). % lancement du programme main :- make_dialog(D, 'policiers'), send(D, open).
les champs sont: Nom, Prénom, Profession, Auteur.
Le nom de la table c'est personnes et la base de données est policiers.
J'ai suivi et ai fait correspondre votre code et ma base.
Ce code fonctionne parfaitement chez moi, il faut voir du côté de votre base données.
"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
"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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager