Page 1 sur 1

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

Posté : mer. 10 nov. 2010 23:31
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:

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

Posté : jeu. 11 nov. 2010 00:22
par bloodwolff
J'ai fais cela vite fais , je repasse demain , si tu en veux plus je le terminerai
► Afficher le texte

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

Posté : jeu. 11 nov. 2010 22:29
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.

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

Posté : jeu. 11 nov. 2010 23:05
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

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

Posté : jeu. 11 nov. 2010 23:27
par SmErT
merci bloodwolff.
je vais voir ça.

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

Posté : sam. 13 nov. 2010 17:14
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

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

Posté : sam. 13 nov. 2010 18:25
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

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

Posté : sam. 13 nov. 2010 20:52
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]

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

Posté : sam. 13 nov. 2010 21:09
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

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

Posté : sam. 13 nov. 2010 22:51
par SmErT
Désolé c'est moi qui a gaffais. :oops:
Merci pour tes encouragements. :wink: