none
Vista con variables en Visual Basic RRS feed

  • Pregunta

  • Hola, necesito ayuda con la siguiente consulta en Visual Studio, la consulta en SQL queda de la siguiente manera y si funciona

    SELECT dbo.RegistroSesion.ID_Equipo, dbo.RegistroSesion.ID_Usuario, Alumnos.dbo.[2014-2015 Dos].Nombres, Alumnos.dbo.[2014-2015 Dos].APE_PAT, Alumnos.dbo.[2014-2015 Dos].APE_MAT, RegistroSalas.dbo.Carreras.NombreCarrera, Alumnos.dbo.[2014-2015 Dos].SEM_Actual, dbo.RegistroSesion.Fecha_Ini, dbo.RegistroSesion.Hora_Ini, dbo.RegistroSesion.Fecha_Fin, dbo.RegistroSesion.Hora_Fin FROM dbo.RegistroSesion INNER JOIN Alumnos.dbo.[2014-2015 Dos] ON Alumnos.dbo.[2014-2015 Dos].ID_Usuario = dbo.RegistroSesion.ID_Usuario INNER JOIN RegistroSalas.dbo.Carreras ON Alumnos.dbo.[2014-2015 Dos].ID_Carrera = RegistroSalas.dbo.Carreras.CveCarrera.

    en Visula Basic la tengo así y no me da ningún resultado.

    "SELECT dbo.RegistroSesion.ID_Equipo, dbo.RegistroSesion.ID_Usuario, Alumnos.dbo.['" & ComboBox1.Text & "'].Nombres, Alumnos.dbo.['" & ComboBox1.Text & "'].APE_PAT, Alumnos.dbo.['" & ComboBox1.Text & "'].APE_MAT, RegistroSalas.dbo.Carreras.NombreCarrera, Alumnos.dbo.['" & ComboBox1.Text & "'].SEM_Actual, dbo.RegistroSesion.Fecha_Ini, dbo.RegistroSesion.Hora_Ini, dbo.RegistroSesion.Fecha_Fin, dbo.RegistroSesion.Hora_Fin

    FROM dbo.RegistroSesion INNER JOIN Alumnos.dbo.['" & ComboBox1.Text & "'] ON Alumnos.dbo.['" & ComboBox1.Text & "'].ID_Usuario = dbo.RegistroSesion.ID_Usuario INNER JOIN RegistroSalas.dbo.Carreras ON Alumnos.dbo.['" & ComboBox1.Text & "'].ID_Carrera = RegistroSalas.dbo.Carreras.CveCarrera"

    Gracias

    martes, 27 de febrero de 2018 0:30

Respuestas

  • Te recomiendo utilizar un alias de tabla para evitar repetir el nombre completo del objeto, por ejemplo:

    Dim Query = String.Format("SELECT 
    		s.ID_Equipo, s.ID_Usuario, a.Nombres, a.APE_PAT, a.APE_MAT, c.NombreCarrera, 
    		a.SEM_Actual, s.Fecha_Ini, s.Hora_Ini, s.Fecha_Fin, s.Hora_Fin
    	FROM 
    		dbo.RegistroSesion s
    		INNER JOIN Alumnos.dbo.[{0}] a ON a.ID_Usuario = s.ID_Usuario
    		INNER JOIN RegistroSalas.dbo.Carreras c ON a.ID_Carrera = c.CveCarrera;", ComboBox1.Text)

    Si cuentas con la versión 14 de Visual Basic, o superior, puedes evitar el uso de la función Format() y utilizar la característica de cadenas interpoladas, por ejemplo:

    Dim Query = $"SELECT 
    		s.ID_Equipo, s.ID_Usuario, a.Nombres, a.APE_PAT, a.APE_MAT, c.NombreCarrera, 
    		a.SEM_Actual, s.Fecha_Ini, s.Hora_Ini, s.Fecha_Fin, s.Hora_Fin
    	FROM 
    		dbo.RegistroSesion s
    		INNER JOIN Alumnos.dbo.[{ComboBox1.Text}] a ON a.ID_Usuario = s.ID_Usuario
    		INNER JOIN RegistroSalas.dbo.Carreras c ON a.ID_Carrera = c.CveCarrera;"

    • Marcado como respuesta Galdino Antonio martes, 27 de febrero de 2018 18:56
    martes, 27 de febrero de 2018 3:39

Todas las respuestas

  • Te recomiendo utilizar un alias de tabla para evitar repetir el nombre completo del objeto, por ejemplo:

    Dim Query = String.Format("SELECT 
    		s.ID_Equipo, s.ID_Usuario, a.Nombres, a.APE_PAT, a.APE_MAT, c.NombreCarrera, 
    		a.SEM_Actual, s.Fecha_Ini, s.Hora_Ini, s.Fecha_Fin, s.Hora_Fin
    	FROM 
    		dbo.RegistroSesion s
    		INNER JOIN Alumnos.dbo.[{0}] a ON a.ID_Usuario = s.ID_Usuario
    		INNER JOIN RegistroSalas.dbo.Carreras c ON a.ID_Carrera = c.CveCarrera;", ComboBox1.Text)

    Si cuentas con la versión 14 de Visual Basic, o superior, puedes evitar el uso de la función Format() y utilizar la característica de cadenas interpoladas, por ejemplo:

    Dim Query = $"SELECT 
    		s.ID_Equipo, s.ID_Usuario, a.Nombres, a.APE_PAT, a.APE_MAT, c.NombreCarrera, 
    		a.SEM_Actual, s.Fecha_Ini, s.Hora_Ini, s.Fecha_Fin, s.Hora_Fin
    	FROM 
    		dbo.RegistroSesion s
    		INNER JOIN Alumnos.dbo.[{ComboBox1.Text}] a ON a.ID_Usuario = s.ID_Usuario
    		INNER JOIN RegistroSalas.dbo.Carreras c ON a.ID_Carrera = c.CveCarrera;"

    • Marcado como respuesta Galdino Antonio martes, 27 de febrero de 2018 18:56
    martes, 27 de febrero de 2018 3:39
  • Le presento otra opción.

    Tengo las siguientes premisas:

    1. Hay más de una tabla o vista que parece tener datos agrupados por años.
    2. Cada una de estas tablas o vistas contienen la misma cantidad de columnas y tipos de columna.

    Si las premisas son ciertas, entonces puedo crear una vista basándome en una de estas tablas solamente.  Cualquiera sirve:

    Create View dbo.vwDatos
    As
    Select
        ...
    From
        dbo.[2014-2015 Dos]
    ;
    Go
    

    Ahora puedo entonces crear la consutota grandota que tiene usted en VB en un procedimiento almacenado que consulte los datos de vwDatos (omito el código de ese procedimiento almacenado).

    Ahora, ¿cómo hacemos el cambio?  Simple.  Redefina la vista cada vez que necesite cambiarla.  Redefinir la vista es mucho más sencillo que redefinir la consulta grande.  Primero redefine la lista, luego ejecuta el procedimiento almacenado.

    PRECAUCIÓN:  Deberá hacerlo todo en una transacción con nivel de aislamiento superior a Read Committed.  Probablmente Repeatable Read o Serializable.


    Jose R. MCP
    Code Samples

    martes, 27 de febrero de 2018 4:51
  • Gracias por el apoyo

    martes, 27 de febrero de 2018 18:56