• Sábado 27 de Abril de 2024, 00:39

Autor Tema:  Conventir entero a cadena o.o?  (Leído 2864 veces)

lineare

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Conventir entero a cadena o.o?
« en: Viernes 7 de Mayo de 2010, 17:39 »
0
Hola disculpen quisiera saber si es posible poder evaluar una lista de un combobox que contiene numero a una cadena ya que en mi consulta el campo es texto.

Código: Visual Basic
  1. Private Sub Option1_Click(Index As Integer)
  2. 'Pone en blanco las columnas de datagrid y los combo de consulta
  3.    Combo1.Clear
  4.     Combo2.Clear
  5.     Combo3.Clear
  6.     DataGrid1.ClearSelCols
  7. 'COMIENZA LA CONSULTA DEPENDIENDO DEL RESULTADO DE LOS OPTION BOTON
  8.    X = Index + 1
  9.     If X = 10 Then X = "A"
  10.     If X = 11 Then X = "B"
  11.     linea.RecordSource = "SELECT * From sqlies WHERE estacion.linea = '" & X & "'"
  12.     linea.Refresh
  13.     Do While Not linea.Recordset.EOF
  14.         Combo1.AddItem linea.Recordset.Fields(1)
  15.         Combo3.AddItem linea.Recordset.Fields(1)
  16.         linea.Recordset.MoveNext
  17.     Loop
  18.     Combo1.ListIndex = 0
  19. End Sub
  20.  
  21. Private Sub Combo1_Click()
  22. 'DA LA CONSULTA DE LAS ESTACIONES
  23.    If Combo1.text = "No hay ninguna estación seleccionada " Then
  24.     Exit Sub
  25.     Combo3.ListIndex = Combo1.ListIndex
  26.     [color=#FF4000]linea.RecordSource = "SELECT estacion.nombre_estacion FROM sqlies WHERE estacion.orden=" _
  27.     & Val(Combo3.text)[/color]
  28.     linea.Refresh
  29.     Combo2.Clear
  30.     Do While Not linea.Recordset.EOF
  31.         Combo2.AddItem linea.Recordset.Fields(0)
  32.         linea.Recordset.MoveNext
  33.     Loop
  34.     Combo2.ListIndex = 0
  35. End Sub
  36.  
  37.  


lo que necesito es que en el combo 2 se desplieguen la lista de nombres de pendiendo del option boton que se seleccione

De antemano muchas gracias espero sus sugerencias  ^_^

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Conventir entero a cadena o.o?
« Respuesta #1 en: Lunes 10 de Mayo de 2010, 18:57 »
0
No acabo de entender lo que quieres, asumo que no te explicas con claridad.



Un combobox, puede ser comparado por el texto que aloja o por el índice. En esto es lo mismo que una matriz.

Comparar usando el índice (no nos importa el texto en este caso)
Código: Visual Basic
  1.  
  2. if combo1.listindex = 5 then
  3.  ' el código que se quiera asociar.
  4. end if
  5.  
  6.  
Aquí le hemos preguntado si está seleccionado el elemento 5º en el combobox, no nos importa su contenido. Esto es útil cuando el contenido puede variar pero sabemos de fijo que implica. Por ejemplo imagina un combobox con 7 elementos. El elemento 0 podría ser nombre de país, el elemento1 nombre de ciudad, ................ el elemento 5 nombre de persona, y el elemento 6 número de afiliación a lo que sea. Entonces en el ejemplo, le estaríamos indicando qué interesa saber; si está seleccionado el nombre, sea éste el que sea.

Otro caso, comparando el texto seleccinado (el contenido del índice seleccionado)
Código: Visual Basic
  1.  
  2. if combo1.list(combo1.listindex)= "Pedro" then
  3.     ' el código asociado que queremos ejecutar
  4. end if
  5.  
  6.  
Como puedes observar el acceso al texto es a través de su propiedad list(número), imagina simplemente que tiene una matriz llamada list, así de simple.
Si invocamos como índice de la matriz, el valor: 'combo1.listindex', pués es claro que el índice deseado es el índice seleccionado. Esto es útil para comparar elementos cuya naturaleza son todas del mismo tipo (para esto un listbox suele ser más explícito aunque ocupa más espacio, por el despliegue).

Los combos son útiles para contener diferentes tipos de 'elementos' (nada impide que contengan un único tipo de 'elementos') y las listas son muy útiles para los elementos del mismo tipo. Imagina un combo con 3 elementos: Unidades, carpetas y ficheros e imagina una lista donde tras seleccionar uno de esos 3 elementos se llena con las unidades del sistema, las carpetas de la unidad actual o los ficheros de la carpeta actual.

El uso es totalmente libre, sin embargo es ese uso el que nos indica cuando nuestra selección exige una comparación por índice o por 'texto', en el caso del combo donde hay varios 'elementos' distintos, utilizar el índice es más rápido, cómodo y claro que comparar por el texto, en cambio cuando el combo tiene todos sus ítems de un único 'elemento' la utilidad recáe en el texto.

Otro código... recorrer el combo, es lo mismo que recorrer una matriz.
Código: Visual Basic
  1.  
  2. for k= 0 to combo.listcount -1
  3.      if combo.list(k)= Nombre then
  4.           ' el código asociado.
  5.      end if
  6. next
  7.  
  8.  

Sólo recordar que a diferencia de una lista, un combo actúa exclusivamente como una matriz de options-button, es decir sólo hay 1 elemento seleccionado a la vez (una lista permite múltiple selección, el combo no).

El combo, te indiqué mas arriba tiene ese doble 'comportamiento' (cada elemento puede representar una familia, o todos los elementos pertenecen a la misma familia), que no es un comportamiento íntrínseco del control, sino exclusivamente del diseño (el concepto que tu albergas). Es importante comprender esto explicado, para sacar el mayor provecho posible aun combobox.... Pero precisamente porque existe el listbox, el combobox carece de sentido que tenga múltiple selección.

Entonces, ¿ cómo miramos la múltiple selección...? imagina que tenemos un hotel y se requiere de los clientes que elijan qué días quieren recibir el desayuno a lo largo de la semana... cargamos un listbox con los días de la semana, en el listbox se activa la propiedad multiselect (y si se se requiere utilizar casillas de marca style=checkbox). Este código lo omitimos luego entenderás que es fácilmente deducible de los siguientes...

Luego, para preparar los desayunos ... para saber la lista de hoy 'Jueves' de los clientes a los que hay que preparar el desayuno, tendremos 2 listbox, en uno los nombres de los clientes, cuyo índice es el nº de habitación y en otro listbox se cargará la lista de la semana de ese cliente.(esto último es imprescindible porque usamos una base de datos, tiene un carácter explicativo).
Código: Visual Basic
  1.  
  2.     dim Hoy as byte
  3.     Hoy = 4 ' jueves
  4.     For k = 0 to listHabitaciones.listcount-1
  5.           if listHabitaciones.list(k)<>"" then   ' la habitación no está desocupada, hay un cliente
  6.                 ' 1 cargar la lista desayuno semanal (que eligió el cliente) desde la base de datos al listbox, luego...
  7.                 ' 2 el cliente de la habitación k, tiene encargado desayuno para hoy ?
  8.                if listDesayuno.Selected(Hoy)= TRUE then
  9.                      ' 3 preparar desayuno para la habitación k
  10.                end if
  11.           end if
  12.     next
  13.  
  14.  
Naturalmente si utilizamos una base de datos esto lo haríamos sin necesidad de listbox, pero se trata de explicar la funcionalidad del listbox y del combobox.

Otro modo de recorrer un listbox, pero para comprobar su propiedad múltple selección
Código: Visual Basic
  1.  
  2. for k= 0 to list1.listcount -1
  3.      if list1.selected(k) = true then
  4.            ' lo que vayamos a hacer...
  5.      end if
  6. next
  7.  
  8.  

Por último, cuando usamos un combo, podemos además elegir un comportamiento ligeramente diferente basado en la propiedad style del combobox, por defecto se suele usar la opción 'dropdown combo', con esta opción es posible introducir un texto que no figura en la lista, el evento change se encargade registrar este caso, pero sólo deberíamos marcar que ha existido cambió y validarlo con el evento validate, hay que evento change ocurre con cada carácter pulsado . Pero imagina que tenemos los días de la semana en un combo, evidentemente no nos podemos arriesgar a que alguien ponga 'pepino' como selección, sino que los días deben ser fijos desde lunes hasta domingo, en este caso, en la propiedad style elegimos 'Dropdown list'.

Supongo que dadas las explicaciones debería quedarte claro el tema aunque yo no haya entendido realmente cual es tu problema.

----------------
p.d.: Ahora al volver a leerte lo que preguntas, me parece entender lo que tan farragosamente has liado... de hecho la pregnta está mal planteada y podrías haber omitido todo el código porque ni siquiera tiene que ver con combos ni base de datos.
al parecer tu quieres procesar una variable numérica como string, esto es algo tan elemental, en los lenguajes que debería estar prohibido preguntarlo. Por que es una simple conversión de datos. Después de aprender los tipos de datos básicos que admite un lenguaje lo siguiente a aprender es como convertir uno en otro cuando esto es posible:

Código: Visual Basic
  1.  
  2.   dim Precio as long
  3.   dim Valor as string
  4.      Precio = 1033
  5.  
  6.      Valor= CStr(Precio) & "Euros."  asignamos sobre una variable string, el valor de una variable numérica, para ello lo convertimos (convertString)
  7.  
  8.     msgbox valor
  9.      
  10.  
  11.  
«Ma non troppo»
----> ModoVacaciones = False<----

lineare

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Conventir entero a cadena o.o?
« Respuesta #2 en: Martes 11 de Mayo de 2010, 15:51 »
0
Hola muchas gracias por responder y me disculpo por no ser tan explicits el problema que tengo es que cuando ejecuto el programa me aparece el siguiente error:

No se han especificado valores para algunos de los parametros requeridos

y cuaqndo le pongo en depurar me sale que esta llinea de codigo esta mal

Código: Visual Basic
  1. RecordSource = "SELECT estacion.nombre_estacion FROM sqlies WHERE estacion.orden=" & Val(Combo3.text)
  2.  

lo que no estiendo es porque me marca error si este codigo ya habia funcionado con otra base de datos crei que seria por que lo estaba tomando como entero ya que trabaje con matrices pero al parecer es otra cosa

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Conventir entero a cadena o.o?
« Respuesta #3 en: Martes 11 de Mayo de 2010, 22:23 »
0
Código: Visual Basic
  1. if combo3.text <>"" then
  2.       RecordSource = "SELECT estacion.nombre_estacion FROM sqlies WHERE estacion.orden = " & Combo3.text
  3. end if
  4.  
Nota el:  Combo3.text , sin el val, la base de datos espera una cadena de textos, así el valor sea un número. Una query pasada por vb es una cadena de texto, espera TEXTO. si el registro luego resulta almacenar datos numéricos, luego ya lo convertirá a numero...

p.d.: acostúmbrate a dejar espacios en blanco donde vayan, ya que  'orden=' es distinto de 'orden =' lo mismo que 'x + 3' es una operación, 'x+3' se interpreta como una variable, no como una operación.
«Ma non troppo»
----> ModoVacaciones = False<----

lineare

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Conventir entero a cadena o.o?
« Respuesta #4 en: Miércoles 12 de Mayo de 2010, 17:36 »
0
Hola disculpa la molestia pero al momento de ejecutar me sale un error y el mensaje que me aparece es relacionado al adodc "No se han especificado valores para algunos de los parametros requeridos la verdad no se a que se deba ya revise varias veces la conexion y esta al igual que la consulta

Código: Visual Basic
  1.  Private Sub Combo1_Click()
  2. 'DA LA CONSULTA DE LAS ESTACIONES
  3.    If Combo1.Text = "No hay ninguna estación seleccionada " Then Exit Sub
  4.     Combo3.ListIndex = Combo1.ListIndex
  5.     If Combo3.Text <> "" Then
  6.     linea.RecordSource = "SELECT estacion.nombre_estacion FROM sqlies WHERE estacion.linea = " & Combo3.Text
  7.     linea.Refresh
  8.     Combo2.Clear
  9.     Do While Not linea.Recordset.EOF
  10.         Combo2.AddItem linea.Recordset.Fields(2)
  11.         linea.Recordset.MoveNext
  12.     Loop
  13.     Combo2.ListIndex = 0
  14.     End If
  15. End Sub
  16.  
  17.  


De antemano muchas gracias por t ayuda y paciencia :hola:

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Conventir entero a cadena o.o?
« Respuesta #5 en: Miércoles 12 de Mayo de 2010, 21:59 »
0
El asunto es que yo no tengo ningún detalle sobre tu base de datos, preguntabas la manera de convertir variables así no tenía necesidad de mirar tu código.

Si tu afirmas que te funcionaba esa query, no tiene sentido que revisara esa parte del código... ahora, mirándolo bien: lo que veo es que al parecer tienes una tabla llamada sqlies, con unos campos llamados : 'estacion.nombre_estacion' y 'estacion.linea'. Ahora bien, un punto no puede formar parte del nombre de un campo. Por lo que asumo que  'estacion' debe ser el nombre de una tabla pero entonces que es sqlies ?. No tengo modo de saberlo. Quizás sea otra tabla...? . tambien me cabe pensar que

No puedes preguntarle a la bd, dame las bebidas.nevera.casa.Juan  tomando la casa.andres si las bebidas.nevera.cerveza.marca =  'X' . O estamos en casa de Juan o en casa de Andrés o tenemos que relacionar ambas casas.

Si sqlies es una tabla y dicha tabla tiene 2 campos llamados 'nombre_estacion'  y 'linea' la query debería ser:
Código: Visual Basic
  1.  
  2.    "SELECT nombre_estacion FROM sqlies WHERE linea = " & Combo3.Text
  3.  
  4.  
En cambio si la tabla es estacion y dicha tabla tiene 2 campos llamados 'nombre_estacion'  y 'linea' la query debería ser:
Código: Visual Basic
  1.  
  2.    "SELECT nombre_estacion FROM estacion WHERE linea = " & Combo3.Text
  3.  
  4.  

No hay necesidad de relacionar 2 tablas cuando lo que se pregunta (la condición: linea = esto)  y lo que se obtiene ( select estecampo) proceden de la misma tabla.

Yo acostumbro a llamar mis tablas tblNombrequesea y los campos con el tipo de datos, por ejemplo:  strLinea, intLinea, bytLinea. No es obligatorio pero al menos para informar sin escribir muchos datos y rellenar una hoja de detalles ayuda bastante (en el foro al menos, tu luego ten lo que quieras en tu bd). Del mismo modo si Linea es un control adodc podrías llamarlo adoLinea.

El método refresh, sólo debe usarse cuando la query sigue siendo la misma si no, debe reinvocarse el recordset. La query sólo establece el filtro que se usará con la base de datos...

Este es el método correcto de proceder:

Código: Visual Basic
  1.  
  2. Adodc1.RecordSource = "SELECT nombre_estacion FROM estacion WHERE linea = " & Combo3.Text
  3. Adodc1.Recordset.Requery
  4.  

Fíjate: como tienes al parecer un control adodc llamado linea y un campo llamado linea , toma la precaución de de sustituir los nombres adecuadamente donde correponda.

p.d.: se me olvidaba...
Hay otro error, un poco más abajo. Tu en la query solicitas 1 único campo, luego tu recordset contiene sólo datos para el campo 'nombre_estacion' luego la línea de código: Combo2.AddItem linea.Recordset.Fields(2) carece de sentido, no existe el 'fields(2)' existe sólo el fielsd(0). podrías cambiar tu query para seleccionar más de 1 campo... especificando cuales más quieres (SELECT estacion , numero , dia  FROM ...)  o bien todos ( SELECT * FROM .... )

Estos detalles ya no son un problema de vb sino de bases de datos y más específicamente de falta de conocimientos del lenguaje de consulta a bases de datos...
«Ma non troppo»
----> ModoVacaciones = False<----

lineare

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Conventir entero a cadena o.o?
« Respuesta #6 en: Jueves 13 de Mayo de 2010, 15:58 »
0
Si tenias razon estaba haciendo mal la consulta ya funciona correctamente gracias, creo que tendre que estudiar un poco sql  :P muchisimas gracias por tu tiempo y paciencia  ^_^