hoy quería plantearos un problema que me surge a la hora de manejar datos de una Base de datos.
Actualmente tengo el siguiente código:
Código:
Private Sub ComboBox_GrupoUs_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox_Grupos.SelectedIndexChanged Dim usuarGrup As New GESTIDOUK.DataSet_UsuarGrup.USUARIOS_GRUPOSDataTable Dim datosContacto As New GESTIDOUK.DataSet_DatosContacto.DATOS_CONTACTODataTable codigo_gr = Microsoft.VisualBasic.Left(Trim(ComboBox_Grupos.SelectedItem.ToString), 5) TextBox_CorrPart.Clear() TextBox_CorrTrab.Clear() Try usuarGrup = USUARIOS_GRUPOSTableAdapter.SelectWhereCodgr(codigo_gr) For i = 0 To usuarGrup.Count - 1 datosContacto = DATOS_CONTACTOTableAdapter.SelectCorreoe_WhereCodus(Trim(usuarGrup(i).COD_US.ToString)) If Not DBNull.Value.Equals(datosContacto(i)(4)) Then TextBox_CorrPart.Text = TextBox_CorrPart.Text + Trim(datosContacto(i).CORREOEPART_DC.ToString) + ", " End If If Not DBNull.Value.Equals(datosContacto(i)(5)) Then TextBox_CorrTrab.Text = TextBox_CorrTrab.Text + Trim(datosContacto(i).CORREOETRAB_DC.ToString) + ", " End If Next TextBox_CorrPart.Text = Microsoft.VisualBasic.Left(TextBox_CorrPart.Text, Len(TextBox_CorrPart) - 2) TextBox_CorrTrab.Text = Microsoft.VisualBasic.Left(TextBox_CorrTrab.Text, Len(TextBox_CorrTrab) - 2) Catch ex As Exception Modulo_General.mostrarMsgbox(ex.Message) End Try End Sub
Aquí, yo obtengo un "codigo_gr" desde un combobox.
A partir de él obtengo aquellos "cod_us" perteneciente a los usuarios que en la Bd están asociados a dicho grupo. Sería la línea:
Cita:
En "usuarGrup" se almacenan filas que contienen los "cod_us" de estos usuarios. Por cada "cod_us", obtenemos sus direcciones de correo-e (de la tabla "DatosContacto") usando la siguiente línea:usuarGrup = USUARIOS_GRUPOSTableAdapter.SelectWhereCodgr(codig o_gr)
Cita:
Por cada usuario, sólo hay un registro en la tabla "DatosContacto", y leo los dos campos que pertenecen a los correos-e (personal y trabajo); es decir, en el TableAdapter.Select... sólo hago el SELECT de dos datos, correoepart_dc y correoetrab_dc:datosContacto = DATOS_CONTACTOTableAdapter.SelectCorreoe_WhereCodu s(Trim(usuarGrup(i).COD_US.ToString))
Cita:
Antes de leer la fila almacenada en "datosContacto", compruebo que no es DBNull.If Not DBNull.Value.Equals(datosContacto(i)(4)) Then
TextBox_CorrPart.Text = TextBox_CorrPart.Text + Trim(datosContacto(i).CORREOEPART_DC.ToString) + ", "
End If
If Not DBNull.Value.Equals(datosContacto(i)(5)) Then
TextBox_CorrTrab.Text = TextBox_CorrTrab.Text + Trim(datosContacto(i).CORREOETRAB_DC.ToString) + ", "
End If
TextBox_CorrPart.Text = TextBox_CorrPart.Text + Trim(datosContacto(i).CORREOEPART_DC.ToString) + ", "
End If
If Not DBNull.Value.Equals(datosContacto(i)(5)) Then
TextBox_CorrTrab.Text = TextBox_CorrTrab.Text + Trim(datosContacto(i).CORREOETRAB_DC.ToString) + ", "
End If
Pues bien, cuando hago una prueba, selecciono un grupo que contiene 2 usuarios:
- El primero tiene todos los datos rellenos en la tabla "DatosContacto"
- El segundo sólo tiene rellenos dos campos, los dos primeros que aparecen en la tabla
Por ello, cuando acceso a los datos del primero, todo va correcto, pero cuando accedo a los del segundo, cuando llega a la línea:
Cita:
me dice:If Not DBNull.Value.Equals(datosContacto(i)(4)) Then
Cita:
No hay ninguna fila en la posición 1
Es como si al traerse una fila vacía, me dijese que no existe... cómo puedo solucionarlo para que al ocurrir eso, no salte una excepción, sino que siga el recorrido del código, como hice con la sentencia
Cita:
If Not DBNull.Value.Equals(datosContacto(i)(4)) Then
Muchas gracias por la ayuda, y perdonas que haya hablado tanto, pero quería explicarme bien...
Un saludo y mil gracias! ;)