DES OUTILS POUR TRAVAILLER AVEC LA BASE DE REGISTRE
cs_azerty25
Messages postés1114Date d'inscriptionjeudi 19 décembre 2002StatutMembreDernière intervention 6 mai 2007
-
18 mai 2004 à 13:30
cs_azerty25
Messages postés1114Date d'inscriptionjeudi 19 décembre 2002StatutMembreDernière intervention 6 mai 2007
-
6 oct. 2004 à 17:27
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cs_azerty25
Messages postés1114Date d'inscriptionjeudi 19 décembre 2002StatutMembreDernière intervention 6 mai 2007 6 oct. 2004 à 17:27
Ta remarque non plus ;-)
Dragonmaster
Messages postés126Date d'inscriptionvendredi 20 août 2004StatutMembreDernière intervention 3 avril 2009 6 oct. 2004 à 15:57
Je ne pense pas que celà vaut le niveau "expert" !
cs_viran
Messages postés104Date d'inscriptionjeudi 6 mai 2004StatutMembreDernière intervention31 décembre 2006 8 sept. 2004 à 14:26
Je n'arrive pas a lire els fichiers comment je peux faire pour les lire?
philoo91
Messages postés46Date d'inscriptionvendredi 14 février 2003StatutMembreDernière intervention13 juillet 2009 24 mai 2004 à 08:05
Salut,
CountValue utilise ReadKeyListValue(Path)
où path est une chaine.
Si celle ci est nulle la fonction ReadKeyListValue retournera un tableau
vide.
Vue que au retour de ReadKeyListValue on utilise justement l'instruction ubound, si le tableau est vide ça plante.
Donc la solution est de faire ainsi :
Public Function ReadKeyListValue(ByVal Path As String) As String()
Dim RootKey As Long
Dim Ret As Long
Dim RetData As Long
Dim hKey As Long
Dim Compteur As Long
Dim sName As String
Dim sData As String
Dim List() As String
ReDim Preserve List(0)
ReadKeyListValue = List
RootKey = ValuePath(Path)
If RootKey = 0 Then Exit Function
If RegOpenKey(RootKey, StringPath(RootKey, Path), hKey) = 0 Then
sName = Space(StringLenth)
Ret = StringLenth
Compteur = 0
While RegEnumValue(hKey, Compteur, sName, Ret, 0, ByVal 0&, ByVal sData, RetData) <> ERROR_NO_MORE_ITEMS
ReDim Preserve List(Compteur)
List(UBound(List)) = Trim(Left(sName, Ret))
Compteur = Compteur + 1
sName = Space(StringLenth)
sData = Space(StringLenth)
Ret = StringLenth
RetData = StringLenth
Wend
RegCloseKey hKey
End If
ReadKeyListValue = List
End Function
Public Function CountValues(ByVal Path As String) As Double
CountValues = UBound(ReadKeyListValue(Path))
End Function
shinkan
Messages postés14Date d'inscriptiondimanche 30 novembre 2003StatutMembreDernière intervention14 avril 2005 21 mai 2004 à 19:21
GROS PROBLEME, mais cette fois ci j'y suis pour rien.
Lors de l'appel de la fonction "CountValues" je reçois le message d'erreur suivant :
Run Time Error '9' :
Subscript Out Of Range
Je n'obtient pas ce message si je passe une chaine de caractere de 64 caractères à la fonction, en revanche, dès que je lui en passe plus, j'ai ce message d'erreur ... et je ne vois pas comment faire pour me sauver de cette situation désatreuse pour mon projet ...
Merci d'avance aux masses qui réussiront à trouver comment faire.
philoo91
Messages postés46Date d'inscriptionvendredi 14 février 2003StatutMembreDernière intervention13 juillet 2009 21 mai 2004 à 14:00
Mets un CALL devant
ou bien vire les parentheses
shinkan
Messages postés14Date d'inscriptiondimanche 30 novembre 2003StatutMembreDernière intervention14 avril 2005 21 mai 2004 à 13:26
J'ai un gros probleme avec la fonction WriteKeyValue qui ne fonctionne pas comme je voudrais...
Voilà la syntaxe que j'utilise :
1 Private Sub Form_Load()
2 Dim Initi As New RegFunc
3 Initi.WriteKeyValue("HKLM\SOFTWARE\Monsoft", "Initialise", "1")
4 End Sub
RegFunc est le module de classe fourni dans le zip.
Je reçois le message d'erreur suivant à propos de la ligne 3 :
Compile Error :
Expected : =
La ligne 3 se met en rouge. Compilation impossible bien sûr.
Je suis débutant et je ne comprends pas cette erreur, d'autant plus que WriteKeyValue n'est censée rien renvoyer, donc comment le compilateur peut il attendre que je colle un = ?????
Merci d'avance.
philoo91
Messages postés46Date d'inscriptionvendredi 14 février 2003StatutMembreDernière intervention13 juillet 2009 21 mai 2004 à 07:59
Oui effectivement pour le post de SHINKAN dans l'empressement j'ai un peu merdé.
Pour AZERTY :
La différence entre un module standard (.BAS) et un module de classe (.CLS) est la suivante :
Avec un module de classe tu peut référencé ensuite une variable objet
comme ça : Set MonObjetDeClasse = new ClasseOBJET
Avec un module de classe tu peut faire une dll et appeler les fonctions et routines depuis la variable l'objet et ce depuis un autre projet dans lequel tu auras pris soin de charger la dite dll avec projet/référence du menu
cs_azerty25
Messages postés1114Date d'inscriptionjeudi 19 décembre 2002StatutMembreDernière intervention 6 mai 2007 20 mai 2004 à 00:13
Moi non plus, j'ai toujours eu du mal a faire la différence entre les 2, mais en résumé, le module de classe représente un objet avec des methodes et un module simple un un modul avec des fonctions, comme les forms (qui sont des modules particuliers d'ailleur)
shinkan
Messages postés14Date d'inscriptiondimanche 30 novembre 2003StatutMembreDernière intervention14 avril 2005 19 mai 2004 à 23:56
C'est moi qui cherchait, merci beaucoup, je sais pas où tu as trouvé ça mais ça me sauve la vie !!
En tous cas, si toi aussi tu en as l'utilité, sache quele module de classe utilisé est erroné à la fin :
Public Function CountValues(ByVal Path As String) As Double
CountFolders = UBound(ReadKeyListValue(Path))
End Function
Il faut biensûr remplacer "CountFolders" par "CountValues".
Autre chose : pourquoi un module de classe et pas un module classique ? Juste pour le fun ? Je suis débutant et j'en voit pas l'utilité là ...
cs_azerty25
Messages postés1114Date d'inscriptionjeudi 19 décembre 2002StatutMembreDernière intervention 6 mai 2007 18 mai 2004 à 13:30
C'est pas vmt moi qui cherchait ceci, de plus, on parlai de scanneur ;) mais bon apparament, c'est fonctionnel, pratique, mais déja sur le site
6 oct. 2004 à 17:27
6 oct. 2004 à 15:57
8 sept. 2004 à 14:26
24 mai 2004 à 08:05
CountValue utilise ReadKeyListValue(Path)
où path est une chaine.
Si celle ci est nulle la fonction ReadKeyListValue retournera un tableau
vide.
Vue que au retour de ReadKeyListValue on utilise justement l'instruction ubound, si le tableau est vide ça plante.
Donc la solution est de faire ainsi :
Public Function ReadKeyListValue(ByVal Path As String) As String()
Dim RootKey As Long
Dim Ret As Long
Dim RetData As Long
Dim hKey As Long
Dim Compteur As Long
Dim sName As String
Dim sData As String
Dim List() As String
ReDim Preserve List(0)
ReadKeyListValue = List
RootKey = ValuePath(Path)
If RootKey = 0 Then Exit Function
If RegOpenKey(RootKey, StringPath(RootKey, Path), hKey) = 0 Then
sName = Space(StringLenth)
Ret = StringLenth
Compteur = 0
While RegEnumValue(hKey, Compteur, sName, Ret, 0, ByVal 0&, ByVal sData, RetData) <> ERROR_NO_MORE_ITEMS
ReDim Preserve List(Compteur)
List(UBound(List)) = Trim(Left(sName, Ret))
Compteur = Compteur + 1
sName = Space(StringLenth)
sData = Space(StringLenth)
Ret = StringLenth
RetData = StringLenth
Wend
RegCloseKey hKey
End If
ReadKeyListValue = List
End Function
Public Function CountValues(ByVal Path As String) As Double
CountValues = UBound(ReadKeyListValue(Path))
End Function
21 mai 2004 à 19:21
Lors de l'appel de la fonction "CountValues" je reçois le message d'erreur suivant :
Run Time Error '9' :
Subscript Out Of Range
Je n'obtient pas ce message si je passe une chaine de caractere de 64 caractères à la fonction, en revanche, dès que je lui en passe plus, j'ai ce message d'erreur ... et je ne vois pas comment faire pour me sauver de cette situation désatreuse pour mon projet ...
Merci d'avance aux masses qui réussiront à trouver comment faire.
21 mai 2004 à 14:00
ou bien vire les parentheses
21 mai 2004 à 13:26
Voilà la syntaxe que j'utilise :
1 Private Sub Form_Load()
2 Dim Initi As New RegFunc
3 Initi.WriteKeyValue("HKLM\SOFTWARE\Monsoft", "Initialise", "1")
4 End Sub
RegFunc est le module de classe fourni dans le zip.
Je reçois le message d'erreur suivant à propos de la ligne 3 :
Compile Error :
Expected : =
La ligne 3 se met en rouge. Compilation impossible bien sûr.
Je suis débutant et je ne comprends pas cette erreur, d'autant plus que WriteKeyValue n'est censée rien renvoyer, donc comment le compilateur peut il attendre que je colle un = ?????
Merci d'avance.
21 mai 2004 à 07:59
Pour AZERTY :
La différence entre un module standard (.BAS) et un module de classe (.CLS) est la suivante :
Avec un module de classe tu peut référencé ensuite une variable objet
comme ça : Set MonObjetDeClasse = new ClasseOBJET
Avec un module de classe tu peut faire une dll et appeler les fonctions et routines depuis la variable l'objet et ce depuis un autre projet dans lequel tu auras pris soin de charger la dite dll avec projet/référence du menu
20 mai 2004 à 00:13
19 mai 2004 à 23:56
En tous cas, si toi aussi tu en as l'utilité, sache quele module de classe utilisé est erroné à la fin :
Public Function CountValues(ByVal Path As String) As Double
CountFolders = UBound(ReadKeyListValue(Path))
End Function
Il faut biensûr remplacer "CountFolders" par "CountValues".
Autre chose : pourquoi un module de classe et pas un module classique ? Juste pour le fun ? Je suis débutant et j'en voit pas l'utilité là ...
18 mai 2004 à 13:30