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)
ISAM toujours ISAM - Page 3 Emptypar leclode Aujourd'hui à 17:59

» trop de fichiers en cours
ISAM toujours ISAM - Page 3 Emptypar Marc Aujourd'hui à 11:42

» Bataille navale SM
ISAM toujours ISAM - Page 3 Emptypar jjn4 Hier à 17:39

» Une calculatrice en une ligne de programme
ISAM toujours ISAM - Page 3 Emptypar jean_debord Hier à 8:01

» Gestion d'un système client-serveur.
ISAM toujours ISAM - Page 3 Emptypar Pedro Jeu 25 Avr 2024 - 19:31

» Les maths du crocodile
ISAM toujours ISAM - Page 3 Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

» Naissance de Crocodile Basic
ISAM toujours ISAM - Page 3 Emptypar jean_debord Jeu 25 Avr 2024 - 8:45

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

» Dessine-moi une galaxie
ISAM toujours ISAM - Page 3 Emptypar jjn4 Lun 22 Avr 2024 - 13:47

» Erreur END_SUB
ISAM toujours ISAM - Page 3 Emptypar jjn4 Lun 22 Avr 2024 - 13:43

» Bug sur DIM_LOCAL ?
ISAM toujours ISAM - Page 3 Emptypar papydall Dim 21 Avr 2024 - 23:30

» 2D_fill_color(résolu)
ISAM toujours ISAM - Page 3 Emptypar leclode Sam 20 Avr 2024 - 8:32

» Consommation gaz électricité
ISAM toujours ISAM - Page 3 Emptypar leclode Mer 17 Avr 2024 - 11:07

» on_key_down (résolu)
ISAM toujours ISAM - Page 3 Emptypar leclode Mar 16 Avr 2024 - 11:01

» Sous-programme(résolu)
ISAM toujours ISAM - Page 3 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 du moment :
Pokémon EV06 : où acheter le Bundle Lot ...
Voir le deal

 

 ISAM toujours ISAM

Aller en bas 
+2
Klaus
Yannick
6 participants
Aller à la page : Précédent  1, 2, 3
AuteurMessage
Marc

Marc


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

ISAM toujours ISAM - Page 3 Empty
MessageSujet: Re: ISAM toujours ISAM   ISAM toujours ISAM - Page 3 EmptyMer 24 Jan 2024 - 0:21

Bonsoir Lepetitmarocain,

ISAM n'est pas opérationnel pour l'instant.

Comme alternative, KGF.DLL intègre SQLite. Peut-être pourrais-tu l'utiliser ?

Voici le programme de démonstration de Klaus :
Code:
' Contacts_avec_SQLite.bas

' Ce programme montre la gestion d'une base de données de contacts
' à l'aide de SQLite de KGF.dll.

' SQLite3 est trouvé par défaut dans le dossier C:\SQLite367.
' Si ce dossier n'existe pas il sera créé automatiquement.
' Un bouton, actif au lancement du programme, permet de changer ce dossier.

' La version par défaut de SQLite2 est la version V.3.6.7.
' Un bouton, actif au lancement du programme, permet de changer cette version,
' par exemple pour la version V3.36 téléchargeable ici: https://sqlite.org/download.html

' La version par défaut est embarquée dans KGF.dll.
' Une éventuelle autre version devra être téléchargée séparément et copiée dans de dossier de SQLite3.
' Il est de la responsabilité de l'tilisateur de télécharger une éventuelle autre version et
' de la placer dans le dossier de SQLite3 avant le lancement du programme.

' Si le dossier choisi pour SQLite3 ne contient pas cette version de SQLite3,
' alors SQLite3 sera exrait de KGF.dll et placé dans ce dossier et la version par défaut
' sera utilisée, même si une autre version a été demandée.

' Par défaut, les contacts sont mémorisés dans un fichier MesContacts.db dans le dossier DIR_CURRENT$.
' Un bouton, actif au lancement du programme, permet de changer le nom et le chemin d'accès au fichier.
' Si ce fichier n'existe pas, il sera créé et formatté comme base SQLite3 vide.

' La base de données des contacts cntient les tables suivantes:
'  Contacts      liste des contacts

' Chaque contact est mémorisé sous forme d'un enregistrement avec le format suivant:
'  ID        numéro unique identifiant le contact (attribué automatiquement de façon chronologique)
'  Nom      nom de famille
'  Prénom    prénom(s)
'  Numero    numéro de rue
'  Bis      complément (bis, ter, ...)
'  Adresse1  première ligne d'adresse
'  Adresse2  seconde ligne d'adresse
'  Codepost  code postal
'  Ville    ville
'  Pays      paye
'  Portable  numéro de réléphone portable
'  Fixe      numéro de téléphone fixe
'  Mail      adresse mail
' Seul le champ Nom est obligatoire.
' Les autres champs peuvent rester vides, mais il est conseillé de remplir Prenom et Portable.

label close0, select_folder, select_version, select_base, demarrer, quitter
label select_contact, ajouter_contact, valider, modifier_contact, supprimer_contact
label trier_contact, filtrer_contact, vider_filtre, exporter_contacts, select_fichier

dim res%, racine$, s$, s1$, filter$, i%, err%, Colonnes$(14), n_contacts%, SQL%, action%, index%, n_champs%
dim table$
  table$ = "Contacts"

' numaros des objets du panel 200 (liste des contacts)
dim n_list%
' numéros des objets du panel 300 (détails d'un contact)
dim n_nom%, n_prenom%, n_numero%, n_bis%, n_adresse1%, n_adresse2%, n_codepost%, n_ville%, n_pays%
dim n_portable%, n_fixe%, n_mail%
' numéros des objets du panel 400 (tri)
dim n_tri1%, n_tri2%, n_tri3%
' numéros des objets du panel 500 (filtre) pour la colonne de gauche
dim nf1_nom%, nf1_prenom%, nf1_numero%, nf1_bis%, nf1_adresse1%, nf1_adresse2%, nf1_codepost%
dim nf1_ville%, nf1_pays%, nf1_portable%, nf1_fixe%, nf1_mail%
' numéros des objets du panel 500 (filtre) pour la colonne de droite
dim nf2_nom%, nf2_prenom%, nf2_numero%, nf2_bis%, nf2_adresse1%, nf2_adresse2%, nf2_codepost%
dim nf2_ville%, nf2_pays%, nf2_portable%, nf2_fixe%, nf2_mail%
' numéros des objets du pabel 600 (export/import)
dim n_nomfichier%, n_exporter%, n_importer%
' variables contenant les critères de tri et de sélection en vigueur
dim crit$, where$
  crit$ = " ORDER BY ID"
  where$ = ""
' variables temporaires contenant les champs d'un contact
dim ID_contact$
dim nom_contact$, prenom_contact$, numero_contact$, bis_contact$, adresse1_contact$, adresse2_contact$
dim codepost_contact$, ville_contact$, pays_contact$, portable_contact$, fixe_contact$, mail_contact$

dll_on "KGF.dll"
                                          
creer_GUI()

end

' **************************************
' **************************************
' ********** les SUBs de service *******
' **************************************
' **************************************

sub creer_GUI()
  full_space 0
  on_close 0,close0
  caption 0,"Gestion de contacts avec SQLite3"

  alpha 1 : top 1,10 : left 1,10 : caption 1,"Dossier SQLite3:"
  edit 2 : top 2,10 : left 2,100 : width 2,300 : inactive 2
    text 2,"C:\SQLite367"
  button 3 : top 3,10 : left 3,left(2)+width(2) : width 3,30 : font_bold 3 : caption 3,"..."
    on_click 3,select_folder

  alpha 4 : top 4,10 : left 4,left(3) + 70 : caption 4,"Version:"
  edit 5 : top 5,10 : left 5,left(4)+50 : width 5,100 : inactive 5
    text 5,"SQLite367.dll"
  button 6 : top 6,10 : left 6,left(5)+width(5) : width 6,30 : font_bold 6 : caption 6,"..."
    on_click 6,select_version
 
  alpha 7 : top 7,10 : left 7,left(6) + 70 : caption 7,"Base de données:"
  edit 8 : top 8,10 : left 8,left(7)+100 : width 8,400 : inactive 8
    text 8,dir_current$+"\MesContacts.db"
  button 9 : top 9,10 : left 9,left(8)+width(8) : width 9,30 : font_bold 9 : caption 9,"..."
    on_click 9,select_base
 
  button 10 : top 10,40 : left 10,300 : width 10,width_client(0)-600 : caption 10,"Démarrer"
    font_bold 10 : font_size 10,16 : on_click 10,demarrer : inactive 10
  button 11 : top 11,40 : left 11,300 : width 11,width_client(0)-600 : caption 11,"Quitter"
    font_bold 11 : font_size 11,16 : on_click 11,quitter : hide 11


  memo 1001 : hide 1001 : bar_both 1001
  memo 1011 : hide 1011 : bar_both 1011

  colonnes$(1) = "ID"
  colonnes$(2) = "Nom"
  colonnes$(3) = "Prenom"
  colonnes$(4) = "Numero"
  colonnes$(5) = "Bis"
  colonnes$(6) = "Adresse1"
  colonnes$(7) = "Adresse2"
  colonnes$(8) = "Codepost"
  colonnes$(9) = "Ville"
  colonnes$(10) = "Pays"
  colonnes$(11) = "Portable"
  colonnes$(12) = "Fixe"
  colonnes$(13) = "Mail"
 
  ' panel des boutons de commande
  panel 100 : hide 100 : top 100,70 : left 100,0 : width 100,width_client(0) : height 100,40
    color 100,255,255,0
  button 101 : parent 101,100 : top 101,5 : left 101,10 : width 101,120 : caption 101,"Ajouter"
    font_bold 101 : on_click 101,ajouter_contact
  button 102 : parent 102,100 : top 102,5 : left 102,left(101)+width(101)+20 : width 102,120
    caption 102,"Modifier" : font_bold 102 : on_click 102,modifier_contact
  button 103 : parent 103,100 : top 103,5 : left 103,left(102)+width(102)+20 : width 103,120
    caption 103,"Supprimer" : font_bold 103 : on_click 103,supprimer_contact
  button 104 : parent 104,100 : top 104,5 : left 104,left(103)+width(103)+20 : width 104,120
    caption 104,"Trier" : font_bold 104 : on_click 104,trier_contact
  button 105 : parent 105,100 : top 105,5 : left 105,left(104)+width(104)+20 : width 105,120
    caption 105,"Filtrer" : font_bold 105 : on_click 105,filtrer_contact
  button 106 : parent 106,100 : top 106,5 : left 106,left(105)+width(105)+20 : width 106,180
    caption 106,"Exporter / Importer" : font_bold 106 : on_click 106,exporter_contacts
  
  ' panel des données
  panel 200 : hide 200 : top 200,110 : left 200,0 : width 200,width(100) : height 200,height_client(0) - top(200)

  list 201 : parent 201,200 : top 201,10 : left 201,10 : width 201,200 : height 201,height_client(200)-20
    on_click 201,select_contact
    n_list% = 201
 
  ' panel des champs d'un contact
  panel 300 : hide 300 : parent 300,200 : top 300,10 : left 300,left(201)+width(201)+30
    width 300,width_client(200)-left(300)-10 : height 300,height(201) : color 300,255,95,255
 
  alpha 301 : parent 301,300 : left 301,40 : top 301,80 : font_size 301,10 : caption 301,"Nom:"
    edit 302 : parent 302,300 : left 302,150 : top 302,top(301) : width 302,300
    n_nom% = 302
  alpha 303 : parent 303,300 : left 303,40 : top 303,top(301)+30 : font_size 303,10 : caption 303,"Prénom:"
    edit 304 : parent 304,300 : left 304,150 : top 304,top(303) : width 304,300
    n_prenom% = 304
  alpha 305 : parent 305,300 : left 305,40 : top 305,top(303)+50 : font_size 305,10 : caption 305,"Adresse:"
    edit 306 : parent 306,300 : left 306,150 : top 306,top(305) : width 306,40
    n_numero% = 306
    combo 307 : parent 307,300 : left 307,left(306)+width(306)+20 : top 307,top(305) : width 307,60
      item_add 307,""
      item_add 307,"Bis"
      item_add 307,"Ter"
      item_add 307,"Quater"
      res% = dll_call2("SelectComboBoxItem",handle(307),1)
      n_bis% = 307
    edit 308 : parent 308,300 : left 308,left(307)+width(307)+20 : top 308,top(307) : width 308,300
    n_adresse1% = 308
    edit 309 : parent 309,300 : left 309,left(308) : top 309,top(308)+30 : width 309,300
    n_adresse2% = 309
  alpha 310 : parent 310,300 : left 310,40 : top 310,top(309)+30 : font_size 310,10 : caption 310,"Ville:"
    edit 311 : parent 311,300 : left 311,150 : top 311,top(310) : width 311,40
    n_codepost% = 311
    edit 312 : parent 312,300 : left 312,left(311)+width(311)+20 : top 312,top(310) : width 312,300
    n_ville% = 312
  alpha 313 : parent 313,300 : left 313,40 : top 313,top(311)+30 : font_size 313,10 : caption 313,"Pays:"
    edit 314 : parent 314,300 : left 314,left(312) : top 314,top(311)+30 : width 314,300
    n_pays% = 314
  alpha 315 : parent 315,300 : left 315,40 : top 315,top(314)+50 : font_size 315,10 : caption 315,"Portable:"
    edit 316 : parent 316,300 : left 316,150 : top 316,top(315) : width 316,100
    n_portable% = 316
  alpha 317 : parent 317,300 : left 317,40 : top 317,top(316)+30 : font_size 317,10 : caption 317,"Fixe:"
    edit 318 : parent 318,300 : left 318,150 : top 318,top(317) : width 318,100
    n_fixe% = 318
  alpha 319 : parent 319,300 : left 319,40 : top 319,top(318)+30 : font_size 319,10 : caption 319,"Mail:"
    edit 320 : parent 320,300 : left 320,150 : top 320,top(319) : width 320,300
    n_mail% = 320

  alpha 330 : parent 330,300 : top 330,20 : left 330,150 : font_size 330,16 : font_bold 330
  button 331 : parent 331,300 : top 331,top(320)+50 : left 331,150 : width 331,300 : caption 331,"Valider"
    font_bold 331 : font_size 331,12 : on_click 331,valider
      
  ' panel des critères de tri
  panel 400 : hide 400 : parent 400,200 : top 400,10 : left 400,left(201)+width(201)+30
    width 400,width_client(200)-left(400)-10 : height 400,height(201) : color 400,255,95,255
  
  alpha 401 : parent 401,400 : top 401,20 : left 401,150 : font_size 401,16 : font_bold 401
    caption 401,"Critères de tri"
  
  alpha 402 : parent 402,400 : left 402,20 : top 402,80 : font_size 402,12 : caption 402,"Trier par:"
 
  combo 403 : parent 403,400 : left 403,150 : top 403,top(402) : width 403,80
    n_tri1% = 403 : charger_criteres_tri(403,2)

  combo 404 : parent 404,400 : left 404,left(403)+width(403)+20 : top 404,top(402) : width 404,80
    n_tri2% = 404 : charger_criteres_tri(404,3)
  
  combo 405 : parent 405,400 : left 405,left(404)+width(404)+20 : top 405,top(402) : width 405,80
    n_tri3% = 405 : charger_criteres_tri(405,1)

  button 431 : parent 431,400 : top 431,top(404)+50 : left 431,150 : width 431,300 : caption 431,"Valider"
    font_bold 431 : font_size 431,12 : on_click 431,valider

  ' panel des critères de filtrage
  panel 500 : hide 500 : parent 500,200 : top 500,10 : left 500,left(201)+width(201)+30
    width 500,width_client(200)-left(500)-10 : height 500,height(201) : color 500,255,95,255
  
  alpha 501 : parent 501,500 : left 501,20 : top 501,80 : font_size 501,10 : caption 501,"Nom:"
    edit 502 : parent 502,500 : left 502,100 : top 502,top(501) : width 502,300
    nf1_nom% = 502      
  alpha 503 : parent 503,500 : left 503,20 : top 503,top(501)+30 : font_size 503,10 : caption 503,"Prénom:"
    edit 504 : parent 504,500 : left 504,100 : top 504,top(503) : width 504,300
    nf1_prenom% = 504
  alpha 505 : parent 505,500 : left 505,20 : top 505,top(503)+50 : font_size 505,10 : caption 505,"Adresse:"
    edit 506 : parent 506,500 : left 506,100 : top 506,top(505) : width 506,40
    nf1_numero% = 506
    combo 507 : parent 507,500 : left 507,left(506)+width(506)+20 : top 507,top(505) : width 507,60
      item_add 507,""
      item_add 507,"Bis"
      item_add 507,"Ter"
      item_add 507,"Quater"
      res% = dll_call2("SelectComboBoxItem",handle(507),1)
      nf1_bis% = 507
    edit 508 : parent 508,500 : left 508,left(507)+width(507)+20 : top 508,top(507) : width 508,300
    nf1_adresse1% = 508
    edit 509 : parent 509,500 : left 509,left(508) : top 509,top(508)+30 : width 509,300
    nf1_adresse2% = 509
  alpha 510 : parent 510,500 : left 510,20 : top 510,top(509)+30 : font_size 510,10 : caption 510,"Ville:"
    edit 511 : parent 511,500 : left 511,100 : top 511,top(510) : width 511,40
    nf1_codepost% = 511
    edit 512 : parent 512,500 : left 512,left(511)+width(511)+20 : top 512,top(510) : width 512,300
    nf1_ville% = 512
  alpha 513 : parent 513,500 : left 513,20 : top 513,top(511)+30 : font_size 513,10 : caption 513,"Pays:"
    edit 514 : parent 514,500 : left 514,left(512) : top 514,top(511)+30 : width 514,300
    nf1_pays% = 514
  alpha 515 : parent 515,500 : left 515,20 : top 515,top(514)+50 : font_size 515,10 : caption 515,"Portable:"
    edit 516 : parent 516,500 : left 516,100 : top 516,top(515) : width 516,100
    nf1_portable% = 516
  alpha 517 : parent 517,500 : left 517,20 : top 517,top(516)+30 : font_size 517,10 : caption 517,"Fixe:"
    edit 518 : parent 518,500 : left 518,100 : top 518,top(517) : width 518,100
    nf1_fixe% = 518
  alpha 519 : parent 519,500 : left 519,20 : top 519,top(518)+30 : font_size 519,10 : caption 519,"Mail:"
    edit 520 : parent 520,500 : left 520,100 : top 520,top(519) : width 520,300
    nf1_mail% = 520
 
    edit 552 : parent 552,500 : left 552,570 : top 552,top(501) : width 552,300
    nf2_nom% = 552
    edit 554 : parent 554,500 : left 554,left(552) : top 554,top(503) : width 554,300
    nf2_prenom% = 554
    edit 556 : parent 556,500 : left 556,left(552) : top 556,top(505) : width 556,40
    nf2_numero% = 556
    combo 557 : parent 557,500 : left 557,left(556)+width(556)+20 : top 557,top(505) : width 557,60
      item_add 557,""
      item_add 557,"Bis"
      item_add 557,"Ter"
      item_add 557,"Quater"
      res% = dll_call2("SelectComboBoxItem",handle(557),1)
      nf2_bis% = 557
    edit 558 : parent 558,500 : left 558,left(557)+width(557)+20 : top 558,top(507) : width 558,300
    nf2_adresse1% = 558
    edit 559 : parent 559,500 : left 559,left(558) : top 559,top(558)+30 : width 559,300
    nf2_adresse2% = 559
    edit 561 : parent 561,500 : left 561,left(556) : top 561,top(510) : width 561,40
    nf2_codepost% = 561
    edit 562 : parent 562,500 : left 562,left(561)+width(561)+20 : top 562,top(561) : width 562,300
    nf2_ville% = 562
    edit 564 : parent 564,500 : left 564,left(562) : top 564,top(511)+30 : width 564,300
    nf2_pays% = 564
    edit 566 : parent 566,500 : left 566,left(561) : top 566,top(515) : width 566,100
    nf2_portable% = 566
    edit 568 : parent 568,500 : left 568,left(566) : top 568,top(517) : width 568,100
    nf2_fixe% = 568
    edit 570 : parent 570,500 : left 570,left(568) : top 570,top(519) : width 570,300
    nf2_mail% = 570
 
  alpha 530 : parent 530,500 : top 530,20 : left 530,150 : font_size 530,16 : font_bold 530
    caption 530,"Critères de filtrage"

  button 532 : parent 532,500 : top 532,top(520)+50 : left 532,420 : width 532,300 : caption 532,"Vider le filtre"
    font_bold 532 : font_size 532,12 : on_click 532,vider_filtre
  button 531 : parent 531,500 : top 531,top(532)+50 : left 531,420 : width 531,300 : caption 531,"Valider"
    font_bold 531 : font_size 531,12 : on_click 531,valider
  
  alpha 590 : parent 590,500 : top 590,top(532) : left 590,20
    s$ =                        "Les champs non vides de la colonne de gauche sont des critères de sélection."
    s$ = s$ + chr$(13)+chr$(10)+"Les champs peuvent contenir le caractère "+chr$(34)+"%"+chr$(34)+"."
    s$ = s$ +                  " C'est un joker."
    s$ = s$ + chr$(13)+chr$(10)+"Si la colonne de gauche est utilisée seule, on filtre sur une égalité."
    s$ = s$ + chr$(13)+chr$(10)+"L'utilisation des deux colones pour une même ligne définit une fourchette."
    s$ = s$ + chr$(13)+chr$(10)+"La colonne de droite est ignorée si celle de gauche n'est pas renseignée."
    caption 590,s$
  
  ' panel des exports / imports
  panel 600 : hide 600 : parent 600,200 : top 600,10 : left 600,left(201)+width(201)+30
    width 600,width_client(200)-left(600)-10 : height 600,height(201) : color 600,255,95,255
  
  alpha 601 : parent 601,600 : top 601,20 : left 601,150 : font_size 601,16 : font_bold 601
    caption 601,"Export / Import de contacts"
  
  alpha 604 : parent 604,600 : top 604,top(601)+50 : left 604,20 : font_size 604,10
    caption 604,"Fichier CSV:"
  edit 605 : parent 605,600 : top 605,top(604) : left 605,150 : width 605,300
    n_nomfichier% = 605
  button 606 : parent 606,600 : top 606,top(605) : left 606,left(605)+width(605) : width 606,30
    font_bold 606 : caption 606,"..." : on_click 606,select_fichier
  container_option 607 : parent 607,600 : top 607,top(606)+40 : left 607,150 : width 607,300
    height 607,50 : caption 607,"Opération"
  option 608 : parent 608,607 : top 608,20 : left 608,20 : caption 608,"Exporter"
  option 609 : parent 609,607 : top 609,20 : left 609,150 : caption 609,"Importer"
  n_exporter% = 608  
  n_importer% = 609  

  button 631 : parent 631,600 : top 631,top(607)+height(607)+50 : left 631,150 : width 631,300
    caption 631,"Valider" : font_bold 631 : font_size 631,12 : on_click 631,valider
  

  active 10
end_sub

sub charger_contacts()
  clear 201
  if n_contacts%>0
    ' charger la table dans le gridRequête SQL
    s$ = "SELECT * FROM Contacts "+where$+crit$+";"
 
    ' préparation de la requête: sélection des enregistrements de la table selon les critères
    res% = dll_call2("CompileSQLite3Script",SQL%,adr(s$))
 
    ' Remplissage LIST par lecture ID, nom et prénom de chacun des enregistrements
    for i%=1 to n_contacts%
      res% = dll_call1("GetSQLite3NextRow",SQL%)
      if res%<0 then exit_for
      ' prendre le ID
      res% = dll_call2("GetSQLite3CellText",SQL%,1)
      s$ = text$(1001)+":  "
      ' prendre le nom
      res% = dll_call2("GetSQLite3CellText",SQL%,2)
      s$ = s$ + text$(1001)+", "
      ' prendre le prénom
      res% = dll_call2("GetSQLite3CellText",SQL%,3)
      s$ = s$ + text$(1001)
      ' ajouter cela à la liste
      item_add 201,s$
    next i%
  
    ' finaliser la requête
    res% = dll_call1("FinalizeSQLite3Request",SQL%)    
  end_if
 
end_sub

sub charger_variables()
  ' extrauire les données des champs du panel 300 et les charger dans les variables
  prenom_contact$ = trim$(text$(n_prenom%))
  numero_contact$ = trim$(text$(n_numero%))
  bis_contact$ = str$(item_index(n_bis%))
  adresse1_contact$ = trim$(text$(n_adresse1%))
  adresse2_contact$ = trim$(text$(n_adresse2%))
  codepost_contact$ = trim$(text$(n_codepost%))
  ville_contact$ = trim$(text$(n_ville%))
  pays_contact$ = trim$(text$(n_pays%))
  portable_contact$ = trim$(text$(n_portable%))
  fixe_contact$ = trim$(text$(n_fixe%))
  mail_contact$ = trim$(text$(n_mail%))
end_sub

sub valider_nouveau()
  ' valider l'ajout d'un nouveau contact
  nom_contact$ = trim$(text$(n_nom%))
  if nom_contact$=""        : ' ce champ est le seul chanmp obligatoire
    message "Le nom du contact manque !"
    exit_sub    
  end_if
 
  ' extraire les données du panel 300
  charger_variables()
 
  ' construire la requête SQL
  s$ = "INSERT INTO Contacts (Nom,Prenom,Numero,Bis,Adresse1,Adresse2,Codepost,ville,Pays,"
  s$ = s$ + "Portable,Fixe,Mail) VALUES ("
  s$ = s$ + "²"+nom_contact$+"²,²"+prenom_contact$+"²,²"+numero_contact$+"²,²"+bis_contact$
  s$ = s$ + "²,²"+adresse1_contact$+"²,²"+adresse2_contact$+"²,²"+codepost_contact$
  s$ = s$ + "²,²"+ville_contact$+"²,²"+pays_contact$
  s$ = s$ + "²,²"+portable_contact$+"²,²"+fixe_contact$+"²,²"+mail_contact$+"²);"
 
  ' exécuter la requête SQL
  res% = dll_call2("ExecuteSQLite3Script",SQL%,adr(s$))
  if res%<0
    message "Erreur dans requête SQL !"
    exit_sub
  end_if    
 
  ' réafficher la liste
  n_contacts% = n_contacts% + 1
  charger_contacts()
  message "Vous avez actuellement "+str$(n_contacts%)+" contacts."
 
end_sub

sub valider_modifier()
  if ID_contact$=""
    message "Aucun contact n'a été sélectionné !"
    exit_sub
  end_if
  if text$(n_nom%)=""
    message "Le nom du contat manque !"
    exit_sub
  end_if

  ' extraire les données du panel 300
  charger_variables()
 
  ' construire la requête SQL  e les exécuter les unes après les autrez
  s$ = "UPDATE Contacts SET Nom = ²"+nom_contact$+"² WHERE ID= ²"+id_contact$+"² ;"
  res% = dll_call2("ExecuteSQLite3Script",SQL%,adr(s$))
  s$ = "UPDATE Contacts SET Prenom = ²"+prenom_contact$+"² WHERE ID= ²"+id_contact$+"² ;"
  res% = dll_call2("ExecuteSQLite3Script",SQL%,adr(s$))
  s$ = "UPDATE Contacts SET Numero = ²"+numero_contact$+"² WHERE ID= ²"+id_contact$+"² ;"
  res% = dll_call2("ExecuteSQLite3Script",SQL%,adr(s$))
  s$ = "UPDATE Contacts SET Bis = ²"+bis_contact$+"² WHERE ID= ²"+id_contact$+"² ;"
  res% = dll_call2("ExecuteSQLite3Script",SQL%,adr(s$))
  s$ = "UPDATE Contacts SET Adresse1 = ²"+adresse1_contact$+"² WHERE ID= ²"+id_contact$+"² ;"
  res% = dll_call2("ExecuteSQLite3Script",SQL%,adr(s$))
  s$ = "UPDATE Contacts SET Adresse2 = ²"+adresse2_contact$+"² WHERE ID= ²"+id_contact$+"² ;"
  res% = dll_call2("ExecuteSQLite3Script",SQL%,adr(s$))
  s$ = "UPDATE Contacts SET Codepost = ²"+codepost_contact$+"² WHERE ID= ²"+id_contact$+"² ;"
  res% = dll_call2("ExecuteSQLite3Script",SQL%,adr(s$))
  s$ = "UPDATE Contacts SET Ville = ²"+ville_contact$+"² WHERE ID= ²"+id_contact$+"² ;"
  res% = dll_call2("ExecuteSQLite3Script",SQL%,adr(s$))
  s$ = "UPDATE Contacts SET Pays = ²"+pays_contact$+"² WHERE ID= ²"+id_contact$+"² ;"
  res% = dll_call2("ExecuteSQLite3Script",SQL%,adr(s$))
  s$ = "UPDATE Contacts SET Portable = ²"+portable_contact$+"² WHERE ID= ²"+id_contact$+"² ;"
  res% = dll_call2("ExecuteSQLite3Script",SQL%,adr(s$))
  s$ = "UPDATE Contacts SET Fixe = ²"+fixe_contact$+"² WHERE ID= ²"+id_contact$+"² ;"
  res% = dll_call2("ExecuteSQLite3Script",SQL%,adr(s$))
  s$ = "UPDATE Contacts SET Mail = ²"+mail_contact$+"² WHERE ID= ²"+id_contact$+"² ;"
  res% = dll_call2("ExecuteSQLite3Script",SQL%,adr(s$))
 
  charger_contacts()
  ID_contact$ = ""
end_sub

sub valider_supprimer()
  if ID_contact$=""
    message "Aucun contact n'a été sélectionné !"
    exit_sub
  end_if
  if message_confirmation_yes_no("Voulez-vous vraiment supprimer "+item_read$(201,item_index(201))+" ?")<>1 then exit_sub

  ' préparer la requête SQL
  s$ = "DELETE FROM ²Contacts² WHERE Id="+ID_contact$

  ' exécuter le script
  res% = dll_call2("ExecuteSQLite3Script",SQL%,adr(s$))
  
  ' réafficher la liste
  n_contacts% = n_contacts% - 1
  charger_contacts()
  message "Vous avez actuellement "+str$(n_contacts%)+" contacts."
end_sub

sub trier_contact()
  dim_local t1%, t2%, t3%
  if n_contacts%<1
    message "Il n'y a rien à trier !"
    exit_sub
  end_if
  t1% = item_index(n_tri1%)
  t2% = item_index(n_tri2%)
  t3% = item_index(n_tri3%)
  if t2%=t1% then t2% = 0
  if t3%=t1% then t3% = 0
  if t3%=t2% then t3% = 0
 
  ' construire le critère de tri
  crit$ = " "+critere_de_tri$(t1%,t2%,t3%)
 
  ' réafficher la liste selon le tri demandé
  charger_contacts()
end_sub

fnc generer_where$(champ1%,champ2%,nom$)
  ' construire la clause WHERE pour un seul champ ou couple de champs
  dim_local champ$, st$
  ' SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000;
  ' SELECT * FROM COMPANY WHERE NAME LIKE 'Ki%';
  ' SELECT * FROM COMPANY WHERE AGE BETWEEN 25 AND 27;
  ' SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000;
  champ$ = text$(champ1%)
  st$ = ""
  if champ$<>""
    if instr(champ$,"%")>0
      st$ = " "+nom$+" LIKE ²"+champ$+"² AND"
    else
      if text$(champ2%)<>""
        st$ = " "+nom$+" BETWEEN ²"+champ$+"² AND ²"+text$(champ2%)+"² AND"
      else
        st$ = " "+nom$+" = ²"+champ$+"² AND"
      end_if
    end_if
  end_if
  result st$
end_fnc

sub filtrer_contact()
  if n_contacts%<1
    message "Il n'y a rien à filtrer !"
    exit_sub
  end_if
  ' construire la clause WHERE pour tous les champs
  where$ = ""
'  where$ = where$ + generer_where$(nf1_nom%,nf2_nom%,"Nom")
  s$ = generer_where$(nf1_nom%,nf2_nom%,"Nom")
  where$ = where$ + s$
  where$ = where$ + generer_where$(nf1_prenom%,nf2_prenom%,"Prenom")
  where$ = where$ + generer_where$(nf1_numero%,nf2_numero%,"Numero")
  where$ = where$ + generer_where$(nf1_bis%,nf2_bis%,"Bis")
  where$ = where$ + generer_where$(nf1_adresse1%,nf2_adresse1%,"Adresse1")
  where$ = where$ + generer_where$(nf1_adresse2%,nf2_adresse1%,"Adresse2")
  where$ = where$ + generer_where$(nf1_codepost%,nf2_codepost%,"Codepost")
  where$ = where$ + generer_where$(nf1_ville%,nf2_ville%,"Ville")
  where$ = where$ + generer_where$(nf1_pays%,nf2_pays%,"Pays")
  where$ = where$ + generer_where$(nf1_portable%,nf2_portable%,"Portable")
  where$ = where$ + generer_where$(nf1_fixe%,nf2_fixe%,"Fixe")
  where$ = where$ + generer_where$(nf1_mail%,nf2_mail%,"Mail")
  if where$<>"" then where$ = " WHERE ("+left$(where$,len(where$)-4)+")"
 
  ' réafficher la liste selon la sélection demandée
  charger_contacts()
end_sub

fnc critere_de_tri$(n1%,n2%,n3%)
  dim_local ct$
  ct$ = " ORDER BY " +critere_tri$(n1%)
  if n2%>0 then ct$ = ct$ + ", "+critere_tri$(n2%)
  if n3%>0 then ct$ = ct$ + ", "+critere_tri$(n3%)
  result ct$
end_fnc

sub exporter_contacts()
  if checked(n_exporter%)=1
    if count(201)=0
      message "Il n'y a rien à exporter !"
      exit_sub
    end_if
    s$ = trim$(text$(n_nomfichier%))
    if s$=""
      message "Le nom du fichier d'export manque !"
      exit_sub
    end_if
    if lower$(file_extract_extension$(s$))<>".csv"
      message "Ce n'est pas un fichier CSV !"
      exit_sub
    end_if
    if file_exists(s$)=1
      if message_confirmation_yes_no("Ce fichier existe déjà ! Voulez-vous le remplacer ?")<>1 then exit_sub
    end_if
    cursor_hourglass 600
    cursor_hourglass 631
    res% = dll_call5("ExportSQLite3TableToCSV",SQL%,adr(table$),adr(s$),adr(where$),adr(crit$))
    cursor_default 600
    cursor_default 631
    message "Les contacts sélectionnés ont été exportés dans le fichier."
  else
    s$ = trim$(text$(n_nomfichier%))
    if s$=""
      message "Le nom du fichier d'import manque !"
      exit_sub
    end_if                                      
    if lower$(file_extract_extension$(s$))<>".csv"
      message "Ce n'est pas un fichier CSV !"
      exit_sub
    end_if
    if file_exists(s$)=0
      message "Ce fichier n'existe pas !"
      exit_sub
    end_if
    cursor_hourglass 600
    cursor_hourglass 631
    res% = dll_call3("ImportSQLite3TableFromCSV",SQL%,adr(s$),1)
    if res%>=0 then n_contacts% = n_contacts% + res%
    ' réafficher la liste
    charger_contacts()
    cursor_default 600
    cursor_default 631
    s$ =      "Les contacts ont été importés du fichier."+chr$(13)+chr$(10)
    s$ = s$ + "Vous avez actuellement "+str$(n_contacts%)+" contacts."
    message s$
  end_if
end_sub


sub afficher_contact()
  ' récupérer les champs (sauf ID)
  res% = dll_call2("GetSQLite3CellText",SQL%,2)
  nom_contact$ = text$(1001)
  res% = dll_call2("GetSQLite3CellText",SQL%,3)
  prenom_contact$ = text$(1001)
  res% = dll_call2("GetSQLite3CellText",SQL%,4)
  numero_contact$ = text$(1001)
  res% = dll_call2("GetSQLite3CellText",SQL%,5)
  bis_contact$ = text$(1001)
  res% = dll_call2("GetSQLite3CellText",SQL%,6)
  adresse1_contact$ = text$(1001)
  res% = dll_call2("GetSQLite3CellText",SQL%,7)
  adresse2_contact$ = text$(1001)
  res% = dll_call2("GetSQLite3CellText",SQL%,8)
  codepost_contact$ = text$(1001)
  res% = dll_call2("GetSQLite3CellText",SQL%,9)
  ville_contact$ = text$(1001)
  res% = dll_call2("GetSQLite3CellText",SQL%,10)
  pays_contact$ = text$(1001)
  res% = dll_call2("GetSQLite3CellText",SQL%,11)
  portable_contact$ = text$(1001)
  res% = dll_call2("GetSQLite3CellText",SQL%,12)
  fixe_contact$ = text$(1001)
  res% = dll_call2("GetSQLite3CellText",SQL%,13)
  mail_contact$ = text$(1001)
 
  ' charger les champs de l'enregistrement trouvé dans le panel 300
  text n_nom%,nom_contact$
  text n_prenom%,prenom_contact$
  text n_numero%,numero_contact$
  i% = val(bis_contact$)
  res% = dll_call2("SelectComboBoxItem",handle(307),i%)
  text n_adresse1%,adresse1_contact$
  text n_adresse2%,adresse2_contact$
  text n_codepost%,codepost_contact$
  text n_ville%,ville_contact$
  text n_pays%,pays_contact$
  text n_portable%,portable_contact$
  text n_fixe%,fixe_contact$
  text n_mail%,mail_contact$
end_sub

sub charger_criteres_tri(n%, index%)
  item_add n%," "
  item_add n%,"Nom"
  item_add n%,"Prénom"
  item_add n%,"Adresse 1"
  item_add n%,"Adresse 2"
  item_add n%,"Code Postal"
  item_add n%,"Ville"
  item_add n%,"Pays"
  item_add n%,"Portable"
  item_add n%,"Fixe"
  item_add n%,"Mail"
  res% = dll_call2("SelectComboBoxItem",handle(n%),index%)
end_sub

fnc critere_tri$(n%)
  select n%
    case  1: result "ID"
    case  2: result "Nom"
    case  3: result "Prenom"
    case  4: result "Adresse1"
    case  5: result "Adresse2"
    case  6: result "Codepost"
    case  7: result "Ville"
    case  8: result "Pays"
    case  9: result "Portable"
    case 10: result "Fixe"
    case 11: result "Mail"
  end_select
end_fnc

' **************************************
' **************************************
' ********** les routines évnements ****
' **************************************
' **************************************

close0:
  SQL% = dll_call1("CloseSQLite3",SQL%)
  res% = dll_call0("ResetSQLite3")
  return

select_folder:
  racine$ = "C:\"
  s$ = string$(255," ")
  res% = dll_call4("FolderSelect",adr(racine$),adr(s$),0,1)
  if res%=1 then text 2,trim$(s$)
  return
 
select_version:
  racine$ = text$(2)
  filter$ = "*.dll|*.dll"
  s$ = string$(255," ")
  res% = dll_call4("FileOpen",adr(racine$),adr(filter$),adr(s$),0)
  if res%=1 then text 5,file_extract_name$(trim$(s$))
  return
 
select_base:
  racine$ = "C:\"
  filter$ = "*.db|*.db"
  s$ = string$(255," ")
  res% = dll_call4("FileOpen",adr(racine$),adr(filter$),adr(s$),0)
  text 8,trim$(s$)
  return

demarrer:
  ' changer le chemin vers le dossier SQLite3
  if active(3)=1
    s$ = text$(2)
    res% = dll_call1("SelectAlternativeSQLite3Path",adr(s$))
  end_if
  ' changer la version de SQLite3
  if active(6)=1
    s$ = text$(5)
    res% = dll_call1("SelectAlternativeSQLite3Version",adr(s$))
  end_if
 
  ' initialiser SQLite3
  if active(3)=1 then res% = dll_call0("InitializeSQLite3")
  inactive 3 : inactive 6 : inactive 9
 
  ' tester si la base de données existe. Si absente, on la crée.
  if file_exists(text$(8))=0
    if message_confirmation_yes_no("Base de données absente. Voulez-vous la créer ?")<>1
      active 9
      return
    end_if
    ' ici, on crée la base
    s$ = text$(8)
    SQL% = dll_call2("OpenSQLite3",adr(s$),handle(1001))
    if SQL%=0
      message "Erreur en création du fichier !"
      active 9
      return
    end_if
    clear 1011
    item_add 1011,"CREATE TABLE Contacts ([ID] INTEGER PRIMARY KEY,"
    item_add 1011," [Nom] VARCHAR (50), [Prenom] VARCHAR (50), [Numero] INTEGER,"
    item_add 1011," [Bis] VARCHAR (10), [Adresse1] VARCHAR (100), [Adresse2] VARCHAR (100),"
    item_add 1011," [Codepost] INTEGER, [Ville] VARCHAR (100), [Pays] VARCHAR (100),"
    item_add 1011," [Portable] INTEGER, [Fixe] INTEGER, [Mail] VARCHAR (30));"  
    res% = dll_call2("ExecuteSQLite3Script",SQL%,handle(1011))
' message text$(1011)+"res%="+str$(res%)
    if res%<0
      message "Erreur en création de la base de données !"
      active 9
      SQL% = dll_call1("CloseSQLite3",SQL%)
      return
    end_if
    n_contacts% = 0
    n_champs% = 13
  else
    ' ici, on ouvre la base et on vérifié quela structure correspond
    s$ = text$(8)
    SQL% = dll_call2("OpenSQLite3",adr(s$),handle(1001))
    if SQL%=0
      message "Ce fichier n'est pas une base SQLite3 valide :"
      active 9
      return
    end_if
    ' on charge la liste des tables
    res% = dll_call1("GetSQLite3TableNames",SQL%)
    if res%<>1
      message "Ce fichier n'est pas une base des contacts !"
      active 9
      SQL% = dll_call1("CloseSQLite3",SQL%)
      return
    end_if
    if item_read$(1001,1)<>"Contacts"
      message "Ce fichier n'est pas une base des contacts - tables non conformes !"
    message text$(1001)
      active 9
      SQL% = dll_call1("CloseSQLite3",SQL%)
      return
    end_if
    ' on carge la liste des colonnes de la table "Contacts"
    s$ = "Contacts"
    res% = dll_call2("GetSQLite3ColumnNames",SQL%,adr(s$))
    if res%<>13
      message "Ce fichier n'est pas une base des contacts - nombre des colonnes non conformes !"
      active 9
      SQL% = dll_call1("CloseSQLite3",SQL%)
      return
    end_if
    n_champs% = res%
    err% = 0
    for i%=1 to res%
      s$ = item_read$(1001,i%)
      if instr(s$,"["+Colonnes$(i%)+"]")=0 then err% = 1
    next i%
    if err%=1
      message "Ce fichier n'est pas une base des contacts - noms des colonnes non conformes !"
'  message text$(1001)
      active 9
      SQL% = dll_call1("CloseSQLite3",SQL%)
      return
    end_if
    s$ = "Contacts"
    n_contacts% = dll_call2("GetSQLite3RowCount",SQL%,adr(s$))
  end_if
  message "Vous avez actuellement "+str$(n_contacts%)+" contacts."
 
  ' charger la liste des contacts
  charger_contacts()
 
  ' afficher les données
  hide 10
  show 11
  show 100
  show 200

  return
 
quitter:
  gosub close0
  terminate    
 
select_contact:
  ' récupérer le ID du contact choisi
  index% = item_index(201)
  s$ = item_read$(201,index%)
  ID_contact$ = left$(s$,instr(s$,":")-1)
 
  ' requête SQL pour relire l'enregistrement du contact choisi par son ID
  s$ = "SELECT * FROM Contacts"
  s$ = s$ + " WHERE ((Contacts.ID) Like ²"+ID_contact$+"²)"
 
  ' préparation de la requête: sélection des enregistrements de la table selon les critères
  res% = dll_call2("CompileSQLite3Script",SQL%,adr(s$))
 
  ' pointer sur le premier (unique) contact trouvé
  res% = dll_call1("GetSQLite3NextRow",SQL%)
  if res%<0
    message "Contact non trouvé !"
    return
  end_if
 
  ' récupérer les champs (sauf ID) et les charger dans les champs du panel 300
  afficher_contact()
 
  ' finaliser la requête
  res% = dll_call1("FinalizeSQLite3Request",SQL%)    
  return

ajouter_contact:
  font_size 101,12
  font_size 102,8
  font_size 103,8
  font_size 104,8
  font_size 105,8
  font_size 106,8
  action% = 1
  caption 330,"Ajout d'un nouveau contact"
  show 300
  hide 400
  hide 500
  hide 600
  return
 
valider:
  select action%
    case 1 : ' ajout d'un nouveau contact
      valider_nouveau()
    case 2 : ' modifier un contact
      valider_modifier()
    case 3 : ' supprimer un contact
      valider_supprimer()
    case 4 : ' trier les contacts
      trier_contact()
    case 5 : ' filtrer les contacts
      filtrer_contact()
    case 6: ' exporter les contacts
      exporter_contacts()
  end_select
  return
 
modifier_contact:
  font_size 101,8
  font_size 102,12
  font_size 103,8
  font_size 104,8
  font_size 105,8
  font_size 106,8
  action% = 2
  caption 330,"Modification d'un contact"
  show 300
  hide 400
  hide 500
  hide 600
  return
 
supprimer_contact:
  font_size 101,8
  font_size 102,8
  font_size 103,12
  font_size 104,8
  font_size 105,8
  font_size 106,8
  action% = 3
  caption 330,"Suppression d'un contact"
  show 300
  hide 400
  hide 500
  hide 600
  return
 
trier_contact:
  font_size 101,8
  font_size 102,8
  font_size 103,8
  font_size 104,12
  font_size 105,8
  font_size 106,8
  action% = 4
  hide 300
  show 400
  hide 500
  hide 600
  return
 
filtrer_contact:
  font_size 101,8
  font_size 102,8
  font_size 103,8
  font_size 104,8
  font_size 105,12
  font_size 106,8
  action% = 5
  hide 300
  hide 400
  show 500
  hide 600
  return
 
exporter_contacts:
  font_size 101,8
  font_size 102,8
  font_size 103,8
  font_size 104,8
  font_size 105,8
  font_size 106,12
  action% = 6
  hide 300
  hide 400
  hide 500
  show 600
  mark_on n_exporter%
  return
 
select_fichier:
  s$ = text$(8)
  racine$ = file_extract_path$(s$)
  filter$ = "Fichier CSV|*.csv"
  s$ = string$(255," ")
  res% = dll_call4("FileCreate",adr(racine$),adr(filter$),adr(s$),0)
  if res%>0 then text n_nomfichier%,trim$(s$)
  return
 
vider_filtre:
  text nf1_nom%,""
  text nf1_prenom%,""
  text nf1_numero%,""
  res% = dll_call2("SelectComboBoxItem",handle(nf1_bis%),1)
  text nf1_adresse1%,""
  text nf1_adresse2%,""
  text nf1_codepost%,""
  text nf1_ville%,""
  text nf1_pays%,""
  text nf1_portable%,""
  text nf1_fixe%,""
  text nf1_mail%,""
  text nf2_nom%,""
  text nf2_prenom%,""
  text nf2_numero%,""
  res% = dll_call2("SelectComboBoxItem",handle(nf2_bis%),1)
  text nf2_adresse1%,""
  text nf2_adresse2%,""
  text nf2_codepost%,""
  text nf2_ville%,""
  text nf2_pays%,""
  text nf2_portable%,""
  text nf2_fixe%,""
  text nf2_mail%,""
  return

L'aide de KGF est à jour. Tu y trouveras tous les détails nécessaires.

Bonne programmation !
Revenir en haut Aller en bas
lepetitmarocain




Nombre de messages : 333
Age : 81
Localisation : Région Parisienne (à mon grand désespoir)
Date d'inscription : 04/07/2018

ISAM toujours ISAM - Page 3 Empty
MessageSujet: Re: ISAM toujours ISAM   ISAM toujours ISAM - Page 3 EmptyVen 26 Jan 2024 - 10:14

Bonjour à tous.

@Marc.

Merci pour ta réponse.

Il ne me reste plus qu'à faire étudier le programme , et adapter le programme

pour faire fonctionner le mien.

Bonne journée.

Revenir en haut Aller en bas
 
ISAM toujours ISAM
Revenir en haut 
Page 3 sur 3Aller à la page : Précédent  1, 2, 3
 Sujets similaires
-
» ISAM vs BDR database
» Souci avec ISAM
» Petit souci avec ISAM
» Colisions 2d
» Je reviens toujours ;)

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: