FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» 3D_LINE How to ?
par papydall Aujourd'hui à 6:51

» mise a jour calculatrice
par joeeee2017 Hier à 23:00

» supprimé
par joeeee2017 Dim 15 Oct 2017 - 20:02

» calculatrice avec touches movibles
par joeeee2017 Dim 15 Oct 2017 - 1:11

» Convertisseur de base 10 de 2 à 36
par gigi75 Sam 14 Oct 2017 - 21:54

» CORTANA
par gigi75 Sam 14 Oct 2017 - 16:32

» supprimé
par Jean Claude Sam 14 Oct 2017 - 12:30

» Compilateur FBPano
par jean_debord Jeu 12 Oct 2017 - 9:53

» KGF_dll - nouvelles versions
par Klaus Mar 10 Oct 2017 - 18:49

» à propos de Panoramic_Editor [Résolu]
par Klaus Mar 10 Oct 2017 - 3:19

» Un petit "coucou" à tous les Panoramiciens !
par Jack Ven 6 Oct 2017 - 10:24

» Pourquoi le compilateur stagne
par mindstorm Mer 4 Oct 2017 - 20:38

» Panoramic ?
par Marc37 Mer 4 Oct 2017 - 0:39

» Premiers pas avec Arduino
par Marc37 Mer 4 Oct 2017 - 0:29

» Mise à jour PANOMAND
par jean_debord Mar 26 Sep 2017 - 11:33

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Octobre 2017
LunMarMerJeuVenSamDim
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
CalendrierCalendrier

Partagez | 
 

 Une base de données relationnelle avec Panoramic

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Klaus

avatar

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

MessageSujet: Une base de données relationnelle avec Panoramic   Mar 5 Avr 2011 - 23: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
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Nardo26

avatar

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

MessageSujet: Re: Une base de données relationnelle avec Panoramic   Jeu 7 Avr 2011 - 2:24

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

avatar

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

MessageSujet: Re: Une base de données relationnelle avec Panoramic   Jeu 7 Avr 2011 - 2: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
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 7994
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Jeu 7 Avr 2011 - 14: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
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Une base de données relationnelle avec Panoramic   Jeu 7 Avr 2011 - 14:55

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




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

Revenir en haut Aller en bas
 
Une base de données relationnelle avec Panoramic
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Une base de données relationnelle avec Panoramic
» Pbm base de données fibre Bouygues
» acces et base de donnée works
» Minecraft-like - stocker les données - SQL ou autre
» Boostez votre FireFox

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: