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 originalCase 1
'este caso carga los datos de una tabla
consulta = "select ..... from ..... where ..... = 1"
cmd = New OleDb.OleDbDataAdapter(consulta, cnn)
dt = New DataTable
cmd.Fill(dt)
For i = 0 To dt.Rows.Count - 1
Formulario_Quejas.combobox1.Items.Add(dt.Rows(i).Item(0))
Next
Case 2
'este caso carga los datos de otra tabla
consulta = "select ..... from ..... where ..... = 2"
cmd = New OleDb.OleDbDataAdapter(consulta, cnn)
dt = New DataTable
cmd.Fill(dt)
For i = 0 To dt.Rows.Count - 1
Formulario_Quejas.combobox2.Items.Add(dt.Rows(i).Item(0))
Next
Case 3
(...)
Ahora está así:
Código VB .NET:
Ver originalCase 1
'este caso carga los datos de una tabla
total=ejecuta_consulta("select ..... from ..... where ..... = 1")
For i = 0 To total - 1
Formulario_Quejas.combobox1.Items.Add[COLOR="Red"](dt.Rows(i).Item(0))[/COLOR]
Next
Case 2
'este caso carga los datos de otra tabla
total=ejecuta_consulta("select ..... from ..... where ..... = 2")
For i = 0 To total - 1
Formulario_Quejas.combobox2.Items.Add[COLOR="Red"](dt.Rows(i).Item(0))[/COLOR]
Next
Case 3
(...)
Public Function ejecuta_consulta(ByVal consulta As String) as string
Dim cmd As OleDb.OleDbDataAdapter
Dim dt As DataTable
'conectamos a la base de datos
conexion.conecta()
try
cmd = New OleDb.OleDbDataAdapter(consulta, cnn)
dt = New DataTable
cmd.Fill(dt)
return dt.rows(0).item(0)
catch ex as exception
messagebox.show(ex.message)
finally
conexion.desconecta()
end try
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 :)