Resumen Almacenar letras en la propiedad ItemData

Hola Oscar,

Tenés suerte de que tu código alfanumérico tenga sólo tres caracteres, si fueran más (más de cuatro) no se podría implementar la solución que paso a detallar:

Consiste en almacenar los caracteres como una expresión numérica: la propiedad ItemData es de tipo Long (4 bytes). Podemos utilizar esos 4 bytes para almacenar un caracter en cada uno, de la siguiente manera:

Function Empaquetar(ByVal Cadena As String) As Long

   Dim i As Integer, lResult As Long

   For i = 1 To Len(Cadena)
     lResult = lResult * 256 + Asc(Mid$(Cadena, i, 1))
     If i > 4 Then Exit For
   Next

   Empaquetar = lResult

End Function

Esta función acepta una cadena de caracteres y devuelve un valor Long, que podés almacenar en la propiedad ItemData. A la hora de recuperar los valores de dicha propiedad y obtener la cadena correspondiente, entra en juego la función inversa:

Function DesEmpaquetar(ByVal Valor As Long) As String

   Dim sResult As String * 4, i As Byte

   sResult = Space$(4)
   i = 1

   Do While Valor > 0
     Mid$(sResult, 5 - i, 1) = Chr$(Valor Mod 256)
     Valor = Valor \ 256
     i = i + 1
   Loop

   DesEmpaquetar = Trim$(sResult)

End Function

Que recibe el valor Long "empaquetado" y devuelve la cadena original correspondiente.

Bueno, espero que te haya servido, saludos,

Leonardo Bosi
Buenos Aires, Argentina
leobosi@feedback.net.ar
leonardo@bosi.biocom.com
ICQ # 9027216
---------------------------------
"What do you want to reinstall today?"

-----Mensaje original-----
De:    Oscar Perez
Enviado el:    Sábado 9 de Mayo de 1998 07:33
Para:    Lista Vb-Esp (Correo electronico)
Asunto:    (VB-ESP) ItemData

Hola a todos...,

Como puedo hacer esto, cuando el valor que recoge ItemData no es un entero,
sino caracteres?

Do While Not MiRecordset.EOF
  MiCombo.AddItem MiRecordset!DcCampo
  MiCombo.ItemData(MiCombo.NewIndex) = MiRecordset!IdCampo
  MiRecordset.MoveNext
Loop

donde DcCampo es una cadena (la que se mostrara en el combo) e IdCampo es
un codigo que se usa para trabajar mas comodamente. Pero el problema es que
IdCampo no es numerico, si fuese asi no habria ningun problema. El problema
es que IdCampo es de tipo texto, con 3 caracteres..., ?Como puedo hacer el
codigo de arriba si IdCampo es tipo texto?

Muchas gracias por todo y un saludo

=======================
Oscar Perez
1998 Barcelona (Espana)
mailto:oscarpg@geocities.com
ICQ #6462336



Resumen Resumen

Visual Basic Página de Visual Basic

Página principal Página principal

www.jrubi.com