border

Miembros:
Mensajes:
Temas:
Online:

Ultimo Miembro:

 
 

Cuenta Bancaria en EEUU
  #1 (permalink)  
Antiguo 29-01-2007, 11:15:10
Un Nuevo Amigo
 
Registrado: nov 2006
Posts: 22
Azrael_al10 Valoración +2
Predeterminado Claves en un objeto Collection

Hola a todos,

quisiera salvar en un fichero un objeto de tipo Collection, pero no encuentro la forma de acceder al key de cada elemento.
¿Alguien sabe cómo se hace?

Muchas gracias y un saludo.

A. Luis Diez
Responder Con Cita
  #2 (permalink)  
Antiguo 29-01-2007, 11:34:12
Avatar de Korku
Usuario VIP del Foro
 
Registrado: feb 2005
Ubicación: España
Posts: 632
Korku Aun no valorado
Contactar con Korku a través de ICQ Enviar un mensaje a través de AIM a Korku Contactar con Korku a través de MSN Contactar con Korku a través de Yahoo Send a message via Skype™ to Korku
Predeterminado

Hola,

Bueno yo no sé como tienes estructurado el código pero te muesto un ejemplo:

En una clase:

Código:
Option Explicit

Private mCol As Collection

Public Sub Add(Item As Variant, Optional sKey As String, Optional Before As Variant, Optional After As Variant)
    Dim objNewMember() As Variant
    
    ReDim objNewMember(0 To 1)
    
    If IsObject(Item) Then
        Set objNewMember(0) = Item
    Else
        objNewMember(0) = Item
    End If
    
    objNewMember(1) = sKey
    
    If Len(sKey) = 0 Then
        mCol.Add objNewMember, , Before, After
    Else
        mCol.Add objNewMember, sKey, Before, After
    End If
End Sub

Public Property Get Item(vntIndexKey As Variant) As Variant
    Dim vItem() As Variant
    vItem = mCol(vntIndexKey)
    
    If IsObject(vItem(0)) Then
        Set Item = vItem(0)
    Else
        Item = vItem(0)
    End If
End Property

Public Property Get ItemKEY(vntIndexKey As Variant) As String
    ItemKEY = mCol(vntIndexKey)(1)
End Property

Public Property Get Count() As Long
    Count = mCol.Count
End Property

Public Sub Remove(vntIndexKey As Variant)    
    mCol.Remove vntIndexKey
End Sub

Public Property Get NewEnum() As IUnknown
    Set NewEnum = mCol.[_NewEnum]
End Property

Private Sub Class_Initialize()
    Set mCol = New Collection
End Sub

Private Sub Class_Terminate()
    Set mCol = Nothing
End Sub
En un formulario:

Código:
Option Explicit

Private Sub Form_Load()
    Dim ClsKey As New CollectionKEY, Itm As Variant
    Dim K As Long
    
    ClsKey.Add "probando... 1", "KEY1"
    ClsKey.Add "probando... 2", "KEY2"
    ClsKey.Add "probando... 3", "KEY3"
    ClsKey.Add "probando... 4", "KEY4", "KEY1"
    ClsKey.Add "probando... 5", "KEY5", , "KEY2"
    
    For K = 1 To ClsKey.Count
        Debug.Print ClsKey.Item(K), ClsKey.ItemKEY(K)
    Next K
    
    Debug.Print
    

    For Each Itm In ClsKey
        Debug.Print Itm(0), Itm(1)
    Next Itm
End Sub
Un saludo :-)
Responder Con Cita
  #3 (permalink)  
Antiguo 29-01-2007, 12:31:44
Un Nuevo Amigo
 
Registrado: nov 2006
Posts: 22
Azrael_al10 Valoración +2
Predeterminado

Por lo que he entendido, con este método tuyo:

Public Property Get ItemKEY(vntIndexKey As Variant) As String
ItemKEY = mCol(vntIndexKey)(1)
End Property

accedes a la clave de cada elemento.
Yo lo tengo que poner en un bucve que recorre la colección entera, el problema es que los datos almacenados en la colección son arrays de String y me da problemas con los índices....

Éste es mi código:

For I = 0 To parcelas.Count - 1
MsgBox "Parcela " & parcelas.Item(I)(0)(1)
Next I
Responder Con Cita
  #4 (permalink)  
Antiguo 29-01-2007, 20:13:04
Moderador
 
Registrado: dic 2002
Ubicación: Madrid
Posts: 4.271
acalanto ha deshabilitado la reputación
Predeterminado

Utiliza el método que te sugiere Korku. Las colecciones no son arrays de string, son lo más parecido a un hashmap en el que se almacenan pares; Una KEY por la que buscar, y un OBJETO que queda contenido en la colección y asociado a esa KEY.

Puedes recorrerlo por su índice (Paradójicamente es algo más lento) o simplemente utilizando la función de Korku, reclamar el objeto por su clave.

Solamente decir que se debe añadir una captura de error al método de korku, pues si se solicita una KEY no contenida en la colección, se produce un error en tiempo de ejecución.
__________________
Un cordial saludo
-Acalanto-

Madrid - España

Visual Basic
Videos Programacion
Foro Programacion
Tutoriales Programacion
Responder Con Cita
  #5 (permalink)  
Antiguo 30-01-2007, 09:18:25
Un Nuevo Amigo
 
Registrado: nov 2006
Posts: 22
Azrael_al10 Valoración +2
Predeterminado

Me temo que no me he explicado bien,
conozco el funcionamiento de las colecciones, lo que no se es cómo funcionan en Visual Basic. Mi problema es que los OBJETOS contenidos en mi colección son arrays de String, entonces si yo hiciera

ItemKEY = mCol(vntIndexKey)(1)

como hace Korku en su código, me inentaría coger el segundo elemento de mi array de String, y ahí me da el problema con los índices.
Responder Con Cita
  #6 (permalink)  
Antiguo 30-01-2007, 21:47:22
Gran Participación en el Foro
 
Registrado: ago 2004
Ubicación: Tunja
Posts: 243
chronos682 Valoración +2
Contactar con chronos682 a través de MSN Contactar con chronos682 a través de Yahoo
Predeterminado

Pues la verdad yo nunca he intentado agregar matrices de datos a una colección pero si tu dices que se puede yo te creo. Entonces lo único que se me ocurre es que utilices de bucles así:
Código:
Dim i As Integer
Dim X As Integer
Dim sCadena() As String
Dim sItem As String

For i = 1 to mcol.Count
Set sCadena = mcol(i)  
For X = 0 To UBound(sCadena) 'Aquí hay que tener encuenta si la matriz empieza con 0
     sItem = sCadena(X) 'En sItem se guardaría cada elemento de la matriz, luego tendrías que detyerminar qué hacer con esa información
Next
Next
Es lo único que se me ocurre, espero te sirva de algo.
__________________
HERNAN GUILLERMO SIABATO M.
Medicina - UPTC
chronos682@hotmail.com
Responder Con Cita
  #7 (permalink)  
Antiguo 31-01-2007, 10:26:08
Un Nuevo Amigo
 
Registrado: nov 2006
Posts: 22
Azrael_al10 Valoración +2
Predeterminado

Muchas gracias, pero lo cierto es que eso no me sirve para lo que yo quiero.
No tengo problemas en acceder a los datos, para lo que tengo problemas es para saber qué KEY está asociada a cada array de String. Lo que quiero es "volcar" de alguna manera el contenido completo de la colección en un fichero de texto de una manera similar a la siguiente.

KEY OBJETO(0) OBJETO(1) OBJETO(2) ...

En un principio había pensado en recorrer la coleccion con un bucle y hacer (como haría en C++) un getKey y luego acceder al array de cadenas de caracteres y recorrerlo para guardar cada cadena. Pero lo que no consigo hacer en Visual Basic es lo que haría el getKey; y si aplicara el método que me ha recomendado Korku de acceder al elemento 1 del objeto, al ser éste un array intentaría acceder a la cadena que está en la posición 1 y si no existe me da un error.

Siento parecer brusco o desagradable, pero sé que no me explico demasiado bien y me preocupa estar haciéndoles perder el tiempo por un problema que probablemente es muy sencillo.

Muchas gracias otra vez y un saludo.
Responder Con Cita
Respuesta


Herramientas
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Trackbacks are habilitado
Pingbacks are habilitado
Refbacks are habilitado


Temas Similares
Tema Autor Foro Respuestas Último Mensaje
Como cargar DropDownLi con una collection o un datareader? fvera ASP.NET 0 16-09-2006 23:40:51
claves y usuarios en access sagamoal VBA (Excel, Word, Outlook, Access) 3 27-12-2005 14:12:54
Thread y collection juanchojif Visual Basic.NET 2003 & 2005 14 13-09-2005 10:38:58
Lista claves del registro geq Visual Basic 6.00 3 10-08-2005 23:11:22
Objeto Collection chlsaul Visual Basic 6.00 6 17-03-2005 14:23:04


La franja horaria es GMT. Ahora son las 03:42:20.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO 3.1.0
A vBSkinworks Design

Alojado en el servicio Premium de Masquewebs | Diseño mejorado por MasqueWebs

right