Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/03/2010, 16:40
AlterElt
 
Fecha de Ingreso: febrero-2010
Mensajes: 63
Antigüedad: 14 años, 3 meses
Puntos: 0
duda try...catch...endtry y consulta SQL en VB net

Buenas,

veréis tengo un problema con una cosa, y es que intento meter en una variable unos datos que tengo en la base de datos... primero el código y ahora os cuento:

Código vb:
Ver original
  1. 'Consulto el nombre de la DIETA y RUTINA asignadas...
  2.            Dim TablaNombreDietaRutina As New DataTable
  3.             TablaNombreDietaRutina.Clear()
  4.             Dim DatAdpt As New SQLiteDataAdapter("SELECT DIETA.nombre, RUTINA.nombre FROM CLIENTES INNER JOIN DIETA on DIETA.id_dieta=CLIENTES.id_dieta INNER JOIN RUTINA on RUTINA.id_rutina=CLIENTES.id_rutina WHERE CLIENTES.activo=1 AND CLIENTES.id_cliente='" & id_clienteSeleccionado & "'", conexion)
  5.             DatAdpt.Fill(TablaNombreDietaRutina)
  6.             '... y me lo copio en variables
  7.            Try 'Probamos si tiene una dieta asignada
  8.                dieta = Convert.ToString(TablaNombreDietaRutina.Rows(0).Item(0)) 'solo hay una fila en la tabla
  9.            Catch ex As Exception 'si no la tiene....
  10.                dieta = "Sin asignar"
  11.             End Try
  12.             Try 'probamos si tiene una rutina...
  13.                rutina = Convert.ToString(TablaNombreDietaRutina.Rows(0).Item(1)) 'solo hayt dos items en la tabla (DIETA.nombre, RUTINA.nombre)
  14.            Catch ex As Exception 'si no la tiene...
  15.                rutina = "Sin asignar"
  16.             End Try

Veamos. Tengo una tabla CLIENTES una tabla RUTINA y otra DIETA, bueno, pues cuando lo pongo así solo me pone la variable con su valor correcto si el cliente tiene asociado una dieta y una rutina (o si no tiene ninguna de las dos cosas asignadas). Si solo tiene una de éstas me dice en las dos "Sin asignar". Debugando he visto que esto es porque cuando yo hago la consulta:

Código SQL:
Ver original
  1. SELECT DIETA.nombre, RUTINA.nombre FROM CLIENTES INNER JOIN DIETA ON DIETA.id_dieta=CLIENTES.id_dieta INNER JOIN RUTINA ON RUTINA.id_rutina=CLIENTES.id_rutina WHERE CLIENTES.activo=1 AND CLIENTES.id_cliente='" & id_clienteSeleccionado & "

Si "CLIENTES.id_dieta" o "CLIENTES.id_rutina" está vacío no me devuelve ninguno de los dos resultados. Yo quiero que me devuelva: ninguna id, una id, la otra id o las dos ids... no se si me explico.

He pensado en hacerlo separando la consulta en dos, pero esto esta en el evento de hacer click en un listBox y no se si sería muy lento...

Solo como dato:
La relación CLIENTES-RUTINA es de 1...1 en la bdd
La relación CLIENTES-DIETA es de 1...1 en la bdd

Se os ocurre alguna otra solución a este problema?