IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Option Base 1


Sujet :

VB.NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Par défaut Option Base 1
    Bonjour,

    J'ai un gros problème. Je dois nécessairement utiliser un tableau avec un index débutant à 1 et non à 0 pour utiliser une méthode.
    Sans cela, elle me renvoie une erreur. J'ai essayé d'envoyer un tableau de dimension n+1 avec le premier terme nul, j'ai aussi une erreur. Si je rentre le tableau de dimension n, j'ai une erreur aussi.

    Il y a-t-il un moyen de remplacer l'option base 1 de VB6?
    Cette option n'est plus disponible en VB.Net.

    Merci,

    Nicolas

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2010
    Messages : 347
    Par défaut
    Ton tableau utilise un indice? du genre mon_tableau(i)...
    Dans ce cas la, il faut initialiser i à 1.

    J'espère que c'est ça que tu demandais.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Par défaut
    En fait,

    Je déclare mon tableau comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim ServerHandles(1) as Long
    Cela me crée un tableau ayant deux 'places' avec l'index 0 et l'index 1.
    J'aimerais créer un tableau avec une seule 'place' à l'index1.

    C'est possible?

    nicolas

  4. #4
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Citation Envoyé par nicohutse Voir le message
    J'aimerais créer un tableau avec une seule 'place' à l'index1.
    C'est possible mais quel intérêt ? Un tableau avec une seule "case" n'est plus un tableau.

    Sinon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim ServerHandles(1) as Long
    Crée un tableau pouvant contenir un seul objet (ici un Long). Ne pas confondre les index pour accéder aux éléments qui sont en base 0 (0 est l'index du premier élément) et le nombre d'éléments que peut contenir un tableau.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Par défaut
    En fait l'intérêt est le suivant:

    Je fais appel à une méthode wrappée de VB6 vers .Net.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Remove(NumItems as Integer, ByRef ServerHandles As System.Array, ByRef Errors as System.Array)
    Le tableau ServerHandles me permet de supprimer de instances de classes que je souhaite. Dans ce cas, je ne veux en supprimer qu'une seule.

    Le problème est qu'une s'agit d'un tableau option BASE 1.

    Quand j'utilise un tableau avec un seul élément, l'index est 0 et c'est une erreur.
    Quand j'envoie un tableau avec deux éléments, (celui placé en index 1 étant l'identifiant de mon instance), j'ai une erreur.

    Comment me sortir de là?

    Nicolas

  6. #6
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Citation Envoyé par nicohuts
    Je fais appel à une méthode wrappée de VB6 vers .Net.
    C'est à dire ? Tu appelles une DLL VB6 depuis VB.Net ?

    Citation Envoyé par nicohutse
    Quand j'envoie un tableau avec deux éléments, (celui placé en index 1 étant l'identifiant de mon instance), j'ai une erreur.
    Dans ton message précédent tu pensais faire un tableau avec deux éléments mais en fait tu ne prévoyais la place que pour un. Tu peux toujours tester en utilisant effectivement un tableau de deux éléments.

    Après comme je ne m'y connais pas en VB, je ne pourrais pas faire grand chose d'autre pour toi

  7. #7
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    moi même qui programme un peut en vb.net,
    je ne comprend pas ce que tu recherche "nicohutse"...

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Par défaut
    En fait il s'agit de la dll OPCDAAUTO.dll. C'est une dll qui a été développée à la base pour VB6 puis adaptée (wrappée) pour VB.Net. Maintenant je n'en sais pas beaucoup plus. J'ai testé en VB6 cette méthode, il n'y avait aucun problème.

    Avec un tableau à deux cases, j'ai une erreur aussi.

    J'ai joint un print screen du code avec l'erreur.


    Merci pour l'aide,

    Nicolas
    Images attachées Images attachées  

  9. #9
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    il est ou le problème ...?
    je vois pas pourquoi il te faut absolument un tableau ...

    met plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim ServerHandles as Long
     
    '...
     
    ServerHandles  = OPCItemToRemove.GetItemServerHandle
    sa devrais aller la non ??



    PS: quand tu a du code a mettre,
    met le dans les balises de code *stp*

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Par défaut
    Dans le document précédent, ServerHandles possèdent deux valeurs, une à l'index 0 et une à l'index 1.

    J'aimerais que ServerHandles n'aie que (1) 76620656 sans (0) 0.

    La méthode OPCItems.Remove n'accepte pas de recevoir un tableau avec une index qui commence à 0 car elle a été programmée avec l'option base 1.

    J'ai essayé avec un tableau n'ayant que (0) 76620656 mais ca ne fonctionne pas. Il faut expressément (1) 76620656 sans 'case' à l'index (0).

    Désolé je sens que je ne m'exprime pas bien mais j'essaye.

    Merci pour l'aide,

    Nicolas

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Par défaut
    Non, si je ne met pas de tableau mais un LONG pur, il est mis :

    Une valeur de type 'long' ne peut pas être convertie en 'System.Array'.

  12. #12
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    tu pourra pas ...
    les index commencent forcément à '0'

    j'ais cherché et j'ais rien trouvé de mon coté non + ...
    bizarre ta .dll

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Par défaut
    Il y a pas moyen de créer mon propre type de tableau ou un truc du genre avec mon index à moi?

    Cette dll permet de faire un client OPC, c'est-à-dire qu'elle me permet de lire des valeurs contenues dans un automate. C'est pour une appli industrielle.

    Merci de votre aide en tout cas,

    Nicolas

  14. #14
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    Je connais les serveurs OPC
    (tu a même une carte OPC ou applicom sur ton ordi je crois)

    je développe également dans un secteur Industriel mais pas sur OPC *dsl*
    en tout cas de souvenir, je ne me rappel pas avoir été embêté a ce point sur OPC

    Bonne continuation,

  15. #15
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Bonsoir,

    Si ce que tu souhaites c'est ne récupérer que l'élément d'indice 1 de ton tableau tu peux essayer ceci je suppose:
    Code VB.Net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim ServerHandle as Long
    '...
    ServerHandle  = OPCItemToRemove.GetItemServerHandle(1)

    @StormimOn
    Citation Envoyé par StormimOn Voir le message
    Sinon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim ServerHandles(1) as Long
    Crée un tableau pouvant contenir un seul objet (ici un Long). Ne pas confondre les index pour accéder aux éléments qui sont en base 0 (0 est l'index du premier élément) et le nombre d'éléments que peut contenir un tableau.
    Ceci est inexact en VB.Net malheureusement, lors de la déclaration d'un tableau l'argument ne représente pas le nombre d'éléments de celui-ci mais l'index maximum du tableau.
    Code VB.Net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim myArray(1) As String
    MessageBox.Show(myArray.Length)
    ' Affichera 2 et non pas 1

  16. #16
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Citation Envoyé par Sehnsucht
    @StormimOn

    Ceci est inexact en VB.Net malheureusement, lors de la déclaration d'un tableau l'argument ne représente pas le nombre d'éléments de celui-ci mais l'index maximum du tableau.
    Je me disais que ce serait comme C# pour quelque chose comme ça ... mais non
    Je le saurais pour la prochaine fois

  17. #17
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    en vb6 on pouvait faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dim tbl(3 to 6) as string
    essaye, on sait jamais ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Par défaut
    Bonjour,

    Bien essayé pour le Array(1 to 2), j'y ai cru mais VB m'oblige quand même
    à commencer à zéro.

    Du coup j'ai recommencé à chercher et j'ai trouvé.

    Enfin il y a deux alternatives.

    Soit je vais rechercher par Ref le System.Array dans l'instance de ma dll. Le tableau référencé est alors en base 1. Voir document joint. C'est le seul moyen que j'ai trouvé d'avoir un tableau en base 1 dans VB.Net. Ca ne m'arrange pas trop seulement.

    J'ai alors pensé écrire une mini bibliothèque de classe en VB6 me permettant de faire 'interface' pour transformer et récupérer en base 1 mes tableaux VB.Net. Certain que ça marche mais c'est lourd!

    La deuxième option est le bidouillage. C'est ce que j'ai fait

    J'ai fait par essai-erreur jusqu'à ce que ca fonctionne, l'explication est probablement dans la dll.

    Voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    Dim ServerHandles(1) As Int32
    Dim Errors as System.Array
    Dim Count As Long
     
    'Mon instance de classe
    OPCItemToRemove =_oPCGroupsItems.Item(ItemKey)
     
    'La méthode suivante me retourne un entier
    ServerHandles(1) =OPCItemToRemove.GetItemServerHandle
     
    'La case qui m"interresse est en 1, elle doit être différente de 0
    If Int(ServerHandles(1))<>0 Then
    Count =1
    'Le system.Array Errors m'est transmis par ref. ServerHandles est donc
    'bien de deux cases...Et ca marche. 
    _oPCGroupObj.OPCItems.Remove(Count,ServerHandles,Errors)
    End If
    Mais ce qui est sûr c'est qu'il ne fallait pas absolument, comme je le pensais, un tableau avec index commençant à 1.

    Un tout grand merci pour votre aide. Il est efficace ce forum.

    Nicolas
    Images attachées Images attachées  

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Accès aux options "Base de donnée active" en vba
    Par niko9600 dans le forum VBA Access
    Réponses: 2
    Dernier message: 06/04/2010, 13h52
  2. Réponses: 5
    Dernier message: 09/07/2009, 18h22
  3. Option base 1 et tableaux
    Par breizou dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 09/04/2009, 15h58
  4. Créer une liste d'option sur base d'une db
    Par HwRZxLc4 dans le forum Langage
    Réponses: 10
    Dernier message: 24/04/2008, 15h26
  5. [IE] Modifier une option dans la base de registre
    Par Oberown dans le forum Windows XP
    Réponses: 2
    Dernier message: 16/06/2006, 08h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo