Si cambiaste el nombre de una tabla procedimiento almaceno, vista etc, puedes ver la dependencia de objetos con la siguiente query.
Select SO.object_id,referenced_id,referencing_id,referenced_entity_name,name,type_desc
from sys.sql_expression_dependencies sqldep
INNER JOIN sys.objects SO on SO.object_id=sqldep.referencing_id
where sqldep.referenced_entity_name ='ExpNotaIngresoHospital'
Si la columa referenced_id aparece NULL la referencia está rota, osea debes ir a el script a cambiar el nombre del objeto
Por ejemplo:
Eliminé la tabla
ExpExpedienteGeneral que se encuentra en el script de la vista view_ExpedienteGeneral.
Si ejecuto el script para buscar referencias rotas:
Select SO.object_id,referenced_id,referencing_id,referenced_entity_name,name,type_desc
from sys.sql_expression_dependencies sqldep
INNER JOIN sys.objects SO on SO.object_id=sqldep.referencing_id
where referenced_id is null
Aparece en una de las referencias la tabla ExpExpedienteGeneral. Esto también puede pasar si cambié el nombre de un objeto o una columna.
lunes, 11 de enero de 2016
martes, 29 de diciembre de 2015
Caché de ASP.NET para guardar páginas con dependencia a SQL Server
Este tutorial hace que la página sólo se actualize cuando hay cambios en la tabla en la base de datos a la que se le indicó su dependencia. Pero tuve problema con el uso de botones y para cumplir con mi objetivo de guardar tablas en caché y utilizarla en distintintas páginas.
Utilizé este Tutorial de Microsoft
Utilizé SQL Server 2008
Abrí la Consola
Apliqué el comando (que es mi versión actual de .NET Framework)
C:\Windows\Microsoft.NET\Framework\v4.0.30319
Después lanzé el siguiente comando
Después creé mi cadena de conexión a SQL Server
Creé una página donde arrastré un control GridView
Utilizé este Tutorial de Microsoft
Utilizé SQL Server 2008
Abrí la Consola
Apliqué el comando (que es mi versión actual de .NET Framework)
C:\Windows\Microsoft.NET\Framework\v4.0.30319
Después lanzé el siguiente comando
aspnet_regsql.exe -S <Server> -U <Username> -P <Password> -ed -d Northwind -et -t Employees
Traducido yo lo usé asíaspnet_regsql.exe -S DESARROLLOCHSJ -U SA -P chsj.2014 -ed -d DB_CHSJ -et -t ConfiguracionPorPagina
Después creé mi cadena de conexión a SQL Server
Creé una página donde arrastré un control GridView
jueves, 10 de diciembre de 2015
Stored Procedure con parámetro tabla
Me vi en la necesidad de enviar un parámetro tipo tabla que contendría una lista de ID´ seleccionador por el usuario desde la interfaz, y para eso a programar desde C# enviando la tabla. Encontré muchos tutoriales pero no me quedaba claro.
De esta página obtuve el conocimiento principal.
En primer lugar crear 'El tipo tabla'
De esta página obtuve el conocimiento principal.
En primer lugar crear 'El tipo tabla'
Yo lo veo algo así como plantillas que podremos usar muy precisamente acorde a sustipos de columnas. Y como lo que quiero es enviar una lista con los IDs seleccionadosMi tipo de tabla solo contiene una columna intCREATE TYPE IDS_TableType AS TABLE ( ID INT );Después crear el procedimiento almacenado utilizando el tipo de tablarecién declarado 'IDS_TableType'.CREATE PROCEDURE SP_ReporteAgrupadoMedicos @TablaInterfaz IDS_TableType READONLY, @FechaInicio char(10), @FechaFin char(10) AS BEGIN SELECT RTRIM(paciente.Nombre) + ' ' + RTRIM(paciente.Ap_Paterno) + ' ' + RTRIM(paciente.Ap_Materno) AS Paciente, CAST((DATEDIFF(DAY,paciente.Fecha_Nacimiento,GETDATE())/365) as CHAR(3))+' años' as Edad, Procedencia=( case when i.TipoIngreso=0 then tipoIngreso.Item when i.TipoIngreso=1 then 'Empresa en convenio '+convenio.Empresa when i.TipoIngreso=2 then tipoIngreso.Item when i.TipoIngreso=3 then tipoIngreso.Item when i.TipoIngreso=4 then tipoIngreso.Item when i.TipoIngreso=5 then tipoIngreso.Item END), dbo.FN_DiagnosticosCie10(i.idPaciente,i.idIngreso) Diagnostico, i.Doctor idDoctor,RTRIM(usuario.Nombre)+SPACE(1)+RTRIM(usuario.Ap_Paterno)+SPACE(1)+ RTRIM(usuario.Ap_Materno) Medico FROM dbo.AdmIngresosPacientes AS i LEFT JOIN dbo.ExpPacientes AS paciente ON i.idPaciente = paciente.idPaciente LEFT JOIN AdmListasDesplegables tipoIngreso on tipoIngreso.id=i.TipoIngreso AND tipoIngreso.NombreLista='TipoIngreso' LEFT JOIN ExpEmpresasConvenios convenio on convenio.id=i.EmpresaConvenio LEFT JOIN ExpUsuarios as usuario on usuario.idUsuario=i.Doctor where i.FechaIngreso between +@FechaInicio+' 00:00:00' AND @FechaFin+' 23:59:59' AND Doctor IN (select id from @TablaInterfaz); ENDLo que ven es la cláusula IN mas info AquíHasta aquí el procedimiento creado-------------------------------------Ahora para acceder a el desde SQL Server, creamo una variable tabla del tipo IDS_TableTypeque hicimos en el primer paso. Le cargamos datos con Insert y por últimomando llamar mi procedimiento almacenado enviando la tabla @LocationTVPDECLARE @LocationTVP AS IDS_TableType; INSERT INTO @LocationTVP (ID) values (1),(4),(58),(175),(176); EXEC SP_ReporteAgrupadoMedicos @LocationTVP,'10-12-2015','10-12-2015';---------------------------------------------------------------Y el código para hacer lo mismo desde C#. Yo estoy obteniendo deuna lista de CheckBoxes los elementos seleccionador y creando la tablaaddedCategories . Lo otro ya lo conocen y el DataTable dt esel resultado que pueden usar para llenar GridViews.DataTable Procedimiento() { DataTable addedCategories = new DataTable(); addedCategories.Columns.Add("Id"); DataRow row; foreach (ListItem item in chkListaMedicos.Items) { if (item.Selected) { row = addedCategories.NewRow(); row[0] = item.Value; addedCategories.Rows.Add(row); } } DataTable dt = new DataTable(); SqlDataAdapter da = new SqlDataAdapter("SP_ReporteAgrupadoMedicos",con.CON); da.SelectCommand.CommandType = CommandType.StoredProcedure; da.SelectCommand.Parameters.Add("@TablaInterfaz", SqlDbType.Structured).Value=addedCategories; da.SelectCommand.Parameters.Add("@FechaInicio", SqlDbType.Char).Value = txtFechaInicio.Text; da.SelectCommand.Parameters.Add("@FechaFin", SqlDbType.Char).Value = txtFechaFin.Text; da.Fill(dt); return dt; }
miércoles, 9 de diciembre de 2015
Validar límite de caracteres en TextArea
Programando en ASP.NET me encontré con el problema de los TextBox Multiline o TEXTAREA de html. Bueno el detalle está en que Visual Studio (2010) no me renderiza el atributto maxlength del control y si el MaxLength (el de servidor) no lo respeta. Y entonces diseñé le siguiente script que consta de una caja de texto una etiqueta y el evento keydown de JavaScript
<asp:TextBox ID="txtDiagnosticoPersonal" TextMode="MultiLine" Height="40px" onkeydown="onMaxLenght(event,20,this,'lblTotal1');" runat="server" Width="100%"></asp:TextBox>
<asp:Label ID="lblTotal1" runat="server" Text="0"></asp:Label>
function onMaxLenght2(e, numero, caja, etiqueta) {
var keynum = window.event ? window.event.keyCode : e.which;
if (keynum != 8)
total = document.getElementById(caja.id).value.length + 1;
else
total = document.getElementById(caja.id).value.length - 1;
if (total > numero && keynum != 8) {
event.returnValue = false;
}
else document.getElementById(etiqueta).innerText = (numero - total);
document.getElementById(etiqueta).style.color = (total >= numero) ? 'red' : 'black';
if (total > (numero + 1)) { /*Si el usuario pegó texto con Ctrl+V*/
var texto = document.getElementById(caja.id).value;
document.getElementById(caja.id).value = texto.substring(0, (numero - 1));
}
}
Donde 20 es el número máximo de caracteres que aceptará la caja de texto y lblTotal la etiqueta que mostrará el número de caracteres restantes. La etiqueta indica cuantos caracteres se pueden aún capturar y cuando se terminan aparece un cero en rojo. Este script también resta cuando se captura la tecla retroceso.
onkeydown="onMaxLenght(event,20,this,'lblTotal1');"
Este script fué probado en Google Chrome
<asp:TextBox ID="txtDiagnosticoPersonal" TextMode="MultiLine" Height="40px" onkeydown="onMaxLenght(event,20,this,'lblTotal1');" runat="server" Width="100%"></asp:TextBox>
<asp:Label ID="lblTotal1" runat="server" Text="0"></asp:Label>
function onMaxLenght2(e, numero, caja, etiqueta) {
var keynum = window.event ? window.event.keyCode : e.which;
if (keynum != 8)
total = document.getElementById(caja.id).value.length + 1;
else
total = document.getElementById(caja.id).value.length - 1;
if (total > numero && keynum != 8) {
event.returnValue = false;
}
else document.getElementById(etiqueta).innerText = (numero - total);
document.getElementById(etiqueta).style.color = (total >= numero) ? 'red' : 'black';
if (total > (numero + 1)) { /*Si el usuario pegó texto con Ctrl+V*/
var texto = document.getElementById(caja.id).value;
document.getElementById(caja.id).value = texto.substring(0, (numero - 1));
}
}
Donde 20 es el número máximo de caracteres que aceptará la caja de texto y lblTotal la etiqueta que mostrará el número de caracteres restantes. La etiqueta indica cuantos caracteres se pueden aún capturar y cuando se terminan aparece un cero en rojo. Este script también resta cuando se captura la tecla retroceso.
onkeydown="onMaxLenght(event,20,this,'lblTotal1');"
Este script fué probado en Google Chrome
miércoles, 2 de diciembre de 2015
Cambiar Formato de fecha a DateTimePicker de Jquery
Depués de intentar muchas cosas...
$(function () {
$("#ContentPlaceHolder2_txtFechaProxCi").datepicker({ dateFormat: 'dd-mm-yy' }).bind("change", function () {
})
});
martes, 1 de diciembre de 2015
MaskedEditValidator de AJAX, detiene el funcionamiento de mi página
Tenía horas revisando los errores de consola, hice dos páginas casi idénticas y después de mucho pensar quite el código del Masked edit Validator de AJAX. Ahora la página funciona correctamente, lo más difícil de esto es que los errores que me mandaba la consola del navegador no tienen que ver en absoluto con el problema pues ahora que la página funciona correctamente sigue apareciendo el mismo error.
<ajaxToolkit:MaskedEditValidator ID="MaskedEditValidator3" runat="server"
ControlExtender="MaskedEditExtender3"
ControlToValidate="TextBox3"
IsValidEmpty="False"
EmptyValueMessage="La hora es necesaria"
InvalidValueMessage="Capture la hora"
Display="Dynamic"
TooltipMessage="Hora de la próxima cita"
EmptyValueBlurredText="*"
InvalidValueBlurredMessage="Incorrecto"/>
<ajaxToolkit:MaskedEditValidator ID="MaskedEditValidator3" runat="server"
ControlExtender="MaskedEditExtender3"
ControlToValidate="TextBox3"
IsValidEmpty="False"
EmptyValueMessage="La hora es necesaria"
InvalidValueMessage="Capture la hora"
Display="Dynamic"
TooltipMessage="Hora de la próxima cita"
EmptyValueBlurredText="*"
InvalidValueBlurredMessage="Incorrecto"/>
miércoles, 25 de noviembre de 2015
Mis notas de consulta
Diseño Web
http://codepen.io/juanbrujo/details/yGpAK/
Libro Jquery
https://github.com/leandono/librojquery
http://codepen.io/juanbrujo/details/yGpAK/
Libro Jquery
https://github.com/leandono/librojquery
Suscribirse a:
Entradas (Atom)

