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 6 et antérieur Discussion :

Passer un objet user en parametre


Sujet :

VB 6 et antérieur

  1. #1
    Membre régulier
    Homme Profil pro
    Webmaster
    Inscrit en
    Septembre 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 105
    Points : 114
    Points
    114
    Par défaut Passer un objet user en parametre
    Bonjours,
    Je programme habituellement en vbscript sous asp. Mais pour mon présent projet j'ai choisi Vb6 pour cause de rapidité(Programme qui scrute des site web d'annonce 24h/24).

    Donc jai transfere mon code asp sous vb6.
    Tout allais bien jusqu'a ce que je tombe sous un objet(type) que je veux passer en paramettre dans une procedure.

    Lors de la compilation il me donne l'erreur suivante:

    Erreur de compilation:
    Type défini par l'utilisateur non défini


    Voici ma procedure :
    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
    19
    20
    21
    22
    '********************************************************************************************
    '   Procedure qui update l'annonce avec les nouveau élement
    '********************************************************************************************
    Sub UpdateAnnonceKijiji(objAnnonce As AnnonceAuto)
        Dim objConn As ADODB.Connection
        Dim strSqlUpdateAnnonceKijiji As String
     
        strSqlUpdateAnnonceKijiji = "UPDATE dbo.tblAnnonce SET strTitreAnnonce = '" + FixQuote(objAnnonce.strTitre) + "', strDetailAnnonce = '" + FixQuote(Trim(objAnnonce.strDetail)) + "', bActiveAnnonce = 1 WHERE ((FK_Site = 2) OR (FK_Site = 3)) AND (iNumberAnnonce = " + CStr(objAnnonce.iNumber) + ")"
        Response "strSqlUpdateAnnonceKijiji |" + strSqlUpdateAnnonceKijiji + "|"
     
        'cree la connection
        Set objConn = CreateObject("ADODB.Connection")
        objConn.ConnectionString = strConn
        objConn.Open
     
        objConn.Execute strSqlUpdateAnnonceKijiji
     
        'fermer la connection
        objConn.Close
        Set objConn = Nothing
     
    End Sub
    Voici ma procedure qui appele ce procedure



    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Private Sub Command1_Click()
        Dim objAds As Module1.AnnonceAuto
        Dim astrListeAnnonceVide() As Long
        Dim iBoucleRempliANnonce As Long
        Const ciNbDetailAnnonceAlaFois  As Integer = 11
     
        'trouve les X annonce vide
        astrListeAnnonceVide = astrRempliListeAnnonceVide(ciNbDetailAnnonceAlaFois)
     
        'boucle de remplissage d'annonce
        For iBoucleRempliANnonce = 0 To UBound(astrListeAnnonceVide)
                'rechercher les info de l'annonce sur la page web
            Set objAds = RempliKijiji(astrListeAnnonceVide(iBoucleRempliANnonce))
            'verifier si pas effacer
            If objAds.bDeleted = 0 Then
                UpdateAnnonceKijiji objAds
            End If
            ResponseHr
        'Fin de boucle de remplissage d'annonce
        Next
     
     
        Response.write "<hr><hr><hr><h1>ON RECOMMENCE</h1><hr><hr><hr>"
     
        'metre le timer a on
        Timer1.Enabled = True
     
    End Sub

    et pour fini voici ma class

    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
    19
    20
    21
    22
    23
    24
    25
    '********************************************************************************************
    '   CLASSE ANNONCE AUTO
    '********************************************************************************************
    Type AnnonceAuto
         bAuto As Boolean
         bVendu As Boolean
         bDeleted As Boolean
         iNumber    As Long
         strTitre As String
         strDetail As String
         curPrice As Currency
         strMake As String
         strModel As String
         iAnnee As Integer
         strVille As String
         iKm As Long
         iNbDoor As Integer
         iNbCyl As Integer
         bAutomatique As Boolean
         bAc As Boolean
         iPhone1 As Long
         iPhone2 As Long
         strUrl As String
         strImage As String
    End Type

    Je veux aussi dire que tout est fait dans la page de code dur form1

  2. #2
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 165
    Points
    17 165
    Par défaut
    Dim objAds As Module1.AnnonceAuto
    dans la page de code dur form1
    J'ai un doute, en VB6, la declaration de type doit être fait dans un module.bas
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Bonjour Progelect,

    J'ai un doute, en VB6, la declaration de type doit être fait dans un module.bas
    Je préfère répondre ici plutôt que de t'envoyer un MP car voilà là une interprêtation fréquente de l'aide en ligne... et donc un tir à rectifier de manière à servir à chacun.

    Le mot module ne signifie pas forcément module.bas ...

    On écrit au niveau module d'une Form, par exemple, lorsque l'on écrit tout en haut du code, avant toute procédure.

    Exemple, maintenant, d'une déclaration de type au niveau module de la Form :

    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
    19
    
    'nous sommes ici au niveau module de la Form
    Private Type AAAA
       nom As String * 10
       prenom As String * 15
    End Type
    
    Dim toto As AAAA
    
    'nous passons maintenant au niveau des procédures de la Form
    Private Sub Form_Activate()
      toto.nom = "DEMO"
      toto.prenom = "petite"
    End Sub
    
    Private Sub Command1_Click()
      MsgBox toto.prenom & " " & toto.nom
    End Sub

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Bonjour,
    en confirmation de ce que dit ProgElect ta déclaration de type doit être faite dans un Module (projet/ajouter Module).
    Ta déclaration doit être précédée du mot..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Public Type AnnonceAuto
        ....
        ....
        End Type
    Tu peu alors la récupérer partout dans le projet.
    A+

  5. #5
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 165
    Points
    17 165
    Par défaut
    Au niveau de la Form
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Type AAAA
       nom As String * 10
       prenom As String * 15
    End Type
    Pas d'erreur.
    Mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Type AAAA
       nom As String * 10
       prenom As String * 15
    End Type
    La erreur de compilation, impossible de definir un type public à l'interrieur d'une classe.
    ucfoutu, il est des suptilités que je n'ai pas encor assimilé , pourtant en lisant correctement la description de l'erreur, j'aurrai dût depuis longtemps essayer le Private.
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Oui, Progelect,

    Je dois avouer deux choses :
    1) je me suis moi-même longtemps (trop) trompé sur ce point là !
    2) la confusion sur le mot module; est, d'une certaine manière assez "entretenue" par la présentation faite par VB lors de l'insertion d'un module.bas (le mot .bas disparait de la fenêtre d'ajout).
    Tu es donc largement excusable (ou alors j'ai des baffes à prendre rétroactivement moi aussi...)

    Private change tout ... et Public est par défaut !!!
    Sacré VB, Va...

    Mais j'espère bien que ce que je suis en train de conduire à son terme saura être plus clair ...
    Lis là (mon message de ce jour) :
    http://www.developpez.net/forums/sho...33#post2556833

    Tu seras également le bienvenu, si tu le souhaites...

    Un dernier point, maintenant : Confort de développement ou économie de ressources ? l'équilibre est parfois difficile à trouver. Un bon tuto sur ce sujet serait sans aucun doute de nature à prendre les décisions les mieux éclairées

    Amitiés

  7. #7
    Membre régulier
    Homme Profil pro
    Webmaster
    Inscrit en
    Septembre 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 105
    Points : 114
    Points
    114
    Par défaut
    j'avais déja essayer de metre mon type dans un module(d'ou le fait que j'ai oublier denlever Module1.AnnonceAuto dans mon code)

    Donc voici ce que j'ai maintenant

    Form1
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    Private Sub Command1_Click()
        Dim objAds As AnnonceAuto
        Dim astrListeAnnonceVide() As Long
        Dim iBoucleRempliANnonce As Long
        Const ciNbDetailAnnonceAlaFois  As Integer = 11
     
        'trouve les X annonce vide
        astrListeAnnonceVide = astrRempliListeAnnonceVide(ciNbDetailAnnonceAlaFois)
     
        'boucle de remplissage d'annonce
        For iBoucleRempliANnonce = 0 To UBound(astrListeAnnonceVide)
                'rechercher les info de l'annonce sur la page web
            Set objAds = RempliKijiji(astrListeAnnonceVide(iBoucleRempliANnonce))
            'verifier si pas effacer
            If objAds.bDeleted = 0 Then
                UpdateAnnonceKijiji objAds
            End If
            ResponseHr
        'Fin de boucle de remplissage d'annonce
        Next
     
     
        Response.write "<hr><hr><hr><h1>ON RECOMMENCE</h1><hr><hr><hr>"
     
        'metre le timer a on
        Timer1.Enabled = True
     
    End Sub
     
     
    '********************************************************************************************
    '   Procedure qui update l'annonce avec les nouveau élement
    '********************************************************************************************
    Sub UpdateAnnonceKijiji(objAnnonce As AnnonceAuto)
        Dim objConn As ADODB.Connection
        Dim strSqlUpdateAnnonceKijiji As String
     
        strSqlUpdateAnnonceKijiji = "UPDATE dbo.tblAnnonce SET strTitreAnnonce = '" + FixQuote(objAnnonce.strTitre) + "', strDetailAnnonce = '" + FixQuote(Trim(objAnnonce.strDetail)) + "', bActiveAnnonce = 1 WHERE ((FK_Site = 2) OR (FK_Site = 3)) AND (iNumberAnnonce = " + CStr(objAnnonce.iNumber) + ")"
        Response "strSqlUpdateAnnonceKijiji |" + strSqlUpdateAnnonceKijiji + "|"
     
        'cree la connection
        Set objConn = CreateObject("ADODB.Connection")
        objConn.ConnectionString = strConn
        objConn.Open
     
        objConn.Execute strSqlUpdateAnnonceKijiji
     
        'fermer la connection
        objConn.Close
        Set objConn = Nothing
     
    End Sub
    Et dans le module1(qui est un module et non un module de class)
    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
    19
    20
    21
    22
    23
    24
    25
    '********************************************************************************************
    '   CLASSE ANNONCE AUTO
    '********************************************************************************************
    Public Type AnnonceAuto
         bAuto As Boolean
         bVendu As Boolean
         bDeleted As Boolean
         iNumber    As Long
         strTitre As String
         strDetail As String
         curPrice As Currency
         strMake As String
         strModel As String
         iAnnee As Integer
         strVille As String
         iKm As Long
         iNbDoor As Integer
         iNbCyl As Integer
         bAutomatique As Boolean
         bAc As Boolean
         iPhone1 As Long
         iPhone2 As Long
         strUrl As String
         strImage As String
    End Type

    Mais maintenant quand j'essais de compiler ca me donne l'erreur suivant :
    Erreur de compilation:

    Seuls les types publics définis pas l'utilisateur et qui sont définis dans les modules d'objects publics, peuvent êtrs utilisés comme types renvoyés ou
    paramètres, pour des procédures publiques de modules de classe, ou comme champs de types publics définis pas l'utilisateur

    Je sais pas si ca peux aider mais dans les propriété du projet, le type de projet est EXE standard

  8. #8
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Pardonne-moi, mais plusieurs choses font que je ne peux vraiment pas te suivre ...

    Set objAds = RempliKijiji(astrListeAnnonceVide(iBoucleRempliANnonce))
    puis :

    UpdateAnnonceKijiji objAds
    alors que :

    Sub UpdateAnnonceKijiji(objAnnonce As AnnonceAuto)
    procédure (au demeurant publique par défaut), dans laquelle objannonce = objaAds ... et tu le présentes comme as AnnonceAuto (qui est un type utilisateur)...

    Sacré mélange qui m'échappe totalement (et à M. VB apparemment également...).

    je vois mal (et devine mal) où tu veux ainsi en venir....

  9. #9
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 165
    Points
    17 165
    Par défaut
    Je suis un peu long a la detente mais je poste tout de même, ayant passé 3/4 d'heure dessus
    Pour ma part j'ai réussi comme cela
    dans un module.BAS
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Option Explicit
     
    Public Type AnnonceAuto
         bAuto As Boolean
         bVendu As Boolean
         bDeleted As Boolean
         iNumber    As Long
         strTitre As String
         strDetail As String
         curPrice As Currency
         strMake As String
         strModel As String
         iAnnee As Integer
         strVille As String
         iKm As Long
         iNbDoor As Integer
         iNbCyl As Integer
         bAutomatique As Boolean
         bAc As Boolean
         iPhone1 As Long
         iPhone2 As Long
         strUrl As String
         strImage As String
    End Type
    Public Sub Main()
    Form1.Show
    End Sub
    Public Sub UpdateAnnonceKijiji(objAnnonce As AnnonceAuto)
    Debug.Print objAnnonce.bAc
    Debug.Print objAnnonce.bAuto
    Debug.Print objAnnonce.bAutomatique
    Debug.Print objAnnonce.bDeleted
    Debug.Print objAnnonce.bVendu
    Debug.Print objAnnonce.curPrice
    Debug.Print objAnnonce.iAnnee
    ' ....
    ' ....
    Debug.Print objAnnonce.strUrl
    Debug.Print objAnnonce.strVille
    End Sub
    Dans Form1
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Option Explicit
     
    Private Sub Command1_Click()
    Dim MeobjAds As AnnonceAuto
    MeobjAds.bAc = True
    MeobjAds.bAuto = True
    MeobjAds.bAutomatique = True
    MeobjAds.bDeleted = True
    MeobjAds.bVendu = True
    MeobjAds.curPrice = CCur("-922 337 203 685 477,5808")
    MeobjAds.iAnnee = 2007
    MeobjAds.iKm = 45000
    MeobjAds.iNbCyl = 32657
    MeobjAds.iNbDoor = 25
    MeobjAds.iNumber = 654321
    MeobjAds.iPhone1 = 1234567890
    MeobjAds.iPhone2 = 987654321
    MeobjAds.strDetail = "les details"
    MeobjAds.strImage = "MonImage.JPG"
    MeobjAds.strMake = "Maker"
    MeobjAds.strModel = "Le model"
    MeobjAds.strTitre = "le Titre"
    MeobjAds.strUrl = "http://www.developpez.net/forums/showthread.php?t=421655"
    MeobjAds.strVille = "Bonneville"
     
    UpdateAnnonceKijiji MeobjAds
    End Sub
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  10. #10
    Membre régulier
    Homme Profil pro
    Webmaster
    Inscrit en
    Septembre 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 105
    Points : 114
    Points
    114
    Par défaut
    ucfoutu

    C'est que la fonction RempliKijiji renvois un object qui est de type AnnonceAuto

    UpdateAnnonceKijiji lui a comme parametre un object annonceAuto

    Donc je recois l'object objAds de type Annonceauto par la fonction RempliKijiji
    Ensuite je passe objAds en parameter a la procedure UpdateAnnonceKijiji

  11. #11
    Membre régulier
    Homme Profil pro
    Webmaster
    Inscrit en
    Septembre 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 105
    Points : 114
    Points
    114
    Par défaut
    Merci beaucoup ProgElecT

    Ca marche, jai tout transfere mes procedure et fonction dans module1 et ca fonctionne

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

Discussions similaires

  1. comment passer des objet en parametre?
    Par Siñal dans le forum Langage
    Réponses: 9
    Dernier message: 01/06/2009, 09h35
  2. passer un objet en parametre d'une methode RMI
    Par Dryss51 dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 22/02/2008, 02h10
  3. Passer un objet en parametre
    Par awikatchikaen dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 30/05/2007, 11h43
  4. Passer un objet en parametre avec html:link
    Par faico dans le forum Struts 1
    Réponses: 2
    Dernier message: 01/05/2007, 00h40
  5. Réponses: 4
    Dernier message: 20/04/2006, 11h07

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