Tengo un pequeño problema con una aplicación, en ella me conecto a una base de datos en sql y realizo la siguiente consulta medio rara, pero de ella solo me interesa el campo "b_traba1.rpe":
Código SQL:
Ver original
SELECT MAX(b_contra.fe_repro), MAX(c_zonas.nombre), MAX(c_puesto.puesto), MAX(c_a_resp.dscarea), b_traba1.rpe, MAX(b_traba1.nombre), b_traba1.fe_antre, b_traba1.fe_ingre, b_traba3.fe_natra, CONVERT (INT,(DATEDIFF (dd, b_traba3.fe_natra, GETDATE()) - DATEDIFF (yy, b_traba3.fe_natra, GETDATE()) / 4.25) / 365) AS Edad, MAX(b_traba1.sexotrab), MAX(c_ubica.ubicapza), MAX(b_traba1.cl_nides), MAX(b_traba1.if_nire2), fe, CASE WHEN fe<GETDATE() THEN GETDATE() ELSE NULL END AS fepos, CONVERT (INT,(DATEDIFF (dd, GETDATE(), fe) - DATEDIFF (yy, GETDATE(), fe) / 4.25) / 365) AS anyjub FROM (SELECT fe_antre, CASE WHEN b_traba1.sexotrab='M' THEN DATEADD(yy, 30, b_traba1.fe_antre) ELSE DATEADD(yy, 25, b_traba1.fe_antre) END AS fe FROM b_traba1) AS t1, b_traba1, b_traba3, c_zonas, c_a_resp, c_ubica, c_puesto, b_contra WHERE (DATEDIFF(yy, b_traba1.fe_antre, GETDATE()) > 25) AND (DATEDIFF(yy, b_traba3.fe_natra, GETDATE()) > 55) AND b_traba1.cl_sitla IS NULL AND c_zonas.descr=b_traba1.cl_zona AND c_a_resp.area=b_traba1.area AND b_traba1.rpe=b_traba3.rpe AND b_traba1.rpe=b_contra.rpe AND c_puesto.cl_puest=b_contra.cl_puest AND b_traba1.fe_antre=t1.fe_antre AND b_traba1.cl_ubica=c_ubica.cl_ubica GROUP BY b_traba1.rpe, b_traba1.fe_antre, b_traba1.fe_ingre, b_traba3.fe_natra, fe
De ella quiero sacar las afectaciones (faltas) de un trabajador en específico. En mi página genero los resultados de mi consulta en un DataGrid, y me gustaría sacar los resultados de las afectaciones en base a un registro que se me genera en mi Datagrid, es decir, que si la primera fila de mi tabla tiene como dato un rpe (numero de control del trabajador) en especifico, al darle clic a este me genere en otra página una tabla con las afectaciones de solo este trabajador...
Lo que hice fue hacer una HyperLinkColumn en mi DataGrid para que me enlace a mi nueva tabla, pero no se como realizar el enlace a un trabajador en específico:
rpe='trabajador_seleccionado', no se como hacerle entender al programa que dependiendo del rpe que este en la fila del link que seleccione es la tabla que me generará, que sería en una consulta como esta:
Código SQL:
Ver original
SELECT fe_inic, cl_incid FROM b_asiste WHERE cl_incid='026' AND rpe='trabajador_seleccionado' GROUP BY rpe, cl_incid, fe_inic
Aquí les dejo el código que tengo, primero el que me genera la tabla principal del DataGrid:
Código ASP:
Ver original
<%@ Page Language="VB" ContentType="text/html" Debug="true" ResponseEncoding="iso-8859-1" %> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.SqlClient" %> <html> <script language="VB" runat="server"> Sub Page_Load(Sender As Object, E As EventArgs) Dim MyConnection As SqlConnection = New SqlConnection("server=myhost;database=mydb;User ID=myuser;Password=mypass;Trusted_Connection=no") Dim MyCommand As SqlCommand = New SqlCommand("SELECT MAX(b_contra.fe_repro), MAX(c_zonas.nombre), MAX(c_puesto.puesto), MAX(c_a_resp.dscarea), b_traba1.rpe, MAX(b_traba1.nombre), b_traba1.fe_antre, b_traba1.fe_ingre, b_traba3.fe_natra, CONVERT (INT,(DATEDIFF (dd, b_traba3.fe_natra, GETDATE()) - DATEDIFF (yy, b_traba3.fe_natra, GETDATE()) / 4.25) / 365) AS Edad, MAX(b_traba1.sexotrab), MAX(c_ubica.ubicapza), MAX(b_traba1.cl_nides), MAX(b_traba1.if_nire2), fe, CASE WHEN fe<GETDATE() THEN GETDATE() ELSE null END AS fepos, CONVERT (INT,(DATEDIFF (dd, GETDATE(), fe) - DATEDIFF (yy, GETDATE(), fe) / 4.25) / 365) AS anyjub FROM (SELECT fe_antre, CASE WHEN b_traba1.sexotrab='M' THEN DATEADD(yy, 30, b_traba1.fe_antre) ELSE DATEADD(yy, 25, b_traba1.fe_antre) END AS fe FROM b_traba1) AS t1, b_traba1, b_traba3, c_zonas, c_a_resp, c_ubica, c_puesto, b_contra WHERE (DATEDIFF(yy, b_traba1.fe_antre, GETDATE()) > 25) AND (DATEDIFF(yy, b_traba3.fe_natra, GETDATE()) > 55) AND b_traba1.cl_sitla IS NULL AND c_zonas.descr=b_traba1.cl_zona AND c_a_resp.area=b_traba1.area AND b_traba1.rpe=b_traba3.rpe AND b_traba1.rpe=b_contra.rpe AND c_puesto.cl_puest=b_contra.cl_puest AND b_traba1.fe_antre=t1.fe_antre AND b_traba1.cl_ubica=c_ubica.cl_ubica GROUP BY b_traba1.rpe, b_traba1.fe_antre, b_traba1.fe_ingre, b_traba3.fe_natra, fe", MyConnection) MyConnection.Open() Dim dr As SqlDataReader = MyCommand.ExecuteReader() MyDataGrid.DataSource = dr MyDataGrid.DataBind() MyConnection.Close() End Sub </script> <body> <h3><font face="Verdana">Selección de Trabajadores CFE mayores a 25 años de servicio y con más de 55 años de edad</font></h3> <ASP:DataGrid id="MyDataGrid" runat="server" Width="700px" BackColor="#CCCCFF" BorderColor="Black" CellPadding="3" Font-Name="Verdana" Font-Size="8pt" HeaderStyle-BackColor="#aaaadd" EnableViewState="False" Font-Names="Verdana" > <Columns> <asp:HyperLinkColumn HeaderText="Incapacidades" NavigateUrl="Incapacidades.aspx" Text="Ver"></asp:HyperLinkColumn> </Columns> <HeaderStyle BackColor="#AAAADD"></HeaderStyle> </asp:DataGrid> </body> </html>
Y esta la que escucharía el link, pero que no se como hacer que escuche:
Código ASP:
Ver original
<%@ Page Language="VB" ContentType="text/html" Debug="true" ResponseEncoding="iso-8859-1" %> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.SqlClient" %> <html> <script language="VB" runat="server"> Sub Page_Load(Sender As Object, E As EventArgs) Dim MyConnection As SqlConnection = New SqlConnection("server=myhost;database=mydb;User ID=myuser;Password=mypass;Trusted_Connection=no") Dim MyCommand As SqlCommand = New SqlCommand("SELECT fe_inic, cl_incid FROM b_asiste WHERE cl_incid='026' AND rpe='76880' GROUP BY rpe, cl_incid, fe_inic", MyConnection) MyConnection.Open() Dim dr As SqlDataReader = MyCommand.ExecuteReader() MyDataGrid.DataSource = dr MyDataGrid.DataBind() MyConnection.Close() End Sub </script> <body> <h3><font face="Verdana">Selección de Trabajadores CFE mayores a 25 años de servicio y con más de 55 años de edad</font></h3> <ASP:DataGrid id="MyDataGrid" runat="server" Width="700" BackColor="#ccccff" BorderColor="black" ShowFooter="false" CellPadding="3" CellSpacing="0" Font-Name="Verdana" Font-Size="8pt" HeaderStyle-BackColor="#aaaadd" EnableViewState="false" /> </body> </html>
Tal vez exista otra manera, pero en realidad no se me ocurre ninguna, sobre todo cuando se esta presionado. Gracias de antemano...