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
» Bataille navale SM
KGF_dll - nouvelles versions - Page 25 Emptypar jjn4 Aujourd'hui à 17:39

» Une calculatrice en une ligne de programme
KGF_dll - nouvelles versions - Page 25 Emptypar jean_debord Aujourd'hui à 8:01

» Gestion d'un système client-serveur.
KGF_dll - nouvelles versions - Page 25 Emptypar Pedro Hier à 19:31

» Les maths du crocodile
KGF_dll - nouvelles versions - Page 25 Emptypar jean_debord Hier à 10:37

» Naissance de Crocodile Basic
KGF_dll - nouvelles versions - Page 25 Emptypar jean_debord Hier à 8:45

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
KGF_dll - nouvelles versions - Page 25 Emptypar Froggy One Mer 24 Avr 2024 - 18:38

» Dessine-moi une galaxie
KGF_dll - nouvelles versions - Page 25 Emptypar jjn4 Lun 22 Avr 2024 - 13:47

» Erreur END_SUB
KGF_dll - nouvelles versions - Page 25 Emptypar jjn4 Lun 22 Avr 2024 - 13:43

» Bug sur DIM_LOCAL ?
KGF_dll - nouvelles versions - Page 25 Emptypar papydall Dim 21 Avr 2024 - 23:30

» Form
KGF_dll - nouvelles versions - Page 25 Emptypar leclode Dim 21 Avr 2024 - 18:09

» trop de fichiers en cours
KGF_dll - nouvelles versions - Page 25 Emptypar Marc Dim 21 Avr 2024 - 2:41

» 2D_fill_color(résolu)
KGF_dll - nouvelles versions - Page 25 Emptypar leclode Sam 20 Avr 2024 - 8:32

» Consommation gaz électricité
KGF_dll - nouvelles versions - Page 25 Emptypar leclode Mer 17 Avr 2024 - 11:07

» on_key_down (résolu)
KGF_dll - nouvelles versions - Page 25 Emptypar leclode Mar 16 Avr 2024 - 11:01

» Sous-programme(résolu)
KGF_dll - nouvelles versions - Page 25 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
Le deal à ne pas rater :
Pokémon EV06 : où acheter le Bundle Lot 6 Boosters Mascarade ...
Voir le deal

 

 KGF_dll - nouvelles versions

Aller en bas 
+12
JL35
Oscaribout
bignono
Pedro
pascal10000
silverman
Jicehel
papydall
Minibug
Marc
Yannick
Klaus
16 participants
Aller à la page : Précédent  1 ... 14 ... 24, 25, 26 ... 32 ... 40  Suivant
AuteurMessage
Minibug

Minibug


Nombre de messages : 4566
Age : 57
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyJeu 11 Jan 2018 - 8:24

Bonjour Klaus !

Bravo, tout fonctionne correctement avec ton premier code !

Par contre avec le 2eme code, il y a un problème dans le déplacement du PICTURE ?!
Certainement un problème de programmation, mais je n'ai pas regardé le code.
Je n'ai pas beaucoup de temps je dois partir au boulot.

Bonne journée ! Wink
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyJeu 11 Jan 2018 - 9:18

En sélection unique, ou fondue dans une sélection multiple, je ne constate pas d'anomalie sur le picture... J'ai acutualisé le code dans le post ci-desssus, à tout hasard. On verrra lorsque tu auras l'occasion de m'en dire plus.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Minibug

Minibug


Nombre de messages : 4566
Age : 57
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyJeu 11 Jan 2018 - 19:42

bonsoir Klaus !

Voila comment reproduire le bug :

1 - je lance le programme (le second dans ton message) avec la sélection d'un seul objet seul par defaut
2 - je déplace le PICTURE par l’icône flèche en haut à gauche
et là le picture se déplace direct tout en haut à gauche
en plus on voit une main (icône ?) apparaître ?!

KGF_dll - nouvelles versions - Page 25 Sans_t23

Sinon tout fonctionne a priori parfaitement avec le premier programme.
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyJeu 11 Jan 2018 - 19:54

Je ne comprends pas, parce que chez moi, ça marche très bien. J'ai peut-être cafouillé en mettant à jour mes sites et mon WebDav. A tout hasard, j'ai remis KGF.dll sur le WebDav et KGF.zip sur les deux sites. Peux-tu essayer à nouveau, après avoir rechargé la DLL ? Je suis à la version KGF.dll V08.32 10/01/2018 produite ce jour à 19h47 (eh oui, pour l'occasion, j'ai regénéré la DLL).
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Minibug

Minibug


Nombre de messages : 4566
Age : 57
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyJeu 11 Jan 2018 - 20:30

En regardant d'un peu plus près le problème se pose sur les 2 programmes !
Je le rencontre uniquement avec le PICTURE c'est bizarre. Suspect

Dès que je déplace de quelques pixels la souris, le PICTURE se déplace directement en haut à gauche et la main apparaît.
Cette main semble indiquer que le clic reste bloqué, comme si je maintenais la touche de la souris enfoncé !?

Ensuite j'ai beaucoup de mal à déplacer le picture en maintenant appuyé la souris sur l’icône fléché.
Pour y arriver je doit plutôt sélectionné le cadre à la souris.

En plus les déplacements produisent des traînés de l'objet ! drunken

KGF_dll - nouvelles versions - Page 25 Sans_t24
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Marc

Marc


Nombre de messages : 2379
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyJeu 11 Jan 2018 - 20:43

Bonjour Klaus et Minibug,

Pour info, je confirme avoir le même dysfonctionnement que Minibug.
DLL téléchargée et mise à jour à 20h00 ce soir.

Merci pour tout, Klaus, et bonne continuation.
Revenir en haut Aller en bas
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyJeu 11 Jan 2018 - 21:06

J'ai beau tester, je n'arrive pas à produire ce problème du picture qui "saute" en haut à gauche avec une main qui apparaît, que ce soit en tirant l'icône du ObjectMover ou en tirant le cadre jaune du Designer. J'ai généré le programme en EXE et placé sur mon WebDav, dossier DLLs: pb_designer.zip. Pourrais-tu essayer avec ça stp ?

En ce qui concerne les traces blanches, je ne les avais pas remarqué jusqu'alors, et elles n'apparaissent que si l'on déplace l'objet "rapidement". Et encore - chez moi, ça n'arrive que lors d'un déplacement par l'icône, pas par le cadre. Chez toi aussi ? Je vais en chercher la cause.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Minibug

Minibug


Nombre de messages : 4566
Age : 57
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyJeu 11 Jan 2018 - 21:39

Choses importante : le problème ne se pose qu'en tirant l'icône du ObjectMover

J'ai téléchargé sur le WebDav le fichier pb_designer.zip.

Après exécution du fichier, il n'y a plus de bug !
Juste quelques zones blanches comme déjà constatées, mais plus de bug à proprement parlé !

As tu une idée du pourquoi ?



Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyJeu 11 Jan 2018 - 21:42

Quelle est ta version de Panoramic ?
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Minibug

Minibug


Nombre de messages : 4566
Age : 57
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyJeu 11 Jan 2018 - 21:49

832 correspond à KGF.dll V08.32 10/01/2018
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyJeu 11 Jan 2018 - 21:55

Ca, c'est KGF.dll. Je voulais connaître la version de Panoramic_Editor. Chez moi, c'est:
KGF_dll - nouvelles versions - Page 25 Aa123
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Minibug

Minibug


Nombre de messages : 4566
Age : 57
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyJeu 11 Jan 2018 - 22:00

Désolé Klaus. J'ai la tête en l'air...
J'ai la même version que toi, la dernière. 0.9.28i12 du 8 juillet 2017.
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyJeu 11 Jan 2018 - 22:01

Nouvelle version:
KGF.dll V8.33 du 11/01/2018

Nouveautés:
- Designer: suppression des traces blanches en déplaçant rapidement un picture par l'ObjectMover

Modules modifiés:
KGF.dll

La doc est inchangée. Les sources sont à jour.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyJeu 11 Jan 2018 - 22:02

Citation :
Désolé Klaus. J'ai la tête en l'air...
J'ai la même version que toi, la dernière. 0.9.28i12 du 8 juillet 2017.
Alors, je n'ai aucune idée, pour le moment. En attendant, j'ai corrigé le problème des traces blanches...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Minibug

Minibug


Nombre de messages : 4566
Age : 57
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyJeu 11 Jan 2018 - 22:08

Je viens de télécharger la dernière version... et miracle, tout fonctionne correctement !?

Plus de traces et plus de déplacements incohérents. c'est super! cheers drunken

Par contre, je n'y comprends rien... geek
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyJeu 11 Jan 2018 - 22:15

Eh bien, n'y touchons plus... Des fois, il n'y a rien à comprendre. Ca marche, tant mieux. Je respire...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Minibug

Minibug


Nombre de messages : 4566
Age : 57
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyJeu 11 Jan 2018 - 22:21

Oui tu as raison ! Laughing Laughing Laughing
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
bignono

bignono


Nombre de messages : 1127
Age : 66
Localisation : Val de Marne
Date d'inscription : 13/11/2011

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyMar 16 Jan 2018 - 10:11

Bonjour Klaus,  Very Happy
Je crois qu'il y a un problème avec la fonction "TorturePicture"
le picture est tronqué à l'affichage si je change les valeurs HG$ et HD$
Regarde si je change les valeurs de ton exemple dans kgf HD$="400,100" au lieu de "400,0" et HG$="0,100" au lieu de "100,0" le résultat donne qu'on ne voit pas le haut du picture et on a l'impression que la hauteur gauche et droite commence à 0 au lieu de 100. Et on constate bien que le picture 1 n'a plus la dimension de 600 de largeur par 400 de hauteur mais 600 par 300, alors que le message panoramic de la hauteur nous renvoie bien 400. Il suffit de comparer avec le picture 2 en gris à coté!
Voici ton exemple où j'ai changé tes valeurs HG$ et HD$ et où j'ai rajouté un second picture pour comparaison:
Code:
dim res% , HD$, HG$, BG$, BD$
width 0,1216
picture 1 : height 1,400 : width 1,600
file_load 1,"c:\temp\Palette.bmp": ' ===> à adapter

picture 2:left 2,600:height 2,400:width 2,600: color 2,120,120,120

DLL_ON "C:\TEST\KGF830.dll": ' ===> à adapter

clipboard_copy 1
res% = dll_call0("LoadPicture")
' HD$ = "400,0"
' HG$ = "100,0"
' BG$ = "0,399"
' BD$ = "599,399"

 HD$ = "400,100"
 HG$ = "0,100"
 BG$ = "0,399"
 BD$ = "599,399"

' tranformer l'image en losange

res% = dll_call4("TorturePicture",adr(HG$),adr(HD$),adr(BD$),adr(BG$))
res% = dll_call0("SavePicture")
clipboard_paste 1
message "picture 1= "+str$(height(1))+chr$(9)+chr$(13)+"picture 2= "+str$(height(2))
A + Wink  Wink  Wink
Revenir en haut Aller en bas
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyMar 16 Jan 2018 - 11:42

Je vais regarder cela...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyMar 16 Jan 2018 - 19:28

Nouvelle version:
KGF.dll V8.34 du 16/01/2018

Nouveautés:
- documentation des fonctions: WBSetBrowserType, WB_SetBrowserType
- nouvelles fonctions: WBExecuteJavaScript, WB_ExecuteJavaScript


Modules modifiés:
KGF.dll
KGF.chm


La doc et les sources sont à jour.

Les fonctions WBSetBrowserType et WB_SetBrowserType existaient depuis longtemps, mais pour une raison qui m'échappe, elles n'ont pas été documentées. Voilà qui est fait.

Par contre, les fonctions WBExecuteJavaScript et WB_ExecuteJavaScript sont de vraies nouveautés. Elles permettent d'exécuter du code JavaScript à partir de Panoramic, dans le contexte d'un browser. Seul un browser de type Mozilla Firefox est utilisable pour cela. En effet, dans le browser Internet Explorer intégrable (WebBrowser), la gestion des JavaScript est définitivement désactivé par MicroSoft.

Voici une démo d'exécution de JavaScript. On saisit le code JavaScript dans le mémo, puis on clique sur le bouton "Exécuter". Par défaut, le code JavaScript affiche une petite boite de dialogue avec un message. Mais on peut mettre n'importe quel JavaScript complet et valide:
Code:
' JavaScript_avec_WebBrowser.bas

label exec, close0

dim res%, WB%, jscript$, url$

on_close 0,close0

dll_on "KGF.dll"
button 1 : caption 1,"Exécuter" : on_click 1,exec
memo 2 : full_space 2 : height 2,height_client(0)-30 : top 2,30
text 2,"alert("+chr$(34)+"Hello"+chr$(34)+");"

end

close0:
  if WB%<>0 then res% = dll_call1("WB_Delete",WB%)
  return

exec: 
  jscript$ = text$(2)
  if jscript$="" then return
'  res% = dll_call1("WB_SetBrowserType",0)  : ' iexplore
  res% = dll_call1("WB_SetBrowserType",1)  : ' Mozilla
  if WB%=0 then WB% = dll_call1("WB_Create",handle(0))
  res% = dll_call2("WB_ExecuteJavaScript",WB%,adr(jscript$))
  return
 
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyDim 28 Jan 2018 - 11:56

Nouvelle version:
KGF.dll V8.35 du 28/01/2018

Nouveautés:
- nouvelle fonction: GetActiveMemoLine
- nouveau système de gestion de fichiers (base de données): KBDD et ses fonctions de gestion


Modules modifiés:
KGF.dll
KGF.chm


La doc et les sources sont à jour.

L'ensemble représente 23 nouvelles fonctions. C'était un gros morceau, et ceci explique mon silence depuis une bonne semaine. J'ai profite de cette nouvelle version pour comencer une restructuration de KGF.hlp, et je vais la poursuivre. Pour cette fois, j'ai réuni dans une seule rubrique "Gestion de fichiers" l'ensemble des outils qui s'y rapportent, y compris la nouvelle base de données KBDD.

La fonction GetActiveMemoLine est documentée dans la section "Objets", rubrique "GRID, LIST et COMBO". Elle retourne le numéro de ligne dans laquelle se trouve le curseur dans un mémo. Ceci marche pour un mémo Panoramic, mais également pour un mémo d'un programme externe pourvu qu'on connaisse le handle. KGF.dll donne des fonctions permettant de connaître le handle de tout objet sous le curseur, par exemple... Cette fonction permet d'utiliser un MEMO comme un LIST, en récupérant la ligne sélectionnée lors d'un clic dans un MEMO.

Mais le gros morceau est KBDD. Ce n'est pas vraiment une base de données, pour être honnête. C'est un fichier ISAM (Indexed Sequential Access Method) multi-clé à lecture bi-directionnelle, mais avec uen fonction de recherche permettant de constituer des collections d'enregistrements en fonction de critères de recherche façon "Query' - un ou plusieurs criitères du type "champ / opérateur / valeur", qui s'appliquent sur tous les enregsitrements. Du genre "trouver tous les clients du Loiret dont les commandes impayées dépassent 100 euros". Un seu appel à une fonction permet de trouver cela. Mieux, de conserver le résultat dans la base elle-même pour utilisation ultérieure.

Le point le plus important, c'est que tout se fait entièrement en mémoire, ce qui conduit à de très binnes performances. Certes, ce n'est pas prévu pour des très grosses quantités de données, comme des bases de 3 Go etc. Encore que - cela dépend uniquement de la taille mémoire disponible et de la charge et de la puissance de l'unité centrale. Techniquement, il n'y a pas de limitations.

On peut ouvrir plusieurs bases de ce type simultanément. Là encore, seule les capacités physiques de la machine vont fixer les limites. Techniquement, gérant simultanément 1, 2, 20 ou 100 bases - c'est pareil.

Comme tout se déroule en mémoire, il y a une fonction spécifique pour sauvegarder une base sur disque, dans un fichier. Ce sera un simple fichier texte, dont la structure est décrite dans la documentation. Mais je déconseille vivement d'intervenir dans un tel fichier via un éditeur de texte - le moindre décalage le rendra inutilisable.

Assez de baratin. Consultez la documentation que j'ai conçue assez précise. Voici une démo, avec l'éternel exemple d'un fichier des contacts. Cette base fonctionne avec 3 clés d'acces: "Nom/Prénom", "Code postal" et "Ville".

Quelques précisions sur l'utilisation:
- comme il s'agit d'une base "in memory", il faut toujours commencer par le bouton "Créer" qui crée une nouvelle base vide en mémoire. C'est le "brouillon" dans lequel on travaille.
- ensuite, il faut "peupler" la base. Pour cela, renseigner les champs Nom, Prénom, Né(e) le, Adresse 1, Adresse 2, Code postal, Ville, Téléphone et Mail, puis cliquer sur "Ajouter". On verra le mémo "Statut" évoluer en fonction des ajouts.
- après quelques ajouts, on peut commencer à exploiter la base, en effectuant des lecturs (recherches).
- lecture en accès direct (numéro d'enregistrement): renseigner la combo "ID", puis cliquer sur "ReadID". Puis, utiliser les boutons "Read next" ou Read prev" pour parcourir la base dans le sens indiqué par le bouton. Le mémo "Status" est toujours actualisé, et le mémo "Résultat" donne le résultat de la lecture (ou l'erreur)
- pour une recherche par clé d'accès, renseigner l'une ou l'autre des zones pour les indexes (Adresse 1 et Adresse 1, Code postal ou Ville) puis cliquer respectivement sur les boutons "Lire index 0", "Lire index 1" ou "Lire index 2". Là encore, les mémos "Status" et "Resultat" reflètent l'action.
- les boutons "Prédédant" et "Suivant" permettent de reculer ou d'avancer dans la base, mais dans l'odre du dernier index utilisé. C'est comme si l'on travaillait sur un fichier trié selon ce critère.
- il est temps de créer une version disque de la base et de la sauvegarder. Pour cela, cliquer sur le bouton "Sauver". Pas spectaculaire comme action, mais un fichier Test_de_KBDD.KBDD est créé dans le dossier par défaut.
- modifier des données: lire un enregistrement par un moyen quelconque, changer le contenu de certaines zones (même celles qui sont des clés d'accès !), pujis cliquer sur "Maj". Le mémo "Statut" sera actualisé.
- supprimer un enregistrement: lire un enregistrement par un moyen quelconque, puis cliquer sur le bouton "Supprimer". Le statut sera actualisé. On peut même le dé-supprimer: bouton "Restaurer" ! Ceci marche,, même après avoir fait une sauvegarde, arrêté le programme, relancé le programme (refaire "Créer" puis "Charger"), puis relire l'enregistrement supprimé par son ID (génère une erreur mais positionne sur cet enregistrement), puis bouton "Restaurer" ==> m'enregistrement est disponible à nouveau
- compression des données: la suppression et la mise à jour génèrent des "trous" (enregistrements logiquement supprimés mais phiysiquement occupant de l'espace). Le bouton "Tasser" permet d'éliminer tous ces "cadavres", mais bien sûr, il n'est plus possible après cela de restaurer les enregistrements supprimés.
- et finalement, le travail avec les collections:
1. rentrer un nom quelconque pour une collection
2. rentrer une ligne dans chacun des 3 mémos "Champs", "Opérateurs" et "Valeurs", puis cliquer sur "Query". Le résultat s'affiche à droite et le statut est actualisé. Exemple (dépendant des adresses que vous avez créées, bien sûr !):
Dans le mémo champs, rentrez 2 lignes identiques avec "Codepostal" (sans les guillemets)
Dans le mémo opérateurs, rentrez une ligne ">=" et une ligne "<=" (sans les guillemets)
Dans le mémo valeurs, rentrez une ligne "45000" et une ligne "45999" (sans les guillemets)
On obtient tous les enregistrements localisés dans le Loiret.
On peut utiliser les noms des champs définis pour la pase dans le mémo "Champs" (on les voit dans le mémo "Statut").
- on peut créer plusieurs collections. Le statut va les refléter, et un mémo "Collections" en haut à droite va afficher les noms de toutes les collections présentes. On clic sur une ligne de ce mémo va afficher les détails de la collection dans les zones en pas concernées par la collection (c'est l'utilisation de la nouvelle fonction GetActiveMemoLine)

Voici le code:
Code:
' test_KBDD.bas

' démo à l'aide d'un carnet d'adresses:
'  Nom = 40 car.                Clé 0
'  Prénom = 40 car.              Clé 0
'  Date de naissance = 8 car.
'  Adresse = 2 x 40 car.
'  Code postal = 5 car.          Clé 1
'  Ville = 40 car.              Clé 2
'  Tél. = 10 car.               
'  Mail = 40 car.
'
' L'appel de GetInfoKBDD ne sert à rien fonctionnellement.
' C'est juste l'affichage de l'état interne de KBDD, pour information.


label creer, sauver, charger, squeeze, ajouter, lireID, lireNextID, lirePrevID
label precedent, suivant, query, supprimercollection, SelectCollection
label LireIndex0, LireIndex1, LireIndex2, maj, supprimer, restaurer

dim res%, KBDD%, NomKBDD$, no%, PathKBDD$, IndexKBDD$, RecordKBDD$,FieldKBDD$
dim blanc$, aRecord$
dim s1$, s2$, i%, j%, ok%, sQuery$
dim hmemoStatut%, hmemoResultat%, hmemoCollections%
dim hmemoChamps%, hmemoOperateurs%, hmemoValeurs%, hmemoCollection%
dim noChamps%, noOperateurs%, noValeurs%, noCollection%, noOperateursPossibles%
dim noListeCollections%
dim noNomCollection%, NomCollection$
dim noResult%, noID%, ID%, cle$

blanc$ = string$(255," ")
aRecord$ = string$(40+40+8+80+5+40+10+40," ")

full_space 0

no% = 1 : button no% : caption no%,"Créer" : on_click no%,creer
no% = no% + 1 : button no% : left no%,left(no%-1)+width(no%) : caption no%,"Sauver" : on_click no%,sauver
no% = no% + 1 : button no% : left no%,left(no%-1)+width(no%) : caption no%,"Charger" : on_click no%,charger
no% = no% + 1 : button no% : left no%,left(no%-1)+width(no%)+30 : caption no%,"Tasser" : on_click no%,squeeze


no% = no% + 1 : alpha no% : top no%,40 : left no%,10 : caption no%,"Nom:"
edit 1001 : top 1001,40 : left 1001,100 : width 1001,300
no% = no% + 1 : alpha no% : top no%,65 : left no%,10 : caption no%,"Prénom:"
edit 1002 : top 1002,65 : left 1002,100 : width 1002,300
no% = no% + 1 : alpha no% : top no%,90 : left no%,10 : caption no%,"Né(e) le:"
edit 1003 : top 1003,90 : left 1003,100 : width 1003,100
no% = no% + 1 : alpha no% : top no%,90 : left no%,220 : caption no%,"( aaaammjj )"
no% = no% + 1 : alpha no% : top no%,115 : left no%,10 : caption no%,"Adresse:"
edit 1004 : top 1004,115 : left 1004,100 : width 1004,300
edit 1005 : top 1005,140 : left 1005,100 : width 1005,300
no% = no% + 1 : alpha no% : top no%,165 : left no%,10 : caption no%,"Code postal:"
edit 1006 : top 1006,165 : left 1006,100 : width 1006,100
no% = no% + 1 : alpha no% : top no%,190 : left no%,10 : caption no%,"Ville:"
edit 1007 : top 1007,190 : left 1007,100 : width 1007,300
no% = no% + 1 : alpha no% : top no%,215 : left no%,10 : caption no%,"Téléphone:"
edit 1008 : top 1008,215 : left 1008,100 : width 1008,100
no% = no% + 1 : alpha no% : top no%,240 : left no%,10 : caption no%,"Mail:"
edit 1009 : top 1009,240 : left 1009,100 : width 1009,300

no% = no% + 1 : alpha no% : top no%,40 : left no%,430 : caption no%,"Statut:"
no% =  no% + 1 : memo no% : top no%,40 : left no%,470 : width no%,300 : height no%,300 : bar_both no%
  hmemoStatut% = handle(no%)
no% = no% + 1 : alpha no% : top no%,40 : left no%,800 : caption no%,"Résultat:"
no% =  no% + 1 : memo no% : top no%,40 : left no%,850 : width no%,200 : height no%,300 : bar_both no%
  hmemoResultat% = handle(no%) : noResult% = no%
no% = no% + 1 : alpha no% : top no%,40 : left no%,1070 : caption no%,"Collections:"
no% =  no% + 1 : memo no% : top no%,40 : left no%,1130 : width no%,200 : height no%,300 : bar_both no% : on_click no%,SelectCollection
  hmemoCollections% = handle(no%) : noListeCollections% = no%
 
 
no% = no% + 1 : button no% : top no%,280 : caption no%,"Ajouter" : on_click no%,ajouter
no% = no% + 1 : button no% : top no%,280 : left no%,left(no%-1)+width(no%-1) : caption no%,"Lire index 0" : on_click no%,LireIndex0
no% = no% + 1 : button no% : top no%,280 : left no%,left(no%-1)+width(no%-1) : caption no%,"Lire index 1" : on_click no%,LireIndex1
no% = no% + 1 : button no% : top no%,280 : left no%,left(no%-1)+width(no%-1) : caption no%,"Lire index 2" : on_click no%,LireIndex2
no% = no% + 1 : button no% : top no%,280 : left no%,left(no%-1)+width(no%-1) : caption no%,"Maj" : on_click no%,maj
no% = no% + 1 : button no% : top no%,280 : left no%,left(no%-1)+width(no%-1) : caption no%,"Supprimer" : on_click no%,supprimer
no% = no% + 1 : button no% : top no%,305 : left no%,left(no%-1) : caption no%,"Restaurer" : on_click no%,restaurer

no% = no% + 1 : button no% : top no%,305 : left no%,110 : caption no%,"Précédent" : on_click no%,precedent
no% = no% + 1 : button no% : top no%,305 : left no%,left(no%-1)+width(no%-1) : caption no%,"Suivant" : on_click no%,suivant

no% = no% + 1 : alpha no% : top no%,360 : caption no%,"ID:"
no% = no% + 1 : spin no% : top no%,360 : left no%,20 : width no%,100 : min no%,0 : max no%,3000 : position no%,0
  noID% = no%
no% = no% + 1 : button no% : top no%,360 : left no%,left(no%-1)+width(no%)+25 : caption no%,"Read ID" : on_click no%,lireID
no% = no% + 1 : button no% : top no%,360 : left no%,left(no%-1)+width(no%) : caption no%,"Read next" : on_click no%,lireNextID
no% = no% + 1 : button no% : top no%,360 : left no%,left(no%-1)+width(no%) : caption no%,"Read prev" : on_click no%,lirePrevID

no% = no% + 1 : dlist no% : noOperateursPossibles% = no%
no% = no% + 1 : alpha no% : top no%,400 : caption no%,"Création de collections:    Nom:"
no% = no% + 1 : edit no% : top no%,400 : left no%,160 : noNomCollection% = no%
no% = no% + 1 : button no% : top no%,400 :left no%,left(no%-1)+width(no%) : caption no%,"Supprimer" : on_click no%,supprimercollection
no% = no% + 1 : alpha no% : top no%,430 : caption no%,"Champs:"
no% = no% + 1 : memo no% : top no%,450 : width no%,150 : height no%,200
  hmemoChamps% = handle(no%) : noChamps% = no%
no% = no% + 1 : alpha no% : top no%,430 : left no%,left(no%-1)+width(no%-1)+10 : caption no%,"Opérateurs:"
no% = no% + 1 : memo no% : top no%,450 : left no%,left(no%-1) : width no%,60 : height no%,200
  hmemoOperateurs% = handle(no%) : noOperateurs% = no%
no% = no% + 1 : alpha no% : top no%,430 : left no%,left(no%-1)+width(no%-1)+10 : caption no%,"Valeurs:"
no% = no% + 1 : memo no% : top no%,450 : left no%,left(no%-1) : width no%,200 : height no%,200
  hmemoValeurs% = handle(no%) : noValeurs% = no%
no% = no% + 1 : button no% : top no%,top(no%-1)+height(no%-1)/2-10 : left no%,left(no%-1)+width(no%-1)+10 : caption no%,"Query" : on_click no%,query
no% = no% + 1 : alpha no% : top no%,430 : left no%,left(no%-1)+width(no%-1)+10 : caption no%,"Collection:"
no% = no% + 1 : memo no% : top no%,450 : left no%,left(no%-1) : width no%,60 : height no%,200
  hmemoCollection% = handle(no%) : noCollection% = no%
 
item_add noOperateursPossibles%,"="
item_add noOperateursPossibles%,"<"
item_add noOperateursPossibles%,">"
item_add noOperateursPossibles%,"<>"
item_add noOperateursPossibles%,"<="
item_add noOperateursPossibles%,">="
 
dll_on "KGF.dll"

NomKBDD$ = "Test_de_KBDD"
PathKBDD$ = ".\" : ' ".\TestKBDD"
if dir_exists(PathKBDD$)=0 then dir_make PathKBDD$
 
end

creer:
  KBDD% = dll_call1("CreateKBDD",adr(NomKBDD$))
  IndexKBDD$ = "NomPrenom"
  res% = dll_call5("DefineIndexKBDD",KBDD%,adr(IndexKBDD$),2,1,80)
  IndexKBDD$ = "CodPost"
  res% = dll_call5("DefineIndexKBDD",KBDD%,adr(IndexKBDD$),1,169,5)
  IndexKBDD$ = "Ville"
  res% = dll_call5("DefineIndexKBDD",KBDD%,adr(IndexKBDD$),2,174,40)

  FieldKBDD$ = "Nom"
  res% = dll_call5("AddFieldForKDDB",KBDD%,adr(FieldKBDD$),2,1,40)
  FieldKBDD$ = "Prénom"
  res% = dll_call5("AddFieldForKDDB",KBDD%,adr(FieldKBDD$),2,41,40)
  FieldKBDD$ = "Naissance"
  res% = dll_call5("AddFieldForKDDB",KBDD%,adr(FieldKBDD$),3,81,8)
  FieldKBDD$ = "Adresse 1"
  res% = dll_call5("AddFieldForKDDB",KBDD%,adr(FieldKBDD$),2,89,40)
  FieldKBDD$ = "Adresse 2"
  res% = dll_call5("AddFieldForKDDB",KBDD%,adr(FieldKBDD$),2,129,40)
  FieldKBDD$ = "Codepostal"
  res% = dll_call5("AddFieldForKDDB",KBDD%,adr(FieldKBDD$),1,169,5)
  FieldKBDD$ = "Ville"
  res% = dll_call5("AddFieldForKDDB",KBDD%,adr(FieldKBDD$),2,174,40)
  FieldKBDD$ = "Téléphone"
  res% = dll_call5("AddFieldForKDDB",KBDD%,adr(FieldKBDD$),1,214,10)
  FieldKBDD$ = "Mail"
  res% = dll_call5("AddFieldForKDDB",KBDD%,adr(FieldKBDD$),2,224,40)
 
  res% = dll_call2("GetInfoKBDD",KBDD%,hmemoStatut%)
  res% = dll_call2("GetCollectionsKBDD",KBDD%,hmemoCollections%)
  return
 
sauver:
  res% = dll_calL2("SaveKBDD",KBDD%,adr(PathKBDD$))
  return
 
charger:
  res% = dll_calL2("LoadKBDD",KBDD%,adr(PathKBDD$)) 
  res% = dll_call2("GetInfoKBDD",KBDD%,hmemoStatut%)
  res% = dll_call2("GetCollectionsKBDD",KBDD%,hmemoCollections%)
  return
 
ajouter:
  RecordKBDD$ = ""
  RecordKBDD$ = RecordKBDD$ + left$(text$(1001)+blanc$,40) : ' nom
  RecordKBDD$ = RecordKBDD$ + left$(text$(1002)+blanc$,40) : ' prénom
  RecordKBDD$ = RecordKBDD$ + left$(text$(1003)+blanc$,8)  : ' date de naissance
  RecordKBDD$ = RecordKBDD$ + left$(text$(1004)+blanc$,40) : ' adresse ligne 1
  RecordKBDD$ = RecordKBDD$ + left$(text$(1005)+blanc$,40) : ' adresse ligne 2
  RecordKBDD$ = RecordKBDD$ + left$(text$(1006)+blanc$,5)  : ' code postal
  RecordKBDD$ = RecordKBDD$ + left$(text$(1007)+blanc$,40) : ' ville
  RecordKBDD$ = RecordKBDD$ + left$(text$(1008)+blanc$,10) : ' téléphone
  RecordKBDD$ = RecordKBDD$ + left$(text$(1009)+blanc$,40) : ' mail
  ID% = dll_call2("AddRecordKBDD",KBDD%,adr(RecordKBDD$))
  res% = dll_call2("GetInfoKBDD",KBDD%,hmemoStatut%)
  res% = dll_call2("GetCollectionsKBDD",KBDD%,hmemoCollections%)
  position noID%,ID%
  return 
 
lireID:
  ID% = dll_call3("ReadByIdKBDD",KBDD%,position(noID%),adr(aRecord$))
  res% = dll_call2("GetInfoKBDD",KBDD%,hmemoStatut%)
  res% = dll_call2("GetCollectionsKBDD",KBDD%,hmemoCollections%)
  clear noResult%
  if ID%<0
    item_add noResult%,"Erreur e lecture ID="+str$(position(noID%))
  else
    s1$ = trim$(left$(aRecord$,40))
    s2$ = trim$(mid$(aRecord$,41,40))
    item_add noResult%,"ID="+str$(ID%)+": "+s1$+", "+s2$
    AfficherRecord()
  end_if
  return
 
lireNextID:
  position noID%,position(noID%)+1
  gosub LireID
  return

lirePrevID:
  if position(noID%)=0 then return
  position noID%,position(noID%)-1
  gosub LireID
  return
 
LireIndex0:
  cle$ =        left$(text$(1001)+blanc$,40) : ' nom
  cle$ = cle$ + left$(text$(1002)+blanc$,40) : ' prénom
  ID% = dll_call4("ReadByIndexKBDD",KBDD%,0,adr(cle$),adr(aRecord$))
  res% = dll_call2("GetInfoKBDD",KBDD%,hmemoStatut%)
  res% = dll_call2("GetCollectionsKBDD",KBDD%,hmemoCollections%)
  clear noResult%
  if ID%<0
    item_add noResult%,"Erreur e lecture Index 0 ="+cle$
  else
    s1$ = trim$(left$(aRecord$,40))
    s2$ = trim$(mid$(aRecord$,41,40))
    item_add noResult%,"ID="+str$(ID%)+": "+s1$+", "+s2$
    position noID%,ID%
    AfficherRecord()
  end_if
  return
 
LireIndex1:
  cle$ = left$(text$(1006)+blanc$,5)  : ' code postal
  ID% = dll_call4("ReadByIndexKBDD",KBDD%,1,adr(cle$),adr(aRecord$))
  res% = dll_call2("GetInfoKBDD",KBDD%,hmemoStatut%)
  res% = dll_call2("GetCollectionsKBDD",KBDD%,hmemoCollections%)
  clear noResult%
  if ID%<0
    item_add noResult%,"Erreur e lecture Index 1 ="+cle$
  else
    s1$ = trim$(left$(aRecord$,40))
    s2$ = trim$(mid$(aRecord$,41,40))
    item_add noResult%,"ID="+str$(ID%)+": "+s1$+", "+s2$
    position noID%,ID%
    AfficherRecord()
  end_if
  return

LireIndex2:
  cle$ = left$(text$(1007)+blanc$,40) : ' ville
  ID% = dll_call4("ReadByIndexKBDD",KBDD%,2,adr(cle$),adr(aRecord$))
  res% = dll_call2("GetInfoKBDD",KBDD%,hmemoStatut%)
  res% = dll_call2("GetCollectionsKBDD",KBDD%,hmemoCollections%)
  clear noResult%
  if ID%<0
    item_add noResult%,"Erreur en lecture Index 2 ="+cle$
  else
    s1$ = trim$(left$(aRecord$,40))
    s2$ = trim$(mid$(aRecord$,41,40))
    item_add noResult%,"ID="+str$(ID%)+": "+s1$+", "+s2$
    position noID%,ID%
    AfficherRecord()
  end_if
  return
 
precedent:
  ID% = dll_call2("ReadPreceedingIndexKBDD",KBDD%,adr(aRecord$))
  res% = dll_call2("GetInfoKBDD",KBDD%,hmemoStatut%)
  res% = dll_call2("GetCollectionsKBDD",KBDD%,hmemoCollections%)
  clear noResult%
  if ID%<0
    item_add noResult%,"Erreur en lecture précédent ="+cle$
  else
    s1$ = trim$(left$(aRecord$,40))
    s2$ = trim$(mid$(aRecord$,41,40))
    item_add noResult%,"ID="+str$(ID%)+": "+s1$+", "+s2$
    position noID%,ID%
    AfficherRecord()
  end_if
  return
 
suivant:
  ID% = dll_call2("ReadNextIndexKBDD",KBDD%,adr(aRecord$))
  res% = dll_call2("GetInfoKBDD",KBDD%,hmemoStatut%)
  res% = dll_call2("GetCollectionsKBDD",KBDD%,hmemoCollections%)
  clear noResult%
  if ID%<0
    item_add noResult%,"Erreur en lecture suivant ="+cle$
  else
    s1$ = trim$(left$(aRecord$,40))
    s2$ = trim$(mid$(aRecord$,41,40))
    item_add noResult%,"ID="+str$(ID%)+": "+s1$+", "+s2$
    position noID%,ID%
    AfficherRecord()
  end_if
  return

maj:
  RecordKBDD$ = ""
  RecordKBDD$ = RecordKBDD$ + left$(text$(1001)+blanc$,40) : ' nom
  RecordKBDD$ = RecordKBDD$ + left$(text$(1002)+blanc$,40) : ' prénom
  RecordKBDD$ = RecordKBDD$ + left$(text$(1003)+blanc$,8)  : ' date de naissance
  RecordKBDD$ = RecordKBDD$ + left$(text$(1004)+blanc$,40) : ' adresse ligne 1
  RecordKBDD$ = RecordKBDD$ + left$(text$(1005)+blanc$,40) : ' adresse ligne 2
  RecordKBDD$ = RecordKBDD$ + left$(text$(1006)+blanc$,5)  : ' code postal
  RecordKBDD$ = RecordKBDD$ + left$(text$(1007)+blanc$,40) : ' ville
  RecordKBDD$ = RecordKBDD$ + left$(text$(1008)+blanc$,10) : ' téléphone
  RecordKBDD$ = RecordKBDD$ + left$(text$(1009)+blanc$,40) : ' mail
  ID% = dll_call2("UpdateRecordKBDD",KBDD%,adr(RecordKBDD$))
  res% = dll_call2("GetInfoKBDD",KBDD%,hmemoStatut%)
  res% = dll_call2("GetCollectionsKBDD",KBDD%,hmemoCollections%)
  position noID%,ID%
  return

supprimer:
  ID% = dll_call2("DeleteRecordByIdKBDD",KBDD%,ID%)
  res% = dll_call2("GetInfoKBDD",KBDD%,hmemoStatut%)
  res% = dll_call2("GetCollectionsKBDD",KBDD%,hmemoCollections%)
  clear noResult%
  if ID%<0
    item_add noResult%,"Erreur en suppression"
  else
    s1$ = trim$(left$(aRecord$,40))
    s2$ = trim$(mid$(aRecord$,41,40))
    item_add noResult%,"ID="+str$(ID%)+": "+s1$+", "+s2$
    position noID%,ID%
  end_if
  return

restaurer:
  ID% = dll_call2("UndeleteRecordByIdKBDD",KBDD%,position(noID%))
  res% = dll_call2("GetInfoKBDD",KBDD%,hmemoStatut%)
  res% = dll_call2("GetCollectionsKBDD",KBDD%,hmemoCollections%)
  clear noResult%
  if ID%<0
    item_add noResult%,"Erreur en restauration"
  else
    s1$ = trim$(left$(aRecord$,40))
    s2$ = trim$(mid$(aRecord$,41,40))
    item_add noResult%,"ID="+str$(position(noID%))+": relire l'enregistrement !"
    position noID%,ID%
  end_if
  return
 
query:
  ' vérifier la cohérence des paramètres
  NomCollection$ = trim$(text$(NoNomCollection%))
  if NomCollection$="" then return
  if count(noChamps%)=0 then return
  if count(noChamps%)<>count(noOperateurs%) then return
  if count(noChamps%)<>count(noValeurs%) then return
  for i%=1 to count(noOperateurs%)
    ok% = 0
    for j%=1 to count(noOperateursPossibles%)
      if item_read$(noOperateurs%,i%)=item_read$(noOperateursPossibles%,j%) then ok% = 1
    next j%
    if ok% = 0 then return
  next i%

  ' créer la collection
  res% = dll_call2("CreateCollectionForKBDD",KBDD%,adr(NomCollection$))
  if res%<0 then message "Remplacement de la collection "+NomCollection$
  ' effectuer la requête
  res% = dll_call6("QueryCollectionForKBDD",KBDD%,adr(NomCollection$),hmemoChamps%,hmemoOperateurs%,hmemoValeurs%,hmemoCollection%)

  ' afficher le résultat               
  res% = dll_call2("GetInfoKBDD",KBDD%,hmemoStatut%)
  res% = dll_call2("GetCollectionsKBDD",KBDD%,hmemoCollections%)
  return

supprimercollection:
  NomCollection$ = trim$(text$(NoNomCollection%))
  res% = dll_call2("DeleteCollectionFromKDDB",KBDD%,adr(NomCollection$))
  res% = dll_call2("GetInfoKBDD",KBDD%,hmemoStatut%)
  res% = dll_call2("GetCollectionsKBDD",KBDD%,hmemoCollections%)
  return
 
SelectCollection:
  i% = dll_call1("GetActiveMemoLine",hmemoCollections%)
  if i%>0
    NomCollection$ = item_read$(noListeCollections%,i%)
    text noNomCollection%,NomCollection$
    res% = dll_call3("GetCollectionKBDD",KBDD%,adr(NomCollection$),hmemoCollection%)
    sQuery$ = string$(500," ")
    j% = dll_call4("GetCollectionQueryKBDD",KBDD%,adr(NomCollection$),0,0)
    clear noChamps%
    clear noOperateurs%
    clear noValeurs%
    for i%=1 to j%
      res% = dll_call4("GetCollectionQueryKBDD",KBDD%,adr(NomCollection$),i%,adr(sQuery$))
      AfficherQuery(sQuery$)
    next i%
  end_if
  return 
 
squeeze:
  res% = dll_call1("SqueezeKBDD",KBDD%)
  clear noResult%
  if res%<0
    item_add noResult%,"Erreur en compression"
  else
    res% = dll_call2("GetInfoKBDD",KBDD%,hmemoStatut%)
    res% = dll_call2("GetCollectionsKBDD",KBDD%,hmemoCollections%)
  end_if
  return
 
 

sub AfficherRecord()
'  Nom = 40 car.                Clé 0
'  Prénom = 40 car.              Clé 0
'  Date de naissance = 8 car.
'  Adresse = 2 x 40 car.
'  Code postal = 5 car.          Clé 1
'  Ville = 40 car.              Clé 2
'  Tél. = 10 car.               
'  Mail = 40 car.
  text 1001,trim$(left$(aRecord$,40))
  text 1002,trim$(mid$(aRecord$,41,40))
  text 1003,trim$(mid$(aRecord$,81,8))
  text 1004,trim$(mid$(aRecord$,89,40))
  text 1005,trim$(mid$(aRecord$,129,40))
  text 1006,trim$(mid$(aRecord$,169,5))
  text 1007,trim$(mid$(aRecord$,174,40))
  text 1008,trim$(mid$(aRecord$,214,10))
  text 1009,trim$(mid$(aRecord$,224,40))
end_sub


sub AfficherQuery(s$)
  dim_local p%, s1$
  s1$ = s$
  p% = instr(s1$,":")
  item_add noChamps%,left$(s1$,p%-1)
  s1$ = mid$(s1$,p%+1,len(s1$))
  p% = instr(s1$,":")
  item_add noOperateurs%,left$(s1$,p%-1)
  s1$ = mid$(s1$,p%+1,len(s1$))
  item_add noValeurs%,s1$
end_sub
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Minibug

Minibug


Nombre de messages : 4566
Age : 57
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyDim 28 Jan 2018 - 12:36

Salut Klaus !

Content de te retrouver sur le forum et félicitation pour ces nouvelles fonctions dans KGF ! cheers

Le principe d'une base de donnée en mémoire et astucieuse ! cela permet une mise en œuvre plus aisée.
Avec moins de fichiers, de dossiers, etc.

J'ai quelques idées dernière la tête... Il va falloir que je regarde ça !

Merci pour tout ce travail que tu fais Klaus. sunny
Je sais que c'est un plaisir pour toi, mais cela permet des avancés toujours nouvelles et surprenantes à Panoramic. Wink
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyDim 28 Jan 2018 - 13:01

Merci, Minibug !

Moi aussi, j'ai des idées concernant l'écolution de cette base. En fait, cette base est pensée pour être le socle de quelque chose de plus vaste. La notion des collections est déjà une amorce. C'est encore trop restrictif, et il faudra encore travailler sur les critères des requêtes. Mais au-delà de cela, comme on peut avoir plusieurs bases simultanément, je travaille sur un moyen d'automatiser les liens entre les bases. Encore un gros travail de conception en cours.

Faut tout de même rappeler un point important. Contrairement à des bases de données commerciales, et en particulier celles qui sont dans le cloud, KBDD n'est en aucun cas multi-utilisateur ! Même pas pour deux programmes exécutant simultanément sur le même ordinateur. Ceci est exclu de par sa conception même - comme elle est entièrement gérée en mémoire, la mémoire ne peut pas être partagée entre plusieurs programmes.

A moins que - il y a toujours un moyen d'y arriver, néanmoins. La majeure partie des bases commerciales fonctionnent sur le principe d'une structure client/serveur. On peut bien sûr faire cela avec Panoramic/KGF.dll également. Il suffit d'avoir un programme Panoramic implémentant le serveur, et les programmes client communiquent avec le serveur au lioeu d'accéder la base directement. Techniquement, c'est parfaitement faisable et KGF.dll contient déjà les outils pour cela. Mais je pense que cela dépasse largement l'utilisation que la majorité des Panoramiciens pourrait faire de KBDD.

Pour ma part, je me concentrerai sur l'évolution vers des liens automatisés entre plusieurs bases, même en cascade à plusieurs niveaux. Un joli défi...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Minibug

Minibug


Nombre de messages : 4566
Age : 57
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyDim 28 Jan 2018 - 13:26

Hummm, je vois que tu es sur un 'gros coup' et tu as de la suite dans les idées. C'est bien !

Je te souhaite bon courage pour la suite... Wink
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyDim 28 Jan 2018 - 21:14

Merci !

Je suis en train de mettre au piont un système qui permet de relier une base KBDD à plusieurs autres, via leurs indexes. Et ainsi, une lecture dans une base peut entraîner de façon transparente plusieurs lectures dans d'autres bases et même éventuellement des créations d'enregistrements. Et les lectures dans les bases reliées pourront à leur tour provoquer des lectures dans des bases qui leur sont associées, etc. Le système n'est pas limité. Ainsi, en accédant un seul élément, on aura automatiquement en mémoire absolument tout ce qui est relié, même à plusieurs niveaux. Là, on s'approche un peu de ce que j'avais "rêvé" en peu, comme accès global à l'information.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé





KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 Empty

Revenir en haut Aller en bas
 
KGF_dll - nouvelles versions
Revenir en haut 
Page 25 sur 40Aller à la page : Précédent  1 ... 14 ... 24, 25, 26 ... 32 ... 40  Suivant
 Sujets similaires
-
» KGF_dll - nouvelles versions
» KGF_dll - nouvelles versions
» KGF_dll - nouvelles versions
» Synedit_Editor - nouvelles versions
» Nouvelles DLL bonus

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: Activité des sites créés par les Panoramiciens. :: Le site de Klaus-
Sauter vers: