Boucle et enregistrement sur plusieurs lignes

Signaler
Messages postés
86
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
13 juillet 2013
-
 Utilisateur anonyme -
Bonjour à tous,
Je voudrai améliorer mon code en faisant par exemple une boucle ou équivalent.

J'ai une ma form principal (mainform) qui fait ceci lorsque j'appuie sur un bouton

       Database.Show()
        Database.SaverButton.PerformClick()


La database quand à elle contient ceci : (exemple!!)

   Dim AaaaaRecklessDisregard As String = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\AaaaaRecklessDisregard"

 Private Sub SaverButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SaverButton.Click
           If MainForm.ListBoxGames.Items.Contains("AaaaaRecklessDisregard") Then
                If System.IO.Directory.Exists(AaaaaRecklessDisregard) = True Then
                    My.Computer.FileSystem.CopyDirectory(AaaaaRecklessDisregard, Destination + "\AaaaaRecklessDisregard", True)
                End If
            End If
end sub


La listboxGames contient le texte "AaaaaRecklessDisregard"

Mon problème est que cette "database" contient maintenant plus de 7000 lignes et je sais qu'il est possible de faire quelque chose de ce genre :

'Button1 de la MainForm :

For each strings in listboxgames.item
                    My.Computer.FileSystem.CopyDirectory(string, Destination + "\string", True)
Next


'Code database : 

sub AaaaaRecklessDisregard
        Dim gamename As String = "Aaaaaarecklessdiscard"
        Dim path As String = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\AaaaaRecklessDisregard"
        Dim savepath As String = MainForm.TextBox0.Text & "\Games\Aaaaaarecklessdiscard"
end sub


Je sais que ceci est possible mais je n'arrive pas à le mettre en application, quelqu'un pour m'aider s'il vous plait ?
A voir également:

15 réponses


Salut,

Déjà à première vue, tu fais une boucle for each Strings in ...

Or dans ta boucle tu ne fais aucun appel à ta variable (Strings) puisque tu mets à l'intérieur de ta boucle:
My.Computer.FileSystem.CopyDirectory(string, Destination + "\string", True)

Elle est où ta variable 'Strings' dans la boucle?

Ensuite l'oppération CopyDirectory requiert uniquement une source et une destination au format texte (string en anglais).
Exemple:
Dim Source As String = "c:\MaSource"
            Dim Destination As String = "c:\MaDestination"

Or tu fais:
[code=vb] My.Computer.FileSystem.CopyDirectory(string, Destination + "\string", True)


Ça ne veux rien dire, on ne sait même pas ce que représente ta variable 'Destination' dans ton code


My.Computer.FileSystem.CopyDirectory(Source, Destination)/code



CF2i - Guadeloupe
Ingénierie Informatique

Pardon pour l'exemple:

Dim Source As String = "c:\MaSource"
Dim Destination As String = "c:\MaDestination"
My.Computer.FileSystem.CopyDirectory(Source, Destination)



CF2i - Guadeloupe
Ingénierie Informatique
Messages postés
86
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
13 juillet 2013

Je sais mais c'etait un exemple fais sur le tas, ce que je veut dire c'est faire appelle à ces deux strings (game path et save path) se situant dans le sub "AaaaaRecklessDisregard" (par exemple)

Re:
Excuse j'ai pas été aussi loin

alors qu'on soit d'accord, tu fais une sub qui a par rôle uniquement de déclarer des valeurs de variable?

Je suis d'accord si tes variables ont été déclarées publiques, ça veut dire que tu peux y faire appel n'importe où dans ton programme.
La d'après ce que j'ai compris tu dimensionnes trois variables qui ne servent à rien puisque elles sont utilisables uniquement dans la sub en question.

Je pense que c'est ça que tu cherchais à faire:
'juste après ta:
Public Class MainForm
'Tu mets tes variables en 'public'
public gamename as string
public path as string
public savepath as string

'Et après ta sub Code database : 

Private Sub AaaaaRecklessDisregard()
gamename = "Aaaaaarecklessdiscard"
path=Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)+"\AaaaaRecklessDisregard"
savepath = MainForm.TextBox0.Text & "\Games\Aaaaaarecklessdiscard"
End Sub


Un autre truc, je crois que tu peux remplacer:
Dim path As String = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\AaaaaRecklessDisregard"


Par:
        Dim path As String = Application.StartupPath & "\AaaaaRecklessDisregard"

Non?
CF2i - Guadeloupe
Ingénierie Informatique
Messages postés
86
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
13 juillet 2013

Bonjour,
Merci je vais essayer ta méthode :)

Non, disons que j'ai actuellement 220 "path" de ce genre, c'est donc pourquoi il est déclaré dans le dossier local appdata ;)
Messages postés
86
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
13 juillet 2013

Bonjour,
J'ai essaier votre méthode mais j'ai encore un petit soucis, voila ce que ca donne à présent :

'MainForm

    Private Sub GetListButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GetListButton.Click
       For Each ??? in ???
            If System.IO.Directory.Exists(path) = True Then
                ListBoxGames.Items.Add(gamename)
            End If
        Next
end sub

'DatabaseForm

Public Class Database_v2
    Public gamename As String
    Public path As String
    Public savepath As String

    Private Sub Games()
        gamename = "Aaaaaarecklessdiscard"
        path = (Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\AaaaaRecklessDisregard")
        savepath = MainForm.TextBox0.Text & "\Games\Aaaaaarecklessdiscard"

        gamename = "Alien Breed 3 : Descent"
        path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\My Games\UnrealEngine3\AlienBreed3DescentGame"
        savepath = MainForm.TextBox0.Text & "\Games\Alien Breed 3"
    End Sub


Pouvez vous m'aider à trouver ce qu'il faut mettre à la place des "???" s'il vous plait ?
Messages postés
86
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
13 juillet 2013

Une petite aide ? Quelqu'un ? :]

Re:

J'ai pas compris que cherches tu à faire avec:
 Private Sub GetListButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GetListButton.Click
       For Each ??? in ???
            If System.IO.Directory.Exists(path) = True Then
                ListBoxGames.Items.Add(gamename)
            End If
        Next
end sub



Tu veux savoir si le path existe sur ton disque?

CF2i - Guadeloupe
Ingénierie Informatique
Messages postés
86
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
13 juillet 2013

oui, a vrai dire cette base de donnée va servir pour plusieurs codes (ex : enregistrer, restaurer, recuperer les chemin dossier...) et actuellement j essaie d optimiser mon code de base qui contient plus de 8000lignes vers des boucles.

Ceci permettrai de reduire mon code à 1000 lignes.

Mon seul probleme c est que je n arrive pas à comprendre ce qu il faut mettre au for each.

Merci à vous.
Messages postés
86
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
13 juillet 2013

Bonjour,
Il apparaitrait que database_path et database_name n'ai aucune valeur quand je fais appelle à ces déclarations dans ma "MainForm". Pourtant je les ai déclarer dans le sub "Games" de la form "Database".

Que pourrai-je faire ? Merci.

Salut,

Mais un simple
If System.IO.Directory.Exists(path) = True Then
                ListBoxGames.Items.Add(gamename)
            End If


suffit pour vérifier si le chemin existe sur ton disque.
Pourquoi veut-tu faire une boucle for each ...?

je fais appelle à ces déclarations dans ma "MainForm"


Comment les as-tu déclaré?
T'as fait:
Dim Variable as ...
ou;
Public Variable as ...?


CF2i - Guadeloupe
Ingénierie Informatique
Messages postés
86
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
13 juillet 2013

Oui en effet, ce code suffis (j'ai oublier de mettre à jour ce que j'avais fait depuis)

Apres vérification à l'aide d'un writeline, le probleme vient du fait que mes variables publiques se situant dans la FormDatabase soit nul.

Ce que je voudrai faire c'est faire en sorte que ces variables prennent comme déclaration les "path" se situant dans DatabaseForm.

Voici le code :

    Public gamename As String
    Public path As String
    Public savepath As String
   
Sub Games()
        gamename = "5 Realms Of Cards"
        path = Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments) + "\SugarGames\5RealmofCards"
        savepath = MainForm.TextBox0.Text & "\Games\5 Realms Of Cards"

        gamename = "Aaaaaarecklessdiscard"
        path = (Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\AaaaaRecklessDisregard")
        savepath = MainForm.TextBox0.Text & "\Games\Aaaaaarecklessdiscard"

        gamename = "Alien Breed 3 : Descent"
        path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\My Games\UnrealEngine3\AlienBreed3DescentGame"
        savepath = MainForm.TextBox0.Text & "\Games\Alien Breed 3"
    End Sub


Je sais que je peut remplacer "public path as string = Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments) + "\SugarGames\5RealmofCards"" mais ce que je voudrai faire c'est que cette variable les déclare toute.

Si vous avez une méthode alternative elle serait bienvenue.
Merci.

Re:

Pas de problème, moi aussi je t'ai un peu abandonné ces jours-ci.

J'ai un peu du mal à comprendre ton raisonnement ou du moins ce que tu cherches à faire.

Dans un de tes posts tu dis:
j'ai actuellement 220 "path"


J'ai pas compris comment tu affectes 220 valeurs à une unique variable.

Dans ma logique, tu devrais la déclarer comme tableau comme:
Public Path(220) as string


Et leur attribues leurs valeur à chacune (de Path(0) à Path(119).

J'ai surement du mal comprendre ou tu as surement mal expliqué... (un des deux)




CF2i - Guadeloupe
Ingénierie Informatique
Messages postés
86
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
13 juillet 2013

Justement je cherche à déclarer toute ces destinations en une seul sub, module ou... n'importe quoi, pour pouvoir ensuite s'en servir plus facilement. (enregistrement des dossier, recupereration des dossier, restauration des dossier... etc)

Dans mon ancien code je fesait environt 220 fois le meme code pour chaque opération (cela explique les 8000 lignes)

Maintenant je voudrai reduire cela et dire en 220 fois tel nom tel chemin de sauvegarde tel chemin de restauration.

Le problème c'est comment

certains utilisent des base de donné sql, d'autres des datatables, d'autres des fichiers xml...

Pour gérer quelques variables t'as pas besoin d'une BD.
Il faudrait que tu exposes ton projet au complet(cahier des charges) pour comprendre vraiment quel est l'objectif attendu.






CF2i - Guadeloupe
Ingénierie Informatique