Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Rellenar Varios Combos De Varios Formularios Iguales A La Vez? [SOLUCIONADO]
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Rellenar Varios Combos De Varios Formularios Iguales A La Vez? [SOLUCIONADO] 
 
Pues eso, tengo un par de combobox (categorias) en los que voy rellenandolos en varios formularios diferentes con los datos obtenidos de una base de datos, el tema esque imagino que podré hacer una funcion para rellenarlos de una sola vez sin tener que copiar todo el codigo, verdad? alguna luz?

Gracias!
 



 
última edición por CanihoJR el Viernes, 09 Octobre 2009, 19:19; editado 1 vez 
CanihoJR - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Rellenar Varios Combos De Varios Formularios Iguales A La Vez? 
 
En la Utilidad que subí hace unos días hay un módulo llamado formularios que tiene varias funciones para rellenar los campos, grabar los datos, rellenar los combos, etc. de forma automática. Adjunto el código aquí y si quieres verlas en funcionamiento, pues bájate la utilidad y la testeas.

Esta  es la función llenalista, recibe el objeto combo a rellenar, el nombre de la tabla de donde sale la lista, el campo que queremos rellenar y opcionalmente dos más que aparecerán separados por - o · y la condición de filtrado de la tabla a buscar (opcional también)

PUBLIC SUB llenalista(oCombo AS ComboBox, tabla AS String, campo AS String, OPTIONAL mostrar AS String, OPTIONAL mostrar2 AS String, OPTIONAL condicion AS String) AS String[]
'Rellena un combobox con el contenido de campo y, opcionalmente de
'otros dos campos más. En cuyo caso aparecen separados por la cadena " · "

  DIM rs AS Result
  DIM retorno AS String[]
  DIM valor, cond, cSql AS String
  
  retorno = NEW String[]
  IF condicion THEN cond = " where " & condicion
  IF mostrar THEN
    cSql = "select " & mostrar & ", " & campo & " from " & tabla & cond & " order by " & mostrar
    IF mostrar2 THEN
        cSql = "select " & mostrar & ", " & mostrar2 & ", " & campo & " from " & tabla & cond & " order by " & mostrar & ", " & mostrar2
    ENDIF
  ELSE
    cSql = "select " & campo & " from " & tabla & cond & " order by " & campo
  ENDIF
  rs = comun.hconn.Exec(cSql)
  WHILE rs.Available
    retorno.Add(If(mostrar, rs[mostrar] & If(mostrar2, " - " & rs[mostrar2], "") & " · " & rs[campo], rs[campo]))
    IF rs[campo] = oCombo.text THEN
       valor = If(mostrar, rs[mostrar] & If(mostrar2, " - " & rs[mostrar2], "") & " · " & rs[campo], rs[campo])
    ENDIF
    rs.MoveNext
  WEND
 oCombo.list = retorno
 oCombo.Text = valor
 
END


Luego en la función que graba los datos (no la muestro entera) a la hora de grabar el combo:

 rsDatos[campo.Name] = If(InStr(valor, " · ") > 0, Right(valor, Len(valor) - InStr(valor, " · ") - 3), valor)

No sé si soy demasiado confuso. Me temo que sí.
 




===================
No podemos regresar
 
última edición por shordi el Viernes, 09 Octobre 2009, 19:23; editado 2 veces 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Rellenar Varios Combos De Varios Formularios Iguales A La Vez? 
 
Me contesto a mi mismo!

No sabia que los ComboBox (en mi caso) podia pasarlo como variable a una funcion como Objeto, por lo que alfinal mi idea quedó algo asi:

Tengo un modulo donde tengo mis funciones y en este caso, tengo la siguiente funcion dentro de modulo MLibrerias:

PUBLIC FUNCTION llenarcombo(a AS Object) AS String
  'iniciar variables
  DIM resultado AS Result
  DIM contador AS Integer
  
  'consulto
  TRY resultado = db.Exec("SELECT * FROM articuloscategorias ORDER BY `articuloscategorias`.`Nombre` ASC")
  IF ERROR THEN Message.Error("ERROR 100.")
  
  'me situo en el primer registro y cuento cuantos tengo.
  resultado.MoveFirst
  contador = resultado.Count

  'si contador llega a menos o 1 quiere decir que ha llegado al principio por lo que el While termina, mientras tanto
  'añade un campo con el contenido del "Nombre" del resultado sql.
  'Refresca el combobox para q se muestren los cambios
  'muevo al siguiente registro y decremento uno.
  WHILE 1 <= contador
    a.Add(resultado!nombre)
    a.Refresh()
    resultado.MoveNext
    DEC (contador)
  WEND


De este modo, desde cualquier formulario que necesite mostrar las categorias tan solo tendré que llamarlo de la siguiente forma:
MLibreria.llenarcombo(CBpadre)


Espero que a alguien le sirva de ayuda!

EDITO: Perdona shordi, me autocontesté mientras contestabas xDD gracias tb por tu ejemplo descargaré tu codigo para echarle un ojo
 



 
CanihoJR - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Rellenar Varios Combos De Varios Formularios Iguales A La Vez? [SOLUCIONADO] 
 
ok. Tan sólo una observación a tu código. Trabajando en la red no siempre la propiedad .count contiene el número de registros (cosas del estándar ODBC, creo)
Es conveniente hacer primero un .movelast o incluso recorrer la tabla hasta el .eof para estar seguros de ese total.
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Rellenar Varios Combos De Varios Formularios Iguales A La Vez? [SOLUCIONADO] 
 
Gracias por tu apreciacion, lo cambiaré ahora mismo toda buena costumbre es bienvenida
 



 
CanihoJR - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Rellenar Varios Combos De Varios Formularios Iguales A La Vez? 
 
Supongamos que tienes una tabla "categorias"

la rutína básica a realizar sobre una conexión ya establecida es la siguiente
PUBLIC FUNCTION LlenarCombo(Micombo AS ComboBox, Cn as connection)
DIM Rs AS Result, Tabla AS Integer[3], x AS Integer
Rs = cn.EXEC("select categoria from catagorias order by categoria")
DO WHILE rs.Available
  Micombo.Add(Rs!Categoria)
  rs.MoveNext

LOOP
END


Y le pasas como argumentos el combo que quieres llenar y la conexión que tienes activa

Una aplicación interesante de esto es un combo que te pueda sacar distintos tipos de items.

Por ejemplo pongamos que tu tienes una tabla de clienets y quieres un combo donde aparezcan los códigos postales de los clientes que estén introducitos, pero cada código postal solo lo quieres una vez

PUBLIC FUNCTION LlenarCombo(Micombo AS ComboBox, Cn as connection)
DIM Rs AS Result, Tabla AS Integer[3], x AS Integer
Rs = cn.EXEC("select distinct codigo_postal from clientes order by codigo_postal")
DO WHILE rs.Available
  Micombo.Add(Rs!Categoria)
  rs.MoveNext

LOOP
END

 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Rellenar Varios Combos De Varios Formularios Iguales A La Vez? [SOLUCIONADO] 
 
como siempre soplo, proponiendonos un reto mayor, y un aprendizaje mas eficaz!

una vez mas, Gracias!
 



 
CanihoJR - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Rellenar Varios Combos De Varios Formularios Iguales A La Vez? [SOLUCIONADO] 
 
Hola, a mi me sale "Result No available", tengo bien mi bd si la utilizo en otra parte me muestra la info y todo, tengo el codigo tal cual esta publicado ya lo revise una i otra vez jaja, gracias
 



 
luisrel - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Rellenar Varios Combos De Varios Formularios Iguales A La Vez? [SOLUCIONADO] 
 
Revisa los nombres de variables... si has hecho copy/paste del código publicado, es probable que haya un error en el código.

Eso pasa porque realmente no entiendes el código y no sabes bien lo que estás haciendo, así que repasa tu código y no te conformes con un error, el cual ya te está diciendo bastante sobre lo que pasa...

Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Rellenar Varios Combos De Varios Formularios Iguales A La Vez? [SOLUCIONADO] 
 
ya encontre que fallaba aunque no estoy seguro de porque.
en vez de poner en una linea la consulta sql, primero declare una variable

sql = "select Nombre from  alumnos where Status=0"
consulta = Conexion.Exec(sql)

y listo fue la única modificación, saludos
 



 
luisrel - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
Ocultar¡Este tema fue útil?

 

Elegir valoración:                       

Media de valoración Valoración mínima Valoración máxima Número de valoraciones
0.00 0 0 0
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 0 invitados
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
No puede descargar archivos
No puede publicar eventos en el calendario