FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Form(résolu)
Une base de données relationnelle avec Panoramic Emptypar leclode Aujourd'hui à 17:59

» trop de fichiers en cours
Une base de données relationnelle avec Panoramic Emptypar Marc Aujourd'hui à 11:42

» Bataille navale SM
Une base de données relationnelle avec Panoramic Emptypar jjn4 Hier à 17:39

» Une calculatrice en une ligne de programme
Une base de données relationnelle avec Panoramic Emptypar jean_debord Hier à 8:01

» Gestion d'un système client-serveur.
Une base de données relationnelle avec Panoramic Emptypar Pedro Jeu 25 Avr 2024 - 19:31

» Les maths du crocodile
Une base de données relationnelle avec Panoramic Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

» Naissance de Crocodile Basic
Une base de données relationnelle avec Panoramic Emptypar jean_debord Jeu 25 Avr 2024 - 8:45

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Une base de données relationnelle avec Panoramic Emptypar Froggy One Mer 24 Avr 2024 - 18:38

» Dessine-moi une galaxie
Une base de données relationnelle avec Panoramic Emptypar jjn4 Lun 22 Avr 2024 - 13:47

» Erreur END_SUB
Une base de données relationnelle avec Panoramic Emptypar jjn4 Lun 22 Avr 2024 - 13:43

» Bug sur DIM_LOCAL ?
Une base de données relationnelle avec Panoramic Emptypar papydall Dim 21 Avr 2024 - 23:30

» 2D_fill_color(résolu)
Une base de données relationnelle avec Panoramic Emptypar leclode Sam 20 Avr 2024 - 8:32

» Consommation gaz électricité
Une base de données relationnelle avec Panoramic Emptypar leclode Mer 17 Avr 2024 - 11:07

» on_key_down (résolu)
Une base de données relationnelle avec Panoramic Emptypar leclode Mar 16 Avr 2024 - 11:01

» Sous-programme(résolu)
Une base de données relationnelle avec Panoramic Emptypar jjn4 Jeu 4 Avr 2024 - 14:42

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Avril 2024
LunMarMerJeuVenSamDim
1234567
891011121314
15161718192021
22232425262728
2930     
CalendrierCalendrier
-20%
Le deal à ne pas rater :
Ecran PC GIGABYTE 28″ LED M28U 4K ( IPS, 1 ms, 144 Hz, FreeSync ...
399 € 499 €
Voir le deal

 

 Une base de données relationnelle avec Panoramic

Aller en bas 
3 participants
AuteurMessage
Klaus

Klaus


Nombre de messages : 12274
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Une base de données relationnelle avec Panoramic Empty
MessageSujet: Une base de données relationnelle avec Panoramic   Une base de données relationnelle avec Panoramic EmptyMar 5 Avr 2011 - 22:52

Je me suis amusé à coder une petite base de données relationnelle, entièrement en Panoramic, et gérée entièrement en mémoire. Elle gère des affirmations telles que
<Jack> est <auteur> de <Panoramic>
<Klaus> est <auteur> de <KGF.dll>
<pivert> est <espèce> de <oiseau>
etc. On voit: un <objet> est mis en <relation> avec un autre <objet>.

L'intérêt, c'est qu'on peut d'une part, vérifier si une relation est vraie:
la question: Est-ce que <Klaus> est <auteur> de <Panoramic> retourne faux
la question: Est-ce que <pivert> est <espèce> de <oiseau> retourne vrai
et d'autre part, on peut poser des questions partielles:
Remplir les champs <> <auteur> <> retourne:
auteur relie
Jack à Panoramic
Klaus à KGF.dll

Le nombre d'objets n'est pas limité, ni la longueur des noms, ni le nombre des relations. Il y a ussi des fonctions pour renommer une entité, supprimer une entité ou infirmer une relation. Il y a aussi une fonction donnant toutes les informations connues sur une entité. Voici le code:
Code:
' BDR.bas - Base de Données Relationnelle

label valider, change_fonction
label affirmer, verifier, completer, infirmer, renommer, supprimer, informer
label creer_entite, chercher_triade1, chercher_triade2, chercher_triade3
label info_1xx, info_xrx, info_xx2
label chercher_entite
label chercher_triade_partielle_1Rx, chercher_triade_partielle_1x2
label chercher_triade_partielle_xR2
label chercher_triade_partielle_1xx, chercher_triade_partielle_xx2
label chercher_triade_partielle_xRx
label chercher_nom_par_id
label sauvegarder, restaurer

dim debug%
dim n_entite% , i%, j%, nom$, nom1$, nom2$, rel$, s$, oper%, t%, s1$, s2$
dim sr$, s3$, id%, id1%, idr%, id2%, inex%, triade$, libre%, zero$, file$
dim flag_1020%, start_1020%, cnt%, idx%, nomx$

zero$ = "0000000000"
debug% = 0

width 0,1100 : height 0,800
caption 0,"BDR V1.02 du 6/4/2011"

if debug%=0
    dlist 1001  : ' entités chronologiques (id,nom)
    dlist 1002  : ' entités triées (nom,id)
    dlist 1011  : ' triades (A,R,B)
    dlist 1012  : ' triades (R,B,A)
    dlist 1013  : ' triades (B,A,R)
    alpha 30 : top 30,100 : left 30,10
    font_size 30,10 : font_bold 30
    s$ = "Ce programme réalise une petite Base de Données Relationnelle (BDR) en mémoire."+chr$(13)+chr$(13)
    s$ = s$ + "Les unités d'information sont des <entités>. Chaque entité est représenté par son nom."+chr$(13)
    s$ = s$ + "Les trois zones de saisie reçoivent des noms d'entités. Celle du milieu est considérée"+chr$(13)
    s$ = s$ + "comme <relation> reliant l'entité de gauche à l'entité de droite. Exemple:"+chr$(13)
    s$ = s$ + "    <Jack> est <auteur> de <Panoramic>"+chr$(13)
    s$ = s$ + "La casse est libre mais significative pour la reconnaissance des entités."+chr$(13)+chr$(13)
    s$ = s$ + "Le programme a 7 fonctions. La fonction de base est <J'affirme>. Elle requiert"+chr$(13)
    s$ = s$ + "la présence des noms des 3 entités. Si une des entités n'existe pas encore, elle est"+chr$(13)
    s$ = s$ + "créée automatiquement; sinon, elle est réutilisée. Une entité <objet> peut également"+chr$(13)
    s$ = s$ + "être <relation>, comme dans l'exemple suivant:"+chr$(13)
    s$ = s$ + "    <Martin> est <père> de <Sylvain>"+chr$(13)
    s$ = s$ + "    <Martin> est <tuteur> de <Véronique>"+chr$(13)
    s$ = s$ + "    <père> est <responsable> de <enfants>"+chr$(13)
    s$ = s$ + "    <tuteur> est <responsable> de <enfants>"+chr$(13)
    s$ = s$ + "Et on voit dans cet exemple que les relations <père> et <tuteur> sont liées par"+chr$(13)
    s$ = s$ + "la relation <responsable> à l'entité objet <enfants>."+chr$(13)+chr$(13)
    s$ = s$ + "La seconde fonction est <Est-ce que>. Cette fonction reqiert également la présence des"+chr$(13)
    s$ = s$ + "3 entités. Mais cette fois, elles doivent exister, et leur lien relationnel est vérifié."+chr$(13)
    s$ = s$ + "Le résultat est Vrai ou Faux"+chr$(13)+chr$(13)
    s$ = s$ + "La troisième fonction est <Complète les champs>. Cette fois, un ou deux noms d'entités"+chr$(13)
    s$ = s$ + "doivent être présents. Ces entités doivent exister, et le programme affiche dans la liste"+chr$(13)
    s$ = s$ + "de droite un résultat textuel de la recherche, en affichant tous les résultats possibles."+chr$(13)+chr$(13)
    s$ = s$ + "La quatrième fonction informe une relation établie. Les trois entités doivent exister."+chr$(13)
    s$ = s$ + "Si la relation existe, elle est supprimée."+chr$(13)+chr$(13)
    s$ = s$ + "La cinquième fonction renomme une entité. Le premier champ doit contenir le nom d'une entité"+chr$(13)
    s$ = s$ + "existante, le second champ doit contenir le nouveau nom qui ne doit pas encore exister, et"+chr$(13)
    s$ = s$ + "le troidième champ doit rester vide."+chr$(13)+chr$(13)
    s$ = s$ + "La sixième fonction supprime une entité existante avec tous ses liens relationnels."+chr$(13)+chr$(13)
    s$ = s$ + "La septième fonction retourne toutes les informations disponibles sur une entité."+chr$(13)+chr$(13)
    s$ = s$ + "Les boutons <Sauvegarder> et <Restaurer> permettent d'enregistrer ou de réouvrir une BDR."
    caption 30,s$
else
    list 1001  : ' entités chronologiques (id,nom)
        top 1001,100 : left 1001,10 : height 1001,300
    list 1002  : ' entités triées (nom,id)
        top 1002,100 : left 1002,150 : height 1002,300
    list 1011  : ' triades (A,R,B)
        top 1011,100 : left 1011,290 : height 1011,300
    list 1012  : ' triades (R,B,A)
        top 1012,100 : left 1012,430 : height 1012,300
    list 1013  : ' triades (B,A,R)
        top 1013,100 : left 1013,570 : height 1013,300
end_if
memo 1020  : ' liste de résultats
    top 1020,100 : left 1020,710 : height 1020,300 : width 1020,300
    bar_vertical 1020 : bar_horizontal 1020
sort_on 1002 : sort_on 1011 : sort_on 1012 : sort_on 1013

combo 10 : top 10,10 : left 10,10 : on_change 10,change_fonction
item_add 10,"J'affirme que"
item_add 10,"Est-ce que"
item_add 10,"Complète les champs"
item_add 10,"J'infirme que"
item_add 10,"Renommer"
item_add 10,"Supprimer"
item_add 10,"Que sait-on sur"
text 10,"J'affirme que"
edit 1 : top 1,40 : left 1,10
alpha 2 : top 2,40 : left 2,140 : caption 2,"est"
edit 3 : top 3,40 : left 3,180
alpha 4 : top 4,40 : left 4,310 : caption 4,"de"
edit 5 : top 5,40 : left 5,350
button 6 : top 6,40 : left 6,490 : caption 6,"Valider"
on_click 6,valider
button 7 : top 7,40 : left 7,600 : caption 7,"Sauvegarder"
on_click 7,sauvegarder
button 8 : top 8,40 : left 8,710 : caption 8,"Restaurer"
on_click 8,restaurer

save_dialog 20
open_dialog 21
filter 20,"Sauvegardes|*.bdr"
filter 21,"Sauvegardes|*.bdr"

end

change_fonction:
s$ = text$(10)
oper% = 0
for i%=1 to count(10)
    if text$(10)=item_read$(10,i%) then oper% = i%
next i%
for i%=1 to 5
    show i%
next i%
caption 2,"est"
if oper%=5
    hide 4
    hide 5
    caption 2,"en"
end_if
if (oper%=6) or (oper%=7)
    hide 2
    hide 3
    hide 4
    hide 5
end_if
return

valider:
s$ = text$(10)
for i%=1 to count(10)
    if text$(10)=item_read$(10,i%) then oper% = i%
next i%
if (oper%<3 ) or (oper%=4)
    for i%=1 to 3
        if trim$(text$(i%*2-1))=""
            j% = message_error_ok("Le champ "+str$(i%)+" n'est pas renseigné.")
            return
        end_if
    next i%
end_if
nom1$ = text$(1)
rel$ = text$(3)
nom2$ = text$(5)
select oper%
    case 1: gosub affirmer
    case 2: gosub verifier
    case 3: gosub completer
    case 4: gosub infirmer
    case 5: gosub renommer
    case 6: gosub supprimer
    case 7: gosub informer
end_select
return

affirmer:
nom$ = nom1$
gosub creer_entite
id1% = id%
nom$ = rel$
gosub creer_entite
idr% = id%
nom$ = nom2$
gosub creer_entite
id2% = id%
gosub chercher_triade1
if inex%=1
    item_add 1011,triade$
    item_add 1012,str$(idr%)+","+str$(id2%)+","+str$(id1%)
    item_add 1013,str$(id2%)+","+str$(id1%)+","+str$(idr%)
end_if
return

infirmer:
if count(1002)<3
    j% = message_error_ok("Il n'y a pas assez d'entités.")
    return
end_if
nom$ = text$(1)
gosub chercher_entite
if inex%=1
    j% = message_error_ok("L'entité "+nom$+" n'existe pas.")
    return
end_if
nom1$ = nom$
id1% = id%
nom$ = text$(3)
gosub chercher_entite
if inex%=1
    j% = message_error_ok("L'entité "+nom$+" n'existe pas.")
    return
end_if
rel$ = nom$
idr% = id%
nom$ = text$(5)
gosub chercher_entite
if inex%=1
    j% = message_error_ok("L'entité "+nom$+" n'existe pas.")
    return
end_if
nom2$ = nom$
id2% = id%
gosub chercher_triade1
if inex%=0
    item_delete 1011,i%
    gosub chercher_triade2
    if inex%=0 then item_delete 1012,i%
    gosub chercher_triade3
    if inex%=0 then item_delete 1013,i%
    j% = message_information_ok("La relation a été annulée.")
else
    j% = message_information_ok(nom1$+" n'est pas "+rel$+" de "+nom2$)
end_if
return

verifier:
if count(1002)<3
    j% = message_error_ok("Il n'y a pas assez d'entités.")
    return
end_if
nom$ = text$(1)
gosub chercher_entite
if inex%=1
    j% = message_error_ok("L'entité "+nom$+" n'existe pas.")
    return
end_if
nom1$ = nom$
id1% = id%
nom$ = text$(3)
gosub chercher_entite
if inex%=1
    j% = message_error_ok("L'entité "+nom$+" n'existe pas.")
    return
end_if
rel$ = nom$
idr% = id%
nom$ = text$(5)
gosub chercher_entite
if inex%=1
    j% = message_error_ok("L'entité "+nom$+" n'existe pas.")
    return
end_if
nom2$ = nom$
id2% = id%
gosub chercher_triade1
if inex%=0
    j% = message_information_ok(nom1$+" est bien "+rel$+" de "+nom2$)
else
    j% = message_information_ok(nom1$+" n'est pas "+rel$+" de "+nom2$)
end_if
return

renommer:
if count(1002)<1
    j% = message_error_ok("Il n'y a pas assez d'entités.")
    return
end_if
nom$ = text$(3)
gosub chercher_entite
if inex%=0
    j% = message_error_ok("L'entité "+nom$+" existe déjà.")
    return
end_if
nom2$ = nom$
nom$ = text$(1)
gosub chercher_entite
if inex%=1
    j% = message_error_ok("L'entité "+nom$+" n'existe pas.")
    return
end_if
nom1$ = nom$
id1% = id%
sort_off 1002
item_delete 1002,i%
item_insert 1002,i%,nom2$+","+str$(id1%)
sort_on 1002
item_delete 1001,id1%
item_insert 1001,id1%,right$(zero$+str$(id1%),10)+","+nom2$
return

supprimer:
if count(1002)<1
    j% = message_error_ok("Il n'y a pas assez d'entités.")
    return
end_if
nom$ = text$(1)
gosub chercher_entite
if inex%=1
    j% = message_error_ok("L'entité "+nom$+" n'existe pas.")
    return
end_if
nom1$ = nom$
id1% = id%
item_delete 1002,i%
item_delete 1001,id1%
item_insert 1001,id1%,right$(zero$+str$(id1%),10)+",----------"
s1$ = str$(id1%)
for t%=1 to 3
    for i%=1 to count(1010+t%)
        s$ = item_read$(1010+t%,i%)
        if (instr(s$,s1$+",")>0) or (instr(s$,","+s1$)>0)
            item_delete 1010+t%,i%
            i% = i% - 1
            if i%=count(1010+t%) then exit_for
        end_if
    next i%
next t%
return

informer:
if count(1002)<1
    j% = message_error_ok("Il n'y a pas assez d'entités.")
    return
end_if
nom$ = text$(1)
gosub chercher_entite
if inex%=1
    j% = message_error_ok("L'entité "+nom$+" n'existe pas.")
    return
end_if
nomx$ = nom$
idx% = id%
clear 1020
flag_1020% = 0
start_1020% = count(1020)+1
id1% = idx%
nom1$ = nomx$
gosub info_1xx
start_1020% = count(1020)+1
idr% = idx%
rel$ = nomx$
gosub info_xrx
start_1020% = count(1020)+1
id2% = idx%
nom2$ = nomx$
gosub info_xx2
return

completer:
flag_1020% = 1
start_1020% = 1
nom1$ = trim$(text$(1))
rel$ = trim$(text$(3))
nom2$ = trim$(text$(5))
if nom1$=""
' [?,x,x] on cherche nom1
    if rel$=""
    ' [?,?,x] on cherche rel
        if nom2$=""
        ' [?,?,?] on cherche nom2
            j% = message_error_ok("La recherche est trop vaste.")
            return
        else
        ' [?,?,$] on a nom2 ==> on cherche nom1 et rel pour nom2
            nom$ = nom2$
            gosub chercher_entite
            id2% = id%
            if inex%=1
                j% = message_error_ok("L'entité "+nom$+" n'existe pas.")
                return
            end_if
            gosub info_xx2
            if inex%=1
                j% = message_error_ok("Recherche vaine.")
                return
            end_if
        end_if
    else
    ' [?,$,x] on a rel
        if nom2$=""
        ' [?,$,?] on cherche nom1 et nom2 pour rel
            nom$ = rel$
            gosub chercher_entite
            idr% = id%
            if inex%=1
                j% = message_error_ok("L'entité "+nom$+" n'existe pas.")
                return
            end_if
            gosub info_xrx
            if inex%=1
                j% = message_error_ok("Recherche vaine.")
                return
            end_if
        else
        ' [?,$,$] on a nom2 ==> on cherche nom1 pour rel et nom2
            nom$ = rel$
            gosub chercher_entite
            idr% = id%
            if inex%=1
                j% = message_error_ok("L'entité "+nom$+" n'existe pas.")
                return
            end_if
            nom$ = nom2$
            gosub chercher_entite
            id2% = id%
            if inex%=1
                j% = message_error_ok("L'entité "+nom$+" n'existe pas.")
                return
            end_if
            triade$ = str$(idr%)+","+str$(id2%)+","
            t% = 2
            gosub chercher_triade_partielle_xR2
            if inex%=1
                j% = message_error_ok("Recherche vaine.")
                return
            end_if
            for i%=1 to count(1020)
                id% = val(item_read$(1020,i%))
                gosub chercher_nom_par_id
                item_delete 1020,i%
                item_insert 1020,i%,nom$
            next i%
            item_insert 1020,1,rel$ + " de " + nom2$ + ":"
        end_if
    end_if
else
' on a nom1
    if rel$=""
    ' [$,?,x] on cherche rel et nom1
        if nom2$=""
        ' [$,?,?] on cherche nom2 et rel pour nom1
            nom$ = nom1$
            gosub chercher_entite
            id1% = id%
            if inex%=1
                j% = message_error_ok("L'entité "+nom$+" n'existe pas.")
                return
            end_if
            gosub info_1xx
            if inex%=1
                j% = message_error_ok("Recherche vaine.")
                return
            end_if
        else
        ' [$,?,$] on a nom2 ==> on cherche rel pour nom1 et nom2
            nom$ = nom1$
            gosub chercher_entite
            id1% = id%
            if inex%=1
                j% = message_error_ok("L'entité "+nom$+" n'existe pas.")
                return
            end_if
            nom$ = nom2$
            gosub chercher_entite
            id2% = id%
            if inex%=1
                j% = message_error_ok("L'entité "+nom$+" n'existe pas.")
                return
            end_if
            triade$ = str$(id2%)+","+str$(id1%)+","
            t% = 3
            gosub chercher_triade_partielle_1x2
            if inex%=1
                j% = message_error_ok("Recherche vaine.")
                return
            end_if
            for i%=1 to count(1020)
                id% = val(item_read$(1020,i%))
                gosub chercher_nom_par_id
                item_delete 1020,i%
                item_insert 1020,i%,nom$
            next i%
            item_insert 1020,1,nom1$ + " est pour " + nom2$ + ":"
        end_if
    else
    ' on a rel
        if nom2$=""
        ' [$,$,?] on cherche nom2 pour nom1 et rel
            nom$ = nom1$
            gosub chercher_entite
            id1% = id%
            if inex%=1
                j% = message_error_ok("L'entité "+nom$+" n'existe pas.")
                return
            end_if
            nom$ = rel$
            gosub chercher_entite
            idr% = id%
            if inex%=1
                j% = message_error_ok("L'entité "+rel$+" n'existe pas.")
                return
            end_if
            triade$ = str$(id1%)+","+str$(idr%)+","
            t% = 1
            gosub chercher_triade_partielle_1Rx
            if inex%=1
                j% = message_error_ok("Recherche vaine.")
                return
            end_if
            for i%=1 to count(1020)
                id% = val(item_read$(1020,i%))
                gosub chercher_nom_par_id
                item_delete 1020,i%
                item_insert 1020,i%,nom$
            next i%
            item_insert 1020,1,nom1$ + " est " + rel$ + " de: "
        else
        ' [$,$,$] on a nom2 ==> on ne cherche rien !
            j% = message_error_ok("Il n'y a rien à compléter.")
            return
        end_if
    end_if
end_if
return

info_1xx:
            triade$ = str$(id1%)+","
            t% = 1
            gosub chercher_triade_partielle_1xx
            if inex%=1 then return
            for i%=start_1020% to count(1020)
                s3$ = item_read$(1020,i%)
                id% = val(left$(s3$,instr(s3$,",")-1))
                gosub chercher_nom_par_id
                sr$ = nom$ + " de "
                id% = val(mid$(s3$,instr(s3$,",")+1,20))
                gosub chercher_nom_par_id
                sr$ = sr$ + nom$
                item_delete 1020,i%
                item_insert 1020,i%,sr$
            next i%
            item_insert 1020,start_1020%,nom1$ + " est: "
return

info_xrx:
            triade$ = str$(idr%)+","
            t% = 2
            gosub chercher_triade_partielle_xRx
            if inex%=1 then return
            for i%=start_1020% to count(1020)
                s3$ = item_read$(1020,i%)
                id% = val(left$(s3$,instr(s3$,",")-1))
                gosub chercher_nom_par_id
                sr$ = " à " + nom$
                id% = val(mid$(s3$,instr(s3$,",")+1,20))
                gosub chercher_nom_par_id
                sr$ = nom$ + sr$
                item_delete 1020,i%
                item_insert 1020,i%,sr$
            next i%
            item_insert 1020,start_1020%,rel$ + " lie:"
return

info_xx2:
            triade$ = str$(id2%)+","
            t% = 3
            gosub chercher_triade_partielle_xx2
            if inex%=1 then return
            for i%=start_1020% to count(1020)
                s3$ = item_read$(1020,i%)
                id% = val(left$(s3$,instr(s3$,",")-1))
                gosub chercher_nom_par_id
                sr$ = nom$ + " est "
                id% = val(mid$(s3$,instr(s3$,",")+1,20))
                gosub chercher_nom_par_id
                sr$ = sr$ + nom$
                item_delete 1020,i%
                item_insert 1020,i%,sr$
            next i%
            item_insert 1020,start_1020%,"Pour "+nom2$+":"
return

creer_entite:
if count(1002)>0
    for i%=1 to count(1002)
        s$ = item_read$(1002,i%)
        if left$(s$,instr(s$,",")-1)=nom$
            id% = val(mid$(s$,instr(s$,",")+1,10 ))
            return
        end_if
    next i%
end_if
    n_entite% = n_entite% + 1
    id% = n_entite%
    item_add 1001,right$(zero$+str$(id%),10)+","+nom$
    item_add 1002,nom$+","+str$(id%)
return

chercher_entite:
if count(1002)>0
    for i%=1 to count(1002)
        s$ = item_read$(1002,i%)
        if left$(s$,instr(s$,",")-1)=nom$
            id% = val(mid$(s$,instr(s$,",")+1,10 ))
            inex% = 0
            return
        end_if
    next i%
end_if
inex% = 1
return

chercher_triade1:
triade$ = str$(id1%)+","+str$(idr%)+","+str$(id2%)
if count(1011)>0
    inex% = 0
    for i%=1 to count(1011)
        if item_read$(1011,i%)=triade$ then return
    next i%
end_if
inex% = 1
return

chercher_triade2:
triade$ = str$(idr%)+","+str$(id2%)+","+str$(id1%)
if count(1012)>0
    inex% = 0
    for i%=1 to count(1012)
        if item_read$(1012,i%)=triade$ then return
    next i%
end_if
inex% = 1
return

chercher_triade3:
triade$ = str$(id2%)+","+str$(id1%)+","+str$(idr%)
if count(1013)>0
    inex% = 0
    for i%=1 to count(1013)
        if item_read$(1013,i%)=triade$ then return
    next i%
end_if
inex% = 1
return

chercher_triade_partielle_1Rx:
inex% = 1
if flag_1020%=1 then clear 1020
j% = len(triade$)
if count(1010+t%)>0
    for i%=1 to count(1010+t%)
        s$ = item_read$(1010+t%,i%)
        if triade$=left$(s$,j%) then item_add 1020,mid$(s$,j%+1,20)
    next i%
end_if
if count(1020)>0 then inex% = 0
return

chercher_triade_partielle_1x2:
inex% = 1
if flag_1020%=1 then clear 1020
j% = len(triade$)
if count(1010+t%)>0
    for i%=1 to count(1010+t%)
        s$ = item_read$(1010+t%,i%)
        if triade$=left$(s$,j%) then item_add 1020,mid$(s$,j%+1,20)
    next i%
end_if
if count(1020)>0 then inex% = 0
return

chercher_triade_partielle_xR2:
inex% = 1
if flag_1020%=1 then clear 1020
j% = len(triade$)
if count(1010+t%)>0
    for i%=1 to count(1010+t%)
        s$ = item_read$(1010+t%,i%)
        if triade$=left$(s$,j%) then item_add 1020,mid$(s$,j%+1,20)
    next i%
end_if
if count(1020)>0 then inex% = 0
return

chercher_triade_partielle_1xx:
inex% = 1
cnt% = 0
if flag_1020%=1 then clear 1020
j% = len(triade$)
if count(1010+t%)>0
    for i%=1 to count(1010+t%)
        s$ = item_read$(1010+t%,i%)
        if triade$=left$(s$,j%)
            s$ = mid$(s$,instr(s$,",")+1,20)
            item_add 1020,s$
            cnt% = cnt% + 1
        end_if
    next i%
end_if
if cnt%>0 then inex% = 0
return

chercher_triade_partielle_xx2:
inex% = 1
cnt% = 0
if flag_1020%=1 then clear 1020
j% = len(triade$)
if count(1010+t%)>0
    for i%=1 to count(1010+t%)
        s$ = item_read$(1010+t%,i%)
        if triade$=left$(s$,j%)
            s$ = mid$(s$,instr(s$,",")+1,20)
            item_add 1020,s$
            cnt% = cnt% + 1
        end_if
    next i%
end_if
if cnt%>0 then inex% = 0
return

chercher_triade_partielle_xRx:
inex% = 1
cnt% = 0
if flag_1020%=1 then clear 1020
j% = len(triade$)
if count(1010+t%)>0
    for i%=1 to count(1010+t%)
        s$ = item_read$(1010+t%,i%)
        if triade$=left$(s$,j%)
            s$ = mid$(s$,instr(s$,",")+1,20)
            item_add 1020,s$
            cnt% = cnt% + 1
        end_if
    next i%
end_if
if cnt%>0 then inex% = 0
return

chercher_nom_par_id:
s2$ = item_read$(1001,id%)
nom$ = mid$(s2$,instr(s2$,",")+1,len(s2$))
return

sauvegarder:
file$ = file_name$(20)
file_open_write 2,file$+".bdr"
file_writeln 2,str$(n_entite%)
file_close 2
file_save 1001,file$+"_01.bdx"
file_save 1002,file$+"_02.bdx"
file_save 1011,file$+"_11.bdx"
file_save 1012,file$+"_12.bdx"
file_save 1013,file$+"_13.bdx"
return

restaurer:
file$ = file_name$(21)
if file$<>"_"
    file_open_read 2,file$
    file_readln 2,s$
    file_close 2
    n_entite% = val(s$)
    file$ = left$(file$,instr(file$,".bdr")-1)
    file_load 1001,file$+"_01.bdx"
    file_load 1002,file$+"_02.bdx"
    file_load 1011,file$+"_11.bdx"
    file_load 1012,file$+"_12.bdx"
    file_load 1013,file$+"_13.bdx"
end_if
return

EDIT: version 1.02 éditée et complétée le 6/4/2011 à 12:08
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Nardo26

Nardo26


Nombre de messages : 2294
Age : 55
Localisation : Valence
Date d'inscription : 02/07/2010

Une base de données relationnelle avec Panoramic Empty
MessageSujet: Re: Une base de données relationnelle avec Panoramic   Une base de données relationnelle avec Panoramic EmptyJeu 7 Avr 2011 - 1:24

Sacré boulot Klaus !
Perso, je n'aurais pas mis cela dans les inutilitaires...
Wink
Revenir en haut Aller en bas
http://nardo26.lescigales.org
Klaus

Klaus


Nombre de messages : 12274
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Une base de données relationnelle avec Panoramic Empty
MessageSujet: Re: Une base de données relationnelle avec Panoramic   Une base de données relationnelle avec Panoramic EmptyJeu 7 Avr 2011 - 1:32

Oui, j'ai longuement hésité, mais j'ai voulu tester la réaction des connaisseurs, avant de le qualifier comme outil. D'autant que dans ce cas, il faut lui adjoindre d'autres fonctionnalités (édition, ...).
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Yannick




Nombre de messages : 8610
Age : 52
Localisation : Bretagne
Date d'inscription : 15/02/2010

Une base de données relationnelle avec Panoramic Empty
MessageSujet: re   Une base de données relationnelle avec Panoramic EmptyJeu 7 Avr 2011 - 13:01

Pas inutile du tout !
Quel beau boulot !

Moi non plus , je n'aurai pas mis ça dans les inutilitaires
mais plutôt dans les sources à partager.

scratch
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12274
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Une base de données relationnelle avec Panoramic Empty
MessageSujet: Re: Une base de données relationnelle avec Panoramic   Une base de données relationnelle avec Panoramic EmptyJeu 7 Avr 2011 - 13:55

OK, je vais le placer dans cette rubrique !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé





Une base de données relationnelle avec Panoramic Empty
MessageSujet: Re: Une base de données relationnelle avec Panoramic   Une base de données relationnelle avec Panoramic Empty

Revenir en haut Aller en bas
 
Une base de données relationnelle avec Panoramic
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Une Base de Données Relationnelle (BDR) en Panoramic
» Base de données relationnelle
» Base de données relationnelle
» Logithèque : une base de données en Panoramic pour Panoramic
» Base de données de type ISAM par Excel sous PANORAMIC

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Les inutilitaires-
Sauter vers: