[R] Base de donnée génère un ID complexe

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
SmErT
Niveau 2
Niveau 2
Messages : 21
Enregistré le : jeu. 05 nov. 2009 11:15
Localisation : Algérie
Status : Hors ligne

[R] Base de donnée génère un ID complexe

#1

Message par SmErT »

Voilà je veux réalise une base de donne on se basons sur les table.
Mais j'ai un petit souci avec le ID qui se compose de :

ID : 1937/2010

$ID =$nb & «/» & @YEAR

1)$nb il s'incrémente a chaque ajout d'article
2)@YEAR ces l'année.
3)En plus a chaque changement de l'année le $nb redémarre de 0001

en plus j'ai quelque problème avec l'ajout des données.
le script le démontre.
► Afficher le texte

merci et a plus
:wink:
Fichiers joints
L'image d'un exemple de la base de données.
L'image d'un exemple de la base de données.
ID.jpg (31.87 Kio) Vu 1155 fois
Modifié en dernier par SmErT le sam. 13 nov. 2010 20:56, modifié 1 fois.
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [..] Base de donne génère un ID complexe

#2

Message par bloodwolff »

J'ai fais cela vite fais , je repasse demain , si tu en veux plus je le terminerai
► Afficher le texte
Compte skype : bloodwolfff
Avatar du membre
SmErT
Niveau 2
Niveau 2
Messages : 21
Enregistré le : jeu. 05 nov. 2009 11:15
Localisation : Algérie
Status : Hors ligne

Re: [..] Base de donne génère un ID complexe

#3

Message par SmErT »

Merci a toi bloodwolff.
tous d'abord j'ai pas compris sa

Code : Tout sélectionner

$ID = GUICtrlCreateLabel(StringFormat("%04i/%i",$nb,@Year), 88, 40, 53, 17)
;et
GUICtrlSetData($id,StringFormat("%04i/%i",$nb,@Year)) 
 
aaa et pour la mise a du $nb a 0001 chaque nouvelle année tu a une :idea: ?

merci.
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [..] Base de donne génère un ID complexe

#4

Message par bloodwolff »

Pour les 2 lignes je pense que la partie que tu ne comprend pas est
StringFormat("%04i/%i",$nb,@Year)
En gros stringformat sert à créer une string dans le format du langage c ( sa doit être dans les débuts du tutoriel du site du zero du langage c)
le % indique que cela doit être transformer en 1 variable
le "04i" pourrait ce comparer aux paramètre de %
le premier 0 indique que si la valeur ne vaut rien ("") elle vaudra quand même 0
le 4 indique que l'on veut 4 zéro, "1" retournera 0001 et "1234" retournera 1234
le i lui indique que la valeur sera un nombre entier
À la fin de la chaîne on doit tout simplement indiquer les variables qui remplaceront les % séparer de ,


Pour le 2e problème

une ligne du genre, à adapter avec comment tu compte stocker tes données , et penser à ajouter l'include

Code : Tout sélectionner

If _stringbetween(guictrlread($id),"/","") <> @year then $nb = 1
Compte skype : bloodwolfff
Avatar du membre
SmErT
Niveau 2
Niveau 2
Messages : 21
Enregistré le : jeu. 05 nov. 2009 11:15
Localisation : Algérie
Status : Hors ligne

Re: [..] Base de donne génère un ID complexe

#5

Message par SmErT »

merci bloodwolff.
je vais voir ça.
Avatar du membre
SmErT
Niveau 2
Niveau 2
Messages : 21
Enregistré le : jeu. 05 nov. 2009 11:15
Localisation : Algérie
Status : Hors ligne

Re: [..] Base de donnée génère un ID complexe

#6

Message par SmErT »

Salut a tous.
voila bloodwolff

j'ai pas réussi a intégré

Code : Tout sélectionner

If _stringbetween(guictrlread($id),"/","") <> @year then $nb = 1
en plus j'ai ajouter deux bouton ouvrir et enregistre .

le problème la et que a l'enregistrement le fichier .bd n'englobe pas la structure de la base de donne.
et a l'ouverture l'exécutable se ferme tous seul.

Code : Tout sélectionner

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
#Include <Array.au3>
#Include <String.au3>
#Include <File.au3>

Local $ListView, $Ajouter, $article, $ID, $open ,$save
Global $File

$nb = 1

#Region ### START Koda GUI section ### Form=
GuiCreate("Sample GUI", 400, 300)
$ListView = GUICtrlCreateListView("", 10, 100, 350, 150, BitOR($LVS_EDITLABELS, $LVS_REPORT))

;~ $new = GUICreate("new", 446, 478, 351, 188)
$Label1 = GUICtrlCreateLabel("ID  :", 10, 40, 24, 17)
$ID = GUICtrlCreateLabel(StringFormat("%04i/%i",$nb,@Year), 88, 40, 53, 17)
$Label2 = GUICtrlCreateLabel("Article :", 10, 72, 39, 17)
$article = GUICtrlCreateInput("article", 88, 70, 145, 21)
$Ajouter = GUICtrlCreateButton("Ajouter", 312, 64, 75, 25)
$Ouvrir = GUICtrlCreateButton("Ouvrir", 10, 250, 75, 25)
$Enregistrer = GUICtrlCreateButton("Enregistrer", 100, 250, 75, 25)

GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

; Add columns
_GUICtrlListView_InsertColumn($ListView, 0, "ID", 100)
_GUICtrlListView_InsertColumn($ListView, 1, "Article", 100)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Ajouter
            _GUICtrlListView_AddItem($ListView, GUICtrlRead($ID), 0)
            _GUICtrlListView_AddsubItem($ListView, $nb-1, GUICtrlRead($article) , 1)
            $Array = _GUICtrlListView_GetItem($ListView, 1)
            $nb = $nb+1
;~          If _stringbetween(guictrlread($id),"/","") <> @year then $nb = 1 ;j'ai pas réussi a l'intégré 
            GUICtrlSetData($id,StringFormat("%04i/%i",$nb,@Year))
            MsgBox(0,'Max Index Numeric value', _ArrayMaxIndex($Array, 1, 1))
        Case $Ouvrir
            $open = FileOpenDialog("Ouverture de la base de donne", @MyDocumentsDir & "\", "Base de donne (*.bd)", 8 )
            _FileReadToArray($open,$Array)
        Case $Enregistrer
            $save = FileSaveDialog( "Enregistrement de la base de donne.", @MyDocumentsDir & "\", "Base de donne (*.bd)", 16)
            _FileWriteFromArray($save, $Array, 1)

    EndSwitch
WEnd
 
merci pour votre aide
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [..] Base de donnée génère un ID complexe

#7

Message par bloodwolff »

Effectivement le stringbetween ne fonctionne pas , sois c'Est moi qui l'utilise mal sois cette fonction ne fonctionne pas toujours ...

J'ai corrigé cela comme ça mais le script ne marchera plus si l'année n'a plus 4 caractère donc dans 8000ans

Si tu as besoin d'explication je suis la :wink:
► Afficher le texte
Compte skype : bloodwolfff
Avatar du membre
SmErT
Niveau 2
Niveau 2
Messages : 21
Enregistré le : jeu. 05 nov. 2009 11:15
Localisation : Algérie
Status : Hors ligne

Re: [..] Base de donnée génère un ID complexe

#8

Message par SmErT »

Merci encore bloodwolff
Voila j'ai mis du commentaire au code,si tu veux bien voire si c'est juste ou pas.

Code : Tout sélectionner

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
#Include <Array.au3>
#Include <String.au3>
#Include <File.au3>

Local $ListView, $Ajouter, $article, $ID, $open ,$save
Global $File

$nb = 1

#Region ### START Koda GUI section ### Form=
GuiCreate("Sample GUI", 400, 300)
$ListView = GUICtrlCreateListView("", 10, 100, 350, 150, BitOR($LVS_EDITLABELS, $LVS_REPORT))

;~ $new = GUICreate("new", 446, 478, 351, 188)
$Label1 = GUICtrlCreateLabel("ID  :", 10, 40, 24, 17)
$ID = GUICtrlCreateLabel(StringFormat("%04i/%i",$nb,@Year), 88, 40, 53, 17)
$Label2 = GUICtrlCreateLabel("Article :", 10, 72, 39, 17)
$article = GUICtrlCreateInput("article", 88, 70, 145, 21)
$Ajouter = GUICtrlCreateButton("Ajouter", 312, 64, 75, 25)
$Ouvrir = GUICtrlCreateButton("Ouvrir", 10, 250, 75, 25)
$Enregistrer = GUICtrlCreateButton("Enregistrer", 100, 250, 75, 25)

GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

; Add columns
_GUICtrlListView_InsertColumn($ListView, 0, "ID", 100)
_GUICtrlListView_InsertColumn($ListView, 1, "Article", 100)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Ajouter
            If StringRight(guictrlread($id),4) <> @year then $nb = 1 ;Extraction des 4 dernier caractère du ID 'donc l'année et la compare avec l'année actuelle
            _GUICtrlListView_AddItem($ListView, StringFormat("%04i/%i",$nb,@Year), 0) ;Ajoute le ID a la table ID
            _GUICtrlListView_AddsubItem($ListView, $nb-1, GUICtrlRead($article) , 1) ;Ajoute l'article a la table article
            $nb = $nb+1 ;Incrementaion de la partit NB du ID
            GUICtrlSetData($id,StringFormat("%04i/%i",$nb,@Year)) ;Affiche le ID suivant

        Case $Ouvrir
            If _GUICtrlListView_GetItemCount($ListView) <> 0 then ; compart ne nombre des items de la liste avec le zero
             _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($ListView)) ;Remise a zero de la table
            EndIf
            If _GUICtrlListView_GetItemCount($ListView) <> 1 then ;compart ne nombre des items de la liste avec le un
                $open = FileOpenDialog("Ouverture de la base de donne", @MyDocumentsDir & "\", "Base de donne (*.bd)", 8 ) ;Ouverture de la boite de dialoge Ouverture de la base de donne
                Dim $Array
                _FileReadToArray($open,$Array) ;Transfère des donnes du fichier ouvert en une table
                For $i=1 To $Array[0]
                    $split = StringSplit($Array[$i],"|",2) ; Préparation de la table en délimitant les partie de chaque colonne
                    _GUICtrlListView_AddItem($ListView, $split[0], 0) ;Chargement de la colonne ID
                    _GUICtrlListView_AddsubItem($ListView, $i-1 , $split[1] , 1) ;Chargement de la colonne Article
                Next
                $nb = Int(StringTrimRight($split[0],5))+1 ;Récupération du NB suivent de la partie ID
                GUICtrlSetData($id,StringFormat("%04i/%i",$nb,@Year)) ;Affiche le ID suivant
            Else
                MsgBox(16,"Erreur","Il y a déjà des données dans le tableau") ;teste de routine mdr
            EndIf


        Case $Enregistrer
            $save = FileSaveDialog( "Enregistrement de la base de donne.", @MyDocumentsDir & "\", "Base de donne (*.bd)", 16) ;Ouverture de la boite de dialogue Enregistrement de la base de donne
            Dim $Array[_GUICtrlListView_GetItemCount($ListView)] ;Détermination des nombres de items dans la liste
            For $i = 0 to _GUICtrlListView_GetItemCount($ListView)-1
                $aitem = _GUICtrlListView_GetItem($ListView, $i) ;
                $sitem = _GUICtrlListView_GetItem($ListView, $i,1) ;
                $Array[$i] = $aitem[3] & "|" & $sitem[3] ;Délimite les donne entre les colonne de la table avec "|"
            Next
            _FileWriteFromArray($save, $Array) ;Enregistrement de la table dans un fichier
    EndSwitch
WEnd
 
:) encore une fois un grand [blink]MERCI[/blink]
Modifié en dernier par SmErT le sam. 13 nov. 2010 22:41, modifié 1 fois.
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [R] Base de donnée génère un ID complexe

#9

Message par bloodwolff »

Les commentaires sont correct (quelque petite faute d'orthographe mais rien de grave) c'est bien car on voit que tu cherches à comprendre. Par contre pour le commentaire
;Affiche le ID suivant """""""""""""" la il y a un petit souci"""""""""""""
Faudra que tu m'explique
Compte skype : bloodwolfff
Avatar du membre
SmErT
Niveau 2
Niveau 2
Messages : 21
Enregistré le : jeu. 05 nov. 2009 11:15
Localisation : Algérie
Status : Hors ligne

Re: [R] Base de donnée génère un ID complexe

#10

Message par SmErT »

Désolé c'est moi qui a gaffais. :oops:
Merci pour tes encouragements. :wink:
Répondre