Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/12/2010, 04:31
Fernando_net
 
Fecha de Ingreso: marzo-2010
Mensajes: 191
Antigüedad: 14 años, 2 meses
Puntos: 3
Exclamación Problema cargar combobox entre funciones

Hola a todos.

Vereis, para optimizar el codigo, ahora me lo estoy revisando y creo que sería posible mejorarlo, por eso acudo a vuestra ayuda.

Tengo un modulo en que carga datos en un combobox después de hacer una consulta a una BD.

El caso es que el codigo de ejecución de la consulta es redundante, con lo que ahora estoy motando una función dentro del propio modulo para optimizar el codigo.

Tengo 14 cases, con lo cual, imaginad tener el mismo codigo 14 veces. 14 * 3 lineas cada vez = 42 lineas que podría suprimir si creo la función:

Ahora mismo está así.

Código VB .NET:
Ver original
  1. Case 1
  2.      'este caso carga los datos de una tabla
  3.      consulta = "select ..... from ..... where ..... = 1"
  4.  
  5.      cmd = New OleDb.OleDbDataAdapter(consulta, cnn)
  6.      dt = New DataTable
  7.      cmd.Fill(dt)
  8.                  
  9.      For i = 0 To dt.Rows.Count - 1
  10.           Formulario_Quejas.combobox1.Items.Add(dt.Rows(i).Item(0))
  11.      Next
  12.  
  13. Case 2
  14.      'este caso carga los datos de otra tabla
  15.      consulta = "select ..... from ..... where ..... = 2"
  16.  
  17.      cmd = New OleDb.OleDbDataAdapter(consulta, cnn)
  18.      dt = New DataTable
  19.      cmd.Fill(dt)
  20.                  
  21.      For i = 0 To dt.Rows.Count - 1
  22.           Formulario_Quejas.combobox2.Items.Add(dt.Rows(i).Item(0))
  23.      Next
  24.  
  25. Case 3
  26.      (...)

Ahora está así:
Código VB .NET:
Ver original
  1. Case 1
  2.      'este caso carga los datos de una tabla
  3.      total=ejecuta_consulta("select ..... from ..... where ..... = 1")
  4.                  
  5.      For i = 0 To total - 1
  6.           Formulario_Quejas.combobox1.Items.Add[COLOR="Red"](dt.Rows(i).Item(0))[/COLOR]
  7.      Next
  8.  
  9. Case 2
  10.      'este caso carga los datos de otra tabla
  11.      total=ejecuta_consulta("select ..... from ..... where ..... = 2")
  12.                  
  13.      For i = 0 To total - 1
  14.           Formulario_Quejas.combobox2.Items.Add[COLOR="Red"](dt.Rows(i).Item(0))[/COLOR]
  15.      Next
  16.  
  17. Case 3
  18.      (...)
  19.  
  20. Public Function ejecuta_consulta(ByVal consulta As String) as string
  21.      Dim cmd As OleDb.OleDbDataAdapter
  22.      Dim dt As DataTable
  23.  
  24.      'conectamos a la base de datos
  25.      conexion.conecta()
  26.  
  27.      try
  28.           cmd = New OleDb.OleDbDataAdapter(consulta, cnn)
  29.           dt = New DataTable
  30.           cmd.Fill(dt)
  31.  
  32.           return dt.rows(0).item(0)
  33.      catch ex as exception
  34.           messagebox.show(ex.message)
  35.      finally
  36.           conexion.desconecta()
  37.      end try
  38. End function

El problema está en el for que hay en el primer sub, ya que no puede leer del datatable, que está en el Function y claro, el Function solo devuelve el total de datos, no devuelve los datos en si como para leerlos 1 a 1.

Como lo podría solucionar?

Un cordial saludo y Felices Fiestas a todos :)

Última edición por Fernando_net; 29/12/2010 a las 04:37