domingo, 23 de diciembre de 2012
Obtener fecha de inicio y fecha de termino SQL SERVER
Hay algunos casos en la que nuestra necesidad es obtener la primera fecha del mes y la fecha final, una manera sencilla de hacer esto es de la siguiente manera
Declare @Fecha datetime = GETDATE() - 1
SELECT CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(@Fecha)-1),@Fecha),105) As PrimerDiaMes
SELECT CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(DATEADD(mm,1,@Fecha))),DATEADD(mm,1,@Fecha)),105) As UltimoDiaMes
Saludos
miércoles, 19 de diciembre de 2012
"BBDN is undefined" BusyBox
Cuando usamos el control BusyBox de manera local nos funciona perfectamente, pero cuando lo publicamos en IIS, nos suele salir este error en script "BBDN is undefined", la solucion es configurar nuestro control de la siguiente manera:
<busyboxdotnet:BusyBox ID="BusyBox1" runat="server" CompressScripts="False"
GZipCompression="False" Image="GreenBar"
Text="Proceso ejecutandose, espere un momento" Title="Espere por favor"
ShowBusyBox="Custom" IncludeScriptsInPage="True" />
De esta manera no tendriamos problemas....
Saludos
<busyboxdotnet:BusyBox ID="BusyBox1" runat="server" CompressScripts="False"
GZipCompression="False" Image="GreenBar"
Text="Proceso ejecutandose, espere un momento" Title="Espere por favor"
ShowBusyBox="Custom" IncludeScriptsInPage="True" />
De esta manera no tendriamos problemas....
Saludos
viernes, 7 de diciembre de 2012
GROUP BY LINQ TO OBJECT II
Buenas , en esta ocasion veremos otro ejemplo como realizar un group by con linq , lo realize por un requerimiento personalizado, espero les ayude,
//Pre Linq
for (int i = 1; i < _xCadenaValoresListaPrecios.Length - 1; i++)
{
_xArrayProductoUnidad = _xCadenaValoresListaPrecios[i].Split(_xCaracter[1]);
_xFiltroValorProductoUnidad = _xArrayProductoUnidad[0].Split(_xCaracter[0]);
if (filtroEscala == _xFiltroValorProductoUnidad[0])
{
oListaString.Add(_xFiltroValorProductoUnidad[1].ToString() + "|" + _xFiltroValorProductoUnidad[2].ToString());
}
}
//Realizamos un Group By con Linq
var oLinqGroupBy = oListaString.GroupBy(item => item)
.Select(group => new
{
group.Key,
Count = group.Count()
});
#region Escala
foreach (var oString in oLinqGroupBy)
{
CatalogoProductoUnidad oCatalogoProductoUnidad = (CatalogoProductoUnidad)itemCatalogoProducto.CrearObjeto("CatalogoProductoUnidad");
oCatalogoProductoUnidad.PrecioPorActualizar = true;
string[] _xArrayValoresUnidad;
_xArrayValoresUnidad = oString.Key.Split('|');
if (_xArrayValoresUnidad[1].Equals("1")) _xArrayValoresUnidad[1] = "true";
if (_xArrayValoresUnidad[1].Equals("0")) _xArrayValoresUnidad[1] = "false";
oCatalogoProductoUnidad.ProductoUnidad = (ProductoUnidad)XMLHelper.CargarxCampoUnico("ProductoUnidad", "Abreviacion", _xArrayValoresUnidad[0].ToString());
oCatalogoProductoUnidad.UnidadPorDefectoEnVenta = Convert.ToBoolean(_xArrayValoresUnidad[1]);
string[] _xArrayListaPrecios;
string[] _xFiltroValor;
for (int j = 1; j < _xCadenaValoresListaPrecios.Length - 1; j++)
{
CatalogoProductoEscala oCatalogoProductoEscala = (CatalogoProductoEscala)oCatalogoProductoUnidad.CrearObjeto("CatalogoProductoEscala");
_xArrayListaPrecios = _xCadenaValoresListaPrecios[j].Split(_xCaracter[1]);
_xFiltroValor = _xArrayListaPrecios[0].Split(_xCaracter[0]);
//Si encuentra productos iguales obtiene sus escalas
if (filtroEscala == _xFiltroValor[0] && _xFiltroValor[1] == _xArrayValoresUnidad[0].ToString())
{
oCatalogoProductoEscala.Desde = Convert.ToInt32(_xFiltroValor[3]); //Desde
oCatalogoProductoEscala.Hasta = Convert.ToInt32(_xFiltroValor[4]); //Hasta
oCatalogoProductoEscala.PrecioConImpuesto = Convert.ToDecimal(_xFiltroValor[5]); //PrecioConImpuesto
oCatalogoProductoEscala.PrecioSinImpuesto = Convert.ToDecimal(_xFiltroValor[6]); //PrecioSinImpuesto
oCatalogoProductoEscala.MargenGanancia = Convert.ToDecimal(_xFiltroValor[7]); //MargenGanancia
oCatalogoProductoEscala.PorcentajeMargenGanancia = Convert.ToDecimal(_xFiltroValor[8]); //PorcentajeMargenGanancia
oCatalogoProductoEscala.PorcentajeDescuentoA = Convert.ToDecimal(_xFiltroValor[9]); //PorcentajeDescuentoA
oCatalogoProductoEscala.PorcentajeDescuentoB = Convert.ToDecimal(_xFiltroValor[10]); //PorcentajeDescuentoB
oCatalogoProductoEscala.MontoDescuentoA = Convert.ToDecimal(_xFiltroValor[11]); //MontoDescuentoA
oCatalogoProductoEscala.MontoDescuentoB = Convert.ToDecimal(_xFiltroValor[12]); //MontoDescuentoB
oCatalogoProductoEscala.PrecioEspecialConImpuesto = Convert.ToDecimal(_xFiltroValor[13]); //PrecioEspecialConImpuesto
oCatalogoProductoEscala.CostoProducto = oCatalogoProductoEscala.CatalogoProductoUnidad.CatalogoProducto.ProductoServicio.CostoPromedio;
oCatalogoProductoUnidad.CatalogoProductoEscala.Agregar(oCatalogoProductoEscala);
}
}
//itemCatalogoProducto.CatalogoProductoUnidad.Agregar(oCatalogoProductoUnidad, oCatalogoProductoUnidad.ProductoUnidad.ID);
itemCatalogoProducto.CatalogoProductoUnidad.Agregar(oCatalogoProductoUnidad);
//}
Saludos
//Pre Linq
for (int i = 1; i < _xCadenaValoresListaPrecios.Length - 1; i++)
{
_xArrayProductoUnidad = _xCadenaValoresListaPrecios[i].Split(_xCaracter[1]);
_xFiltroValorProductoUnidad = _xArrayProductoUnidad[0].Split(_xCaracter[0]);
if (filtroEscala == _xFiltroValorProductoUnidad[0])
{
oListaString.Add(_xFiltroValorProductoUnidad[1].ToString() + "|" + _xFiltroValorProductoUnidad[2].ToString());
}
}
//Realizamos un Group By con Linq
var oLinqGroupBy = oListaString.GroupBy(item => item)
.Select(group => new
{
group.Key,
Count = group.Count()
});
#region Escala
foreach (var oString in oLinqGroupBy)
{
CatalogoProductoUnidad oCatalogoProductoUnidad = (CatalogoProductoUnidad)itemCatalogoProducto.CrearObjeto("CatalogoProductoUnidad");
oCatalogoProductoUnidad.PrecioPorActualizar = true;
string[] _xArrayValoresUnidad;
_xArrayValoresUnidad = oString.Key.Split('|');
if (_xArrayValoresUnidad[1].Equals("1")) _xArrayValoresUnidad[1] = "true";
if (_xArrayValoresUnidad[1].Equals("0")) _xArrayValoresUnidad[1] = "false";
oCatalogoProductoUnidad.ProductoUnidad = (ProductoUnidad)XMLHelper.CargarxCampoUnico("ProductoUnidad", "Abreviacion", _xArrayValoresUnidad[0].ToString());
oCatalogoProductoUnidad.UnidadPorDefectoEnVenta = Convert.ToBoolean(_xArrayValoresUnidad[1]);
string[] _xArrayListaPrecios;
string[] _xFiltroValor;
for (int j = 1; j < _xCadenaValoresListaPrecios.Length - 1; j++)
{
CatalogoProductoEscala oCatalogoProductoEscala = (CatalogoProductoEscala)oCatalogoProductoUnidad.CrearObjeto("CatalogoProductoEscala");
_xArrayListaPrecios = _xCadenaValoresListaPrecios[j].Split(_xCaracter[1]);
_xFiltroValor = _xArrayListaPrecios[0].Split(_xCaracter[0]);
//Si encuentra productos iguales obtiene sus escalas
if (filtroEscala == _xFiltroValor[0] && _xFiltroValor[1] == _xArrayValoresUnidad[0].ToString())
{
oCatalogoProductoEscala.Desde = Convert.ToInt32(_xFiltroValor[3]); //Desde
oCatalogoProductoEscala.Hasta = Convert.ToInt32(_xFiltroValor[4]); //Hasta
oCatalogoProductoEscala.PrecioConImpuesto = Convert.ToDecimal(_xFiltroValor[5]); //PrecioConImpuesto
oCatalogoProductoEscala.PrecioSinImpuesto = Convert.ToDecimal(_xFiltroValor[6]); //PrecioSinImpuesto
oCatalogoProductoEscala.MargenGanancia = Convert.ToDecimal(_xFiltroValor[7]); //MargenGanancia
oCatalogoProductoEscala.PorcentajeMargenGanancia = Convert.ToDecimal(_xFiltroValor[8]); //PorcentajeMargenGanancia
oCatalogoProductoEscala.PorcentajeDescuentoA = Convert.ToDecimal(_xFiltroValor[9]); //PorcentajeDescuentoA
oCatalogoProductoEscala.PorcentajeDescuentoB = Convert.ToDecimal(_xFiltroValor[10]); //PorcentajeDescuentoB
oCatalogoProductoEscala.MontoDescuentoA = Convert.ToDecimal(_xFiltroValor[11]); //MontoDescuentoA
oCatalogoProductoEscala.MontoDescuentoB = Convert.ToDecimal(_xFiltroValor[12]); //MontoDescuentoB
oCatalogoProductoEscala.PrecioEspecialConImpuesto = Convert.ToDecimal(_xFiltroValor[13]); //PrecioEspecialConImpuesto
oCatalogoProductoEscala.CostoProducto = oCatalogoProductoEscala.CatalogoProductoUnidad.CatalogoProducto.ProductoServicio.CostoPromedio;
oCatalogoProductoUnidad.CatalogoProductoEscala.Agregar(oCatalogoProductoEscala);
}
}
//itemCatalogoProducto.CatalogoProductoUnidad.Agregar(oCatalogoProductoUnidad, oCatalogoProductoUnidad.ProductoUnidad.ID);
itemCatalogoProducto.CatalogoProductoUnidad.Agregar(oCatalogoProductoUnidad);
//}
Saludos
martes, 4 de diciembre de 2012
DOS UNIQUE EN UNA SOLA TABLE
EN ESTA OCASION VAMOS A CREAR DOS UNIQUE PARA UNA TABLA,
ALTER TABLE Ventas.CatalogoProducto
ADD CONSTRAINT UQ_CatalogoProducto_Double UNIQUE( IDListaCatalogoProductos, IDProductoServicio)
Saludos
jueves, 29 de noviembre de 2012
"Error en tiempo de ejecución de Microsoft JScript: 'BBDN' no está definido" busyboxdotnet
Cuando trabajamos con el control busyboxdotnet, se nos puede presentar el diguiente error :
"Error en tiempo de ejecución de Microsoft JScript: 'BBDN' no está definido" , este error se puede solucionar configurando el control de la siguiente manera:
<busyboxdotnet:BusyBox ID="BusyBox1" runat="server" CompressScripts="False"
GZipCompression="False" Image="GreenBar"
Text="Proceso ejecutandose, espere un momento" Title="Espere por favor" />
Saludos
"Error en tiempo de ejecución de Microsoft JScript: 'BBDN' no está definido" , este error se puede solucionar configurando el control de la siguiente manera:
<busyboxdotnet:BusyBox ID="BusyBox1" runat="server" CompressScripts="False"
GZipCompression="False" Image="GreenBar"
Text="Proceso ejecutandose, espere un momento" Title="Espere por favor" />
Saludos
lunes, 26 de noviembre de 2012
OBTENER LOS ESQUEMAS DE UNA BASE DE DATOS MS SQL SERVER
HAY OCASIONES EN LA QUE DESEAMOS OBTENER LOS ESQUEMAS DE NUESTRA BASE DE DATOS, CON ESTA SIMPLE CONSULTA OBTENEMOS LOS ESQUEMAS DE NUESTRA BASE DE DATOS:
SELECT DISTINCT TABLE_SCHEMA FROM Information_Schema.COLUMNS
NOS VEMOS
SELECT DISTINCT TABLE_SCHEMA FROM Information_Schema.COLUMNS
NOS VEMOS
sábado, 27 de octubre de 2012
Error :Tiempo de espera AsyncPostBackTimeout
Cuando tenemos consultas que requerir de por los menos 5 minutos y estamos trabajando con controles AJAX, nos suele salir un error de tiempo de espera,esto se debe a que ASP, por defecto lo maneja en 90 segundos , debemos de cambiarlo explicitamente para que tenga mas tiempo, lo realizamos de la siguiente manera
<asp:ScriptManager ID="ScriptManager1" runat="server" AsyncPostBackTimeout="800" ScriptMode="Release">
</asp:ScriptManager>
Saludos
sábado, 20 de octubre de 2012
Se detectó un posible valor Request.Form peligroso en el cliente
Cuando tenemos nuestra aplicacion web en Produccion y se inserta ciertos valores que para ASP son peligrosos nos muestra el siguiente mensaje
"Se detectó un posible valor Request.Form peligroso en el cliente "
Para solucionarno solo nos vamos al WEB CONFIG Y EDITAMOS LO SIGUIENTE:
Tener esto primero
<httpRuntime requestValidationMode="2.0"
<pages validateRequest="false">
<controls>
<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add tagPrefix="asp" namespace="System.Web.UI.DataVisualization.Charting"
assembly="System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</controls>
</pages>
Entonces de esta manera no tendremos inconvenientes con los usuarios en cuanto a caracteres validados por ASP
Saludos
"Se detectó un posible valor Request.Form peligroso en el cliente "
Para solucionarno solo nos vamos al WEB CONFIG Y EDITAMOS LO SIGUIENTE:
Tener esto primero
<httpRuntime requestValidationMode="2.0"
Si en caso no funciona lo primero agregar lo siguiente
<pages validateRequest="false">
<controls>
<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add tagPrefix="asp" namespace="System.Web.UI.DataVisualization.Charting"
assembly="System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</controls>
</pages>
Entonces de esta manera no tendremos inconvenientes con los usuarios en cuanto a caracteres validados por ASP
Saludos
miércoles, 19 de septiembre de 2012
error: Invalid temp directory in chart handler configuration [c:\TempImageFiles\] ASP.NET 3.5
Cuando trabajamos con graficos estadisticos localmente no tenemos ningun problema, pero cuando publicamos la aplicacion en el IIS 7.0, al menos fue en mi caso y creo que en las demas versiones es lo mismo, nos suele salir este error
Invalid temp directory in chart handler configuration [c:\TempImageFiles\]
Solucion:
Solo tenemos que agregar en el WEB CONFIG la siguiente KEY
<add key="ChartImageHandler" value="storage=file;timeout=20;" />
Saludos
Invalid temp directory in chart handler configuration [c:\TempImageFiles\]
Solucion:
Solo tenemos que agregar en el WEB CONFIG la siguiente KEY
<add key="ChartImageHandler" value="storage=file;timeout=20;" />
Saludos
martes, 18 de septiembre de 2012
Detalles tecnicos Sistema Pasapedidos
Adjunto los detalles tecnicos del sistema pasapedido
https://skydrive.live.com/?cid=1c1a217b3c1a25d3#cid=1C1A217B3C1A25D3&id=1C1A217B3C1A25D3!169
jueves, 2 de agosto de 2012
Database diagram support objects cannot be installed because this database does not have a valid owner. To continue, first use the Files page of the Database Properties dialog box or the ALTER AUTHORIZATION statement to set the database owner to a valid login, then add the database diagram support objects.
Cuando obtenemos este mensaje de error: "Database diagram support objects cannot be installed because this database does not have a valid owner. To continue, first use the Files page of the Database Properties dialog box or the ALTER AUTHORIZATION statement to set the database owner to a valid login, then add the database diagram support objects", nos da comunmente cuando restauramos una bd o por incompatibilidad
La solucion rapida es la siguiente:
EXEC sp_dbcmptlevel 'ERP', '90';
ALTER AUTHORIZATION ON DATABASE::ERP TO TULOGIN
y solucionado
Saludos
La solucion rapida es la siguiente:
EXEC sp_dbcmptlevel 'ERP', '90';
ALTER AUTHORIZATION ON DATABASE::ERP TO TULOGIN
y solucionado
Saludos
viernes, 6 de julio de 2012
GRIDVIEW HTMLEncode
Un problema bastante conocido en HTML son los problemas con los caracteres especiales ñ, acentos, etc, que de hecho a cualquiera le ha pasado en cualquier momento, en este caso lo veremos en un GRIDVIEW, veamos la problematica,
bueno si te ha pasado algo parecido la manera mas sencilla es simplemente cambiar el HTMLEncode a False en la propiedad de tu GridView de la siguiente manera.
<asp:BoundField DataField="pr_NombrePagina" HeaderText="Página" HtmlEncode="false">
<HeaderStyle Font-Bold="False" />
<ItemStyle HorizontalAlign="Center" />
</asp:BoundField>
Ahora se verá de esta manera, solucionado.
Saludos
bueno si te ha pasado algo parecido la manera mas sencilla es simplemente cambiar el HTMLEncode a False en la propiedad de tu GridView de la siguiente manera.
<asp:BoundField DataField="pr_NombrePagina" HeaderText="Página" HtmlEncode="false">
<HeaderStyle Font-Bold="False" />
<ItemStyle HorizontalAlign="Center" />
</asp:BoundField>
Ahora se verá de esta manera, solucionado.
Saludos
jueves, 5 de julio de 2012
J2ME TUTORIAL
BUENO EN ESTA OCASION PUBLICO UN TUTORIAL DE J2ME MUY BUENO, ESPERO LES SIRVA, LES ENVIO EL LINK DE DESCARGA ,
https://skydrive.live.com/?cid=1c1a217b3c1a25d3#cid=1C1A217B3C1A25D3&id=1C1A217B3C1A25D3!169
SALUDOS
https://skydrive.live.com/?cid=1c1a217b3c1a25d3#cid=1C1A217B3C1A25D3&id=1C1A217B3C1A25D3!169
SALUDOS
martes, 26 de junio de 2012
PORQUE ELEGIR C#.NET Y NO VB.NET
Muchas son las preguntas al querer desarrollar en la plataforma .Net, pero muchos se preguntan, en que lenguaje voy ha desarollar VB.NET o C#.NET, he aqui unas respuestas en base a mi experiencia y a la de unos colegas, y lo mas probable ha la de muchas personas que lean este blog y se daran cuenta el porque elegir C#.NET.
Una de las razones clara por la cual elegir C#.NET es por el uso de la sintaxis y semantica, C#.Net te abre las puertas ha diferentes lenguajes de la Familia C (Java , C++, C Builder, J#, entre otros ), los mas interesante no solo para lenguajes del lado del servidor si no tambien para lenguajes del lado del Cliente como JAVASCRIPT, y si hablamos de java nos estamos refiriendo a todos sus Framework, sus IDE'S de mayor relevancia en el mercado, JDEVELOPER , ECLIPSE, NETBEENS, entre otros, y he tenido oportunidades de conocer programadores de VB.NET (SI SE LES PUEDE LLAMAR PROGRAMADORES), que han querido pasarse a java , pero lamentablemente el "PROGRAMADOR", solo conocia el "JUEGO DE NIÑOS" llamado VISUAL BASIC, lo cual se le hace muy dificil empaparse en temas avanzados en Java , jajaj Saludos amigo , JEJEJEJEJEJE, pero se le suma una persona mas quien decidió incorporarse al hermoso lenguaje de la Familia C, OJO HEY YO NO TE OBLIGO HA QUE PROGRAMES EN JAVA NI EN C# , SOLO TOMALO COMO UN CONSEJO Y EXPERIENCIA DE PERSONAS COMO ELLA, SI ERES PROGRAMADOR DE BASIC, VISUAL BASIC, POWER BUILDER, ESPERO NO HABERTE OFENDIDO
Saludos ,
Una de las razones clara por la cual elegir C#.NET es por el uso de la sintaxis y semantica, C#.Net te abre las puertas ha diferentes lenguajes de la Familia C (Java , C++, C Builder, J#, entre otros ), los mas interesante no solo para lenguajes del lado del servidor si no tambien para lenguajes del lado del Cliente como JAVASCRIPT, y si hablamos de java nos estamos refiriendo a todos sus Framework, sus IDE'S de mayor relevancia en el mercado, JDEVELOPER , ECLIPSE, NETBEENS, entre otros, y he tenido oportunidades de conocer programadores de VB.NET (SI SE LES PUEDE LLAMAR PROGRAMADORES), que han querido pasarse a java , pero lamentablemente el "PROGRAMADOR", solo conocia el "JUEGO DE NIÑOS" llamado VISUAL BASIC, lo cual se le hace muy dificil empaparse en temas avanzados en Java , jajaj Saludos amigo , JEJEJEJEJEJE, pero se le suma una persona mas quien decidió incorporarse al hermoso lenguaje de la Familia C, OJO HEY YO NO TE OBLIGO HA QUE PROGRAMES EN JAVA NI EN C# , SOLO TOMALO COMO UN CONSEJO Y EXPERIENCIA DE PERSONAS COMO ELLA, SI ERES PROGRAMADOR DE BASIC, VISUAL BASIC, POWER BUILDER, ESPERO NO HABERTE OFENDIDO
Saludos ,
domingo, 17 de junio de 2012
CABECERA ESTATICA EN UN GRIDVIEW IE
Bueno un caso clásico que nos pasa a todos los que utilizamos el control GridView es cuando listamos gran cantidad de filas y a desplegar la cabecera del gridview no se mantiene estatica, con solo agregar unas lineas de CSS (Hojas de Estilo en Cascada), damos por resulto este problema, pero ojo solo para Internet Explorer,
.FijarHeaderGridView
{
position: relative;
top: expression(this.offsetParent.scrollTop-15);
}
Luego lo agregamos a nuestro GridView en su propiedad
<HeaderStyle CssClass="FijarHeaderGridView" />
Pueden ajustar el scrollTop a su manera de la que mejor les paresca y solucionado este pequeño problema.
Saludos
.FijarHeaderGridView
{
position: relative;
top: expression(this.offsetParent.scrollTop-15);
}
Luego lo agregamos a nuestro GridView en su propiedad
<HeaderStyle CssClass="FijarHeaderGridView" />
Pueden ajustar el scrollTop a su manera de la que mejor les paresca y solucionado este pequeño problema.
Saludos
viernes, 8 de junio de 2012
Problemas al acceder al valor de un GridView Edit Template ASP.NET
Cuando intentamos acceder a un valor de un GridView cuando usamos Edit Templates, tenemos que tener en cuenta la forma en que lo hacemos vamos ha ver un ejemplo:
<asp:TemplateField HeaderText="Cantidad">
<ItemTemplate>
<%# Eval("pr_PreciosListaPrecios")%>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtCantidad" runat="Server" Text='<%# Bind("pr_PreciosListaPrecios") %>' Width="90px"></asp:TextBox>
<%--Text='<%# Eval("pr_PreciosListaPrecios") %>'--%>
</EditItemTemplate>
<HeaderStyle HorizontalAlign="Left" />
<%-- <ItemStyle Width="25%" />--%></asp:TemplateField>
Si cargamos de esta manera el GridView, habria un Problema ya que no podriamos acceder al valor del ItemTemplate, la razón es sencilla, es porque no estamos especificando explicitamente lo que ASP, va ha convertir en tiempo de ejecucion, por lo tanto no podriamos acceder al valor e esta manera,
GridView.oRows[Index].Cells[3].Text;
La Solucion :
<asp:TemplateField HeaderText="Cantidad">
<ItemTemplate>
<%--<%# Eval("pr_PreciosListaPrecios")%>--%>
<asp:Label ID="lblCantidadLista" runat="server" Text='<%# Bind("pr_PreciosListaPrecios") %> '></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtCantidad" runat="Server" Text='<%# Bind("pr_PreciosListaPrecios") %>' Width="90px"></asp:TextBox>
<%--Text='<%# Eval("pr_PreciosListaPrecios") %>'--%>
</EditItemTemplate>
<HeaderStyle HorizontalAlign="Left" />
<%-- <ItemStyle Width="25%" />--%></asp:TemplateField>
Cambiamos la forma de cargar los datos indicando a la Propiedad , haciendole un "Bind" a un label , que en tiempo de ejecucion asp lo reconoce explicitamente como un "span", cosa que podriamos acceder al vaor sin ningun problema de la iguiente manera:
foreach (GridViewRow oRows in gridDetalle2.Rows) {
Label lblCantidadLista = oRows.Cells[3].FindControl("lblCantidadLista") as Label;
}
y obtenemos el valor sin ningun problemas,
Saludos,
<asp:TemplateField HeaderText="Cantidad">
<ItemTemplate>
<%# Eval("pr_PreciosListaPrecios")%>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtCantidad" runat="Server" Text='<%# Bind("pr_PreciosListaPrecios") %>' Width="90px"></asp:TextBox>
<%--Text='<%# Eval("pr_PreciosListaPrecios") %>'--%>
</EditItemTemplate>
<HeaderStyle HorizontalAlign="Left" />
<%-- <ItemStyle Width="25%" />--%></asp:TemplateField>
Si cargamos de esta manera el GridView, habria un Problema ya que no podriamos acceder al valor del ItemTemplate, la razón es sencilla, es porque no estamos especificando explicitamente lo que ASP, va ha convertir en tiempo de ejecucion, por lo tanto no podriamos acceder al valor e esta manera,
GridView.oRows[Index].Cells[3].Text;
La Solucion :
<asp:TemplateField HeaderText="Cantidad">
<ItemTemplate>
<%--<%# Eval("pr_PreciosListaPrecios")%>--%>
<asp:Label ID="lblCantidadLista" runat="server" Text='<%# Bind("pr_PreciosListaPrecios") %> '></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtCantidad" runat="Server" Text='<%# Bind("pr_PreciosListaPrecios") %>' Width="90px"></asp:TextBox>
<%--Text='<%# Eval("pr_PreciosListaPrecios") %>'--%>
</EditItemTemplate>
<HeaderStyle HorizontalAlign="Left" />
<%-- <ItemStyle Width="25%" />--%></asp:TemplateField>
Cambiamos la forma de cargar los datos indicando a la Propiedad , haciendole un "Bind" a un label , que en tiempo de ejecucion asp lo reconoce explicitamente como un "span", cosa que podriamos acceder al vaor sin ningun problema de la iguiente manera:
foreach (GridViewRow oRows in gridDetalle2.Rows) {
Label lblCantidadLista = oRows.Cells[3].FindControl("lblCantidadLista") as Label;
}
y obtenemos el valor sin ningun problemas,
Saludos,
viernes, 1 de junio de 2012
J2ME SISTEMA PASAPEDIDOS GOOGLE MAPS 3ER PARTE
He publicado la tercera parter del sistema pasapedidos con vista y reportes en google maps sobre ventas recorrido del vendedor,
les envio el link que he publicado
http://www.youtube.com/watch?v=m1fjlyXDFbg
Saludos
les envio el link que he publicado
http://www.youtube.com/watch?v=m1fjlyXDFbg
Saludos
Operation is not valid due to the current state of the object.
Cuando intentamos cargar una buena cantidad de campos de formulario nos puede pasar el siguiente error, "Operation is not valid due to the current state of the object." , este error en mi caso se dio por cargar demasiados campos en el servidor de produción haber cargado un GridView con mas de 1000 filas que incluian Templates de CheckBox,TextBox , el cual ASP por predeterminado solo acepta 1000 campos de formulario.
La Solución es que tenemos que agregar en nuestro Web Config , el siguiente Script
<appSettings>
<!--Importante si se desea manejar mas de 1000 filas en el GridView Sin Paginación-->
<add key="aspnet:MaxHttpCollectionKeys" value="10000" />
</appSettings>
De esta manera podemos introducir mas campos de formulario sin problemas ni errores en nuestro sistema Web ojo la propiedad value es configurable podemos aumentarlo o disminuirlo depende sea nuestro caso;
Saludos ,
La Solución es que tenemos que agregar en nuestro Web Config , el siguiente Script
<appSettings>
<!--Importante si se desea manejar mas de 1000 filas en el GridView Sin Paginación-->
<add key="aspnet:MaxHttpCollectionKeys" value="10000" />
</appSettings>
De esta manera podemos introducir mas campos de formulario sin problemas ni errores en nuestro sistema Web ojo la propiedad value es configurable podemos aumentarlo o disminuirlo depende sea nuestro caso;
Saludos ,
domingo, 6 de mayo de 2012
PROBLEMAS CON WEB CONFIG AL SUBIR AL SERVIDOR DE PRODUCCION
CUANDO REALIZAMOS UNA SUBIDA A UN SERVIDOR DE PRODUCCION PUBLICO OSEA QUE ACCEDEMOS A TRAVEZ DE LA IP PUBLICA, NOS PRESENTAN UN ERROR GENERICO COMO POR EJEMPLO
Server Error in '/' Application.
Details: To enable the details of this specific error message to be viewable on remote machines, please create a <customErrors> tag within a "web.config" configuration file located in the root directory of the current web application. This <customErrors> tag should then have its "mode" attribute set to "Off".
Con este tipo de excepciones no entendemos nada ni donde se produsco el error ni nada por el estilo la solucion sencilla y efecias es agregar o modificar las siguientes lineas en el archivo de configuracion.
<customErrors mode="Off"/>
y listo nos mostrara el error mas explicito.
Saludos
Server Error in '/' Application.
Runtime Error
Description: An application error occurred on the server. The current custom error settings for this application prevent the details of the application error from being viewed remotely (for security reasons). It could, however, be viewed by browsers running on the local server machine.Details: To enable the details of this specific error message to be viewable on remote machines, please create a <customErrors> tag within a "web.config" configuration file located in the root directory of the current web application. This <customErrors> tag should then have its "mode" attribute set to "Off".
Con este tipo de excepciones no entendemos nada ni donde se produsco el error ni nada por el estilo la solucion sencilla y efecias es agregar o modificar las siguientes lineas en el archivo de configuracion.
<customErrors mode="Off"/>
y listo nos mostrara el error mas explicito.
Saludos
lunes, 23 de abril de 2012
PROBLEMAS AL MOSTRAR POPUP INTERNET EXPLORER
Cuando pasamos de un Servidor de Pruebas a un servidor de Produccion podemos presentar un pequeño problema al abrir nuestras ventanas popup, si es este su caso hay una solucion facil y sencilla esto es debido ha que tenemos habilitado por defecto el modo protegido solo debemos deshabilitarlo, nos mostrará un mensaje de confirmación, lo confirmamos y ya estará listo para mostra nuestros popup .
Saludos Coordiales ,
Saludos Coordiales ,
lunes, 9 de abril de 2012
DataFormatString GridView
Buenas en esta ocasion publicare algunos formatos para el gridview de gran utilidad:
Formato para las Fecha Datetime Cuando nos guarda con Fecha y Hora pero no queremos mostrar los minutos ni segundos
DataFormatString="{0:dd-MM-yyyy}"
Formato para rellenar de ceros en un gridview solo nos basta con cambiar a la cantidad de 0 que queramos
DataFormatString="{0:D7}"
Para Formatos en Numeros
DataFormatString="{0:F2}"
SALUDOS
Formato para las Fecha Datetime Cuando nos guarda con Fecha y Hora pero no queremos mostrar los minutos ni segundos
DataFormatString="{0:dd-MM-yyyy}"
Formato para rellenar de ceros en un gridview solo nos basta con cambiar a la cantidad de 0 que queramos
DataFormatString="{0:D7}"
Para Formatos en Numeros
DataFormatString="{0:F2}"
SALUDOS
domingo, 8 de abril de 2012
Codigos de Barra control de Series
Cuando realizamos los modulos de almacen ,venta, es necesario tener un control por series, por codigos de barra, para llevar el correcto control del stock y las ventas, ademas para facilitar las entradas y salidas de los productos y las ventas para ellos el sistema desarrollado necesitaba imprimir los codigos de barra en un formato indicado, pero para los que no saben (aunque la mayoria creo yo lo saben)los codigos de barra no son mas que fuentes que son reconocidas luego por el lector de codigos de barra que hay que configurar correctamente su funcionalidad para que reconosco correctamente, como fue en mi caso que solo debi cambiar el tipo de idioma a español,bueno les dejo el tipo de fuente de codigo de barra que he usado, ya ustedes lo adaptan a sus necesidades (Code Bar), descargenlo.
https://skydrive.live.com/?cid=1c1a217b3c1a25d3#cid=1C1A217B3C1A25D3&id=1C1A217B3C1A25D3!169
saludos,
https://skydrive.live.com/?cid=1c1a217b3c1a25d3#cid=1C1A217B3C1A25D3&id=1C1A217B3C1A25D3!169
saludos,
TRANSACCIONES JDBC JAVA
En esta ocasion veremos como realizar transacciones con JDBC en JSP(Java Server Page), bueno les pongo el codigo para luego explicar un poco lo sencillo de manejar transacciones con JDBC.
try{
_xArrItems = _xCadenaDetallePedido.split("-");
_xArrCodigoProducto = _xArrItems[1].split("@");
_xArrNombreProducto = _xArrCodigoProducto[1].split("<");
_xArrCantidadProducto = _xArrNombreProducto[1].split(">");
//_xArrNombreProducto = _xArrNombreProducto[0].split("$");
System.out.println("Producto : " + _xArrNombreProducto[0]);
//_xArrNombreProducto = _xArrCodigoProducto[0].split("$");
System.out.println("Items : " + _xArrItems[0]);
System.out.println("Items[1] : " + _xArrItems[1]);
System.out.println("CodProd : " + _xArrCodigoProducto[0]);
System.out.println("CodProd[1] : " + _xArrCodigoProducto[1]);
System.out.println("Producto : " + _xArrNombreProducto[0]);
System.out.println("Producto[1] : " + _xArrNombreProducto[1]);
System.out.println("Cantidad[0] : " + _xArrCantidadProducto[0]);
System.out.println("Cantidad[1] : " + _xArrCantidadProducto[1]);
System.out.println("Nuevo : ");
try{
_xItems = _xArrItems[0];
_xCodigoProducto = _xArrCodigoProducto[0];
_xNombreProducto = _xArrNombreProducto[0];
_xCantidadProducto = _xArrCantidadProducto[0];
_xArrItemsResultado = _xItems.split("|");
_xArrCodigoProductoResultado = _xCodigoProducto.split("|");
_xArrNombreProductoResultado = _xNombreProducto.split("|");
_xArrCantidadProductoResultado = _xCantidadProducto.split("|");
System.out.println("Items: " +_xItems);
System.out.println("CodigoProducto: " +_xCodigoProducto);
System.out.println("NombreProducto: " +_xNombreProducto);
System.out.println("CantidadProducto: " +_xCantidadProducto);
System.out.println("Items Length: " + _xArrItems.length);
Vector _xItemVector = new Vector();
Vector _xItemCodProducto = new Vector();
Vector _xItemCantidadProducto = new Vector();
int _xPosicionProducto = 0;
int _xPosicionItemsProducto = 0;
int _xPosicionCodigoProducto = 0;
int _xPosicionCantidadProducto = 0;
}catch(Exception ex){
System.out.println("Fallo for: " + ex.getMessage());
}
oConnection.setAutoCommit(false);
//Guardamos la cabezera en Nuestra Primera Invocacion
oCallableStatement = oConnection.prepareCall("{call PA_INSERT_PEDIDOCABECERA(?,?,?,?)}") ;
// Se indica que el primer interrogante es de salida.
oCallableStatement.registerOutParameter(1,Types.NUMERIC);
// Se pasa un parámetro en el segundo interrogante
oCallableStatement.setString(2,"1");
// Se pasa un parámetro en el tercer interrogante.
oCallableStatement.setString(3,"1");
// Se pasa un parámetro en el cuarto interrogante.
oCallableStatement.setString(4,"20");
oCallableStatement.execute();
//Guardamos el detalle en Nuestra Segunda Invocacion
for(int i = 0; i <= _xArrItems.length -1;i++){
if(!_xArrItems[i].trim().equals("") && !_xArrItems[i].trim().equals("|") ){
oCallableStatement = oConnection.prepareCall("{call PA_INSERT_PEDIDODETALLE(?,?,?,?)}") ;
// Se indica que el primer interrogante es de salida.
oCallableStatement.setString(1,"1");
// Se pasa un parámetro en el segundo interrogante
oCallableStatement.setString(2,_xArrItems[i]);
// Se pasa un parámetro en el tercer interrogante.
oCallableStatement.setString(3,_xArrCodigoProducto[i]);
// Se pasa un parámetro en el cuarto interrogante.
oCallableStatement.setString(4,_xArrCantidadProducto[i]);
oCallableStatement.execute();
}
}
//_xCodigoPedidoCabecera = oCallableStatement.getString(1);
//mensaje = st.getString(1);
System.out.print("el mensaje es "+_xCodigoPedidoCabecera );
oCallableStatement.close();
oConnection.commit();
}catch(Exception ex){
oConnection.rollback();
System.out.println("Error en Transaccion: " +ex.getMessage());
}
oConnection.setAutoCommit(true);
como podemos ver tenemos la conexion setAutoCommit en modo False, porque cuando se crea una conexion por JDBC por defecto el modo de confirmacion de AUTOMATICO osea cuando realizamos un execute cada sentencia se maneja como si fuese una transaccion, pero hay ocasiones como esta donde queremos guardar un maestro detalle osea una composicion, para guardar dos o mas sentencias solo necesitamos desactivar el modo de confirmacion automatica oConnection.setAutoCommit(FALSE) y de esta manera podemos executar x sentencia DML, hasta cuando le indiquemos explicitamente que se va ha confirmar osea oConnection.setAutoCommit(true), espero les alla quedado claro.
Saludos
try{
_xArrItems = _xCadenaDetallePedido.split("-");
_xArrCodigoProducto = _xArrItems[1].split("@");
_xArrNombreProducto = _xArrCodigoProducto[1].split("<");
_xArrCantidadProducto = _xArrNombreProducto[1].split(">");
//_xArrNombreProducto = _xArrNombreProducto[0].split("$");
System.out.println("Producto : " + _xArrNombreProducto[0]);
//_xArrNombreProducto = _xArrCodigoProducto[0].split("$");
System.out.println("Items : " + _xArrItems[0]);
System.out.println("Items[1] : " + _xArrItems[1]);
System.out.println("CodProd : " + _xArrCodigoProducto[0]);
System.out.println("CodProd[1] : " + _xArrCodigoProducto[1]);
System.out.println("Producto : " + _xArrNombreProducto[0]);
System.out.println("Producto[1] : " + _xArrNombreProducto[1]);
System.out.println("Cantidad[0] : " + _xArrCantidadProducto[0]);
System.out.println("Cantidad[1] : " + _xArrCantidadProducto[1]);
System.out.println("Nuevo : ");
try{
_xItems = _xArrItems[0];
_xCodigoProducto = _xArrCodigoProducto[0];
_xNombreProducto = _xArrNombreProducto[0];
_xCantidadProducto = _xArrCantidadProducto[0];
_xArrItemsResultado = _xItems.split("|");
_xArrCodigoProductoResultado = _xCodigoProducto.split("|");
_xArrNombreProductoResultado = _xNombreProducto.split("|");
_xArrCantidadProductoResultado = _xCantidadProducto.split("|");
System.out.println("Items: " +_xItems);
System.out.println("CodigoProducto: " +_xCodigoProducto);
System.out.println("NombreProducto: " +_xNombreProducto);
System.out.println("CantidadProducto: " +_xCantidadProducto);
System.out.println("Items Length: " + _xArrItems.length);
Vector _xItemVector = new Vector();
Vector _xItemCodProducto = new Vector();
Vector _xItemCantidadProducto = new Vector();
int _xPosicionProducto = 0;
int _xPosicionItemsProducto = 0;
int _xPosicionCodigoProducto = 0;
int _xPosicionCantidadProducto = 0;
}catch(Exception ex){
System.out.println("Fallo for: " + ex.getMessage());
}
oConnection.setAutoCommit(false);
//Guardamos la cabezera en Nuestra Primera Invocacion
oCallableStatement = oConnection.prepareCall("{call PA_INSERT_PEDIDOCABECERA(?,?,?,?)}") ;
// Se indica que el primer interrogante es de salida.
oCallableStatement.registerOutParameter(1,Types.NUMERIC);
// Se pasa un parámetro en el segundo interrogante
oCallableStatement.setString(2,"1");
// Se pasa un parámetro en el tercer interrogante.
oCallableStatement.setString(3,"1");
// Se pasa un parámetro en el cuarto interrogante.
oCallableStatement.setString(4,"20");
oCallableStatement.execute();
//Guardamos el detalle en Nuestra Segunda Invocacion
for(int i = 0; i <= _xArrItems.length -1;i++){
if(!_xArrItems[i].trim().equals("") && !_xArrItems[i].trim().equals("|") ){
oCallableStatement = oConnection.prepareCall("{call PA_INSERT_PEDIDODETALLE(?,?,?,?)}") ;
// Se indica que el primer interrogante es de salida.
oCallableStatement.setString(1,"1");
// Se pasa un parámetro en el segundo interrogante
oCallableStatement.setString(2,_xArrItems[i]);
// Se pasa un parámetro en el tercer interrogante.
oCallableStatement.setString(3,_xArrCodigoProducto[i]);
// Se pasa un parámetro en el cuarto interrogante.
oCallableStatement.setString(4,_xArrCantidadProducto[i]);
oCallableStatement.execute();
}
}
//_xCodigoPedidoCabecera = oCallableStatement.getString(1);
//mensaje = st.getString(1);
System.out.print("el mensaje es "+_xCodigoPedidoCabecera );
oCallableStatement.close();
oConnection.commit();
}catch(Exception ex){
oConnection.rollback();
System.out.println("Error en Transaccion: " +ex.getMessage());
}
oConnection.setAutoCommit(true);
como podemos ver tenemos la conexion setAutoCommit en modo False, porque cuando se crea una conexion por JDBC por defecto el modo de confirmacion de AUTOMATICO osea cuando realizamos un execute cada sentencia se maneja como si fuese una transaccion, pero hay ocasiones como esta donde queremos guardar un maestro detalle osea una composicion, para guardar dos o mas sentencias solo necesitamos desactivar el modo de confirmacion automatica oConnection.setAutoCommit(FALSE) y de esta manera podemos executar x sentencia DML, hasta cuando le indiquemos explicitamente que se va ha confirmar osea oConnection.setAutoCommit(true), espero les alla quedado claro.
Saludos
miércoles, 21 de marzo de 2012
"Windows no puede iniciar apache Tomcat 6 en Equipo local. Para más información, revise el registro de sucesos del sistema. Si este no es un servicio de Microsoft, póngase en contacto con el proveedor" Apache Tomcat 6.0
Buenas hoy tuve un problema al instalar Apache Tomcat 6.0, ya que despues despues de algun tiempo estoy volviendo a programar en java, y ya teniendo instalado el IDE Netbeens, necesitaba instalar ahora Apache Tomcat, lo cual me volvio a dar el mismo problema que ya me habia sucedido hace mas de un año,cuando intentamos iniciar el servicio Apache,nos da la excepción "Windows no puede iniciar apache Tomcat 6 en Equipo local. Para más información, revise el registro de sucesos del sistema. Si este no es un servicio de Microsoft, póngase en contacto con el proveedor", motivo por el cual hoy he decido publicarlo, veamos primero tenemos que agregar la ruta del JDK OSEA :
C:\Program Files (x86)\Java\jdk1.6.0_21\bin
a nuestra variable de entorno Path seguida de un punto y como (;) debe quedar algo asi:
%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\DTS\Binn\;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\;C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\;C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies\;c:\Program Files (x86)\Microsoft SQL Server\90\Tools\binn\;C:\Program Files (x86)\Rational\common;C:\Program Files (x86)\Java\jdk1.6.0_21\bin
Luego iniciamos de nuevo el servicio y listo !!! ;
Espero les sirva
Saludos ,
C:\Program Files (x86)\Java\jdk1.6.0_21\bin
a nuestra variable de entorno Path seguida de un punto y como (;) debe quedar algo asi:
%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\DTS\Binn\;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\;C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\;C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies\;c:\Program Files (x86)\Microsoft SQL Server\90\Tools\binn\;C:\Program Files (x86)\Rational\common;C:\Program Files (x86)\Java\jdk1.6.0_21\bin
Luego iniciamos de nuevo el servicio y listo !!! ;
Espero les sirva
Saludos ,
martes, 20 de marzo de 2012
shrink log Transaction de SQL Server 2008
Hay algunas veces cuando nos damos cuenta que nuestra BD esta muy pesada, entonces nos ponemos pensar cual es el motivo, en mi caso el motivo principal fue que me di cuenta que el Log habia crecido demasiado, la causa fue por las transacciones realizadas en un ambiente de pruebas, la solucion sencilla y eficaz fue :
Espero les sirva
Saludos.
- Haz una copia de seguridad de Nuestra base de datos.
- Ponemos la BD modo SIMPLE - DataBase/Propiedades/Opciones/Recovery Model /Simple
- Encogemos el archivo Log, Database/Tareas/shrink/Files/ File Type/ Log/reorganización de las páginas antes de liberar espacio no utilizado(reorganize pages before releasing unused space)/Encoger archivo.
- Ponemos la BD en modo FULL otra vez y Listo.
Espero les sirva
Saludos.
viernes, 16 de marzo de 2012
with(RowLock,Xlock) SQL SERVER 2008 Bloqueos Exclusivos
Buenas en esta ocasion hablaremos sobre los bloqueos exclusivos en SQL SERVER, ya que nos dimos con un problema.
PROBLEMATICA :
Esta semana estuvimos desarrollando el modulo de Produccion, en este modulo habia un requerimiento especial,nos prohibian el uso del IDENTITY, creo que la mayoria de los desarrolladores principiantes, estan muy acostumbrados al uso del IDENTITY , el requerimiento era para la generacion de Nro de Lotes, en esta tabla no se podia perder ni un solo correlativo, tambien nos pedian el mismo requerimiento para los codigos de todas las tablas.
SOLUCIÓN :
Bueno en SQL SERVER (2000- 2008), existe una instruccion para resolver este problemas, que es,
with(RowLock,Xlock) , con esta instruccion se obtienen bloqueos exclusivos por fila, es decir puedo bloquear la fila de una tabla, mientras mi transaccion este activa, el problema no es en la BD si no en la aplicación, es decir el SQL CLIENT de .Net no reconoce que la transaccion es exclusiva Y NOS botara una excepción,
Vamos a resumir esta instruccion
with(RowLock,Xlock)
RowLock = Bloquea la fila indicada en el Select.
Xlock = Hace que el bloque sea exclusivo.
Aqui un pequeño basico ejemplo.
CREATE PROC PA_AGREGAR_A
AS
declare @correlativo numeric
declare @codigoNuevo numeric
select @correlativo = CORRELATIVO
from CORRELATIVO
with(RowLock,Xlock)
set @codigoNuevo = @correlativo + 1
insert into A values (@codigoNuevo,'Nuevo')
update CORRELATIVO
set CORRELATIVO.CORRELATIVO = @codigoNuevo
Bueno siendo ya casi media noche me despido
Saludo.
PROBLEMATICA :
Esta semana estuvimos desarrollando el modulo de Produccion, en este modulo habia un requerimiento especial,nos prohibian el uso del IDENTITY, creo que la mayoria de los desarrolladores principiantes, estan muy acostumbrados al uso del IDENTITY , el requerimiento era para la generacion de Nro de Lotes, en esta tabla no se podia perder ni un solo correlativo, tambien nos pedian el mismo requerimiento para los codigos de todas las tablas.
SOLUCIÓN :
Bueno en SQL SERVER (2000- 2008), existe una instruccion para resolver este problemas, que es,
with(RowLock,Xlock) , con esta instruccion se obtienen bloqueos exclusivos por fila, es decir puedo bloquear la fila de una tabla, mientras mi transaccion este activa, el problema no es en la BD si no en la aplicación, es decir el SQL CLIENT de .Net no reconoce que la transaccion es exclusiva Y NOS botara una excepción,
Vamos a resumir esta instruccion
with(RowLock,Xlock)
RowLock = Bloquea la fila indicada en el Select.
Xlock = Hace que el bloque sea exclusivo.
Aqui un pequeño basico ejemplo.
CREATE PROC PA_AGREGAR_A
AS
declare @correlativo numeric
declare @codigoNuevo numeric
select @correlativo = CORRELATIVO
from CORRELATIVO
with(RowLock,Xlock)
set @codigoNuevo = @correlativo + 1
insert into A values (@codigoNuevo,'Nuevo')
update CORRELATIVO
set CORRELATIVO.CORRELATIVO = @codigoNuevo
Bueno siendo ya casi media noche me despido
Saludo.
sábado, 10 de marzo de 2012
LA VIDA DEL DESARROLLADOR - RELAX
EN ESTA OCASION UN PEQUEÑO RELAJO, COMO MUCHOS YA HEMOS ESCUCHADO, NUESTRO OFICIO TIENE UN GRAN PARECIDO A LA PROSTITUCION, OJO NO ES UNA BROMA PUES ES LA PURA VERDAD, XD, ASI QUE SI PIENSAS SER DESARROLLADOR HE AQUI UNA PEQUEÑA LISTA DE LO QUE TE ESPERA XD, LO QUE HARAS POR LO MENOS UN BUEN TIEMPO DE TU VIDA;
XD XP
- Generalmente, trabajas hasta tarde. ¡Como las putas!
- Generalmente, eres más productivo por la noche. ¡Como las putas!
- Te pagan para mantener al cliente feliz. ¡Como a las putas!
- Cobras por hora, pero tu tiempo se extiende hasta que termines. ¡Como las putas!
- Si eres bueno, nunca estás orgulloso de lo que haces. ¡Como las putas!
- Te recompensan por satisfacer las fantasías de tus clientes. ¡Como a las putas!
Te sería difícil tener y mantener una familia. ¡Como a las putas! - Cuando te preguntan en qué trabajas, no lo puedes explicar. ¡Como las putas!
- Tus amigos se distancian de ti, y tú sólo andas con otros iguales que tú. ¡Como las putas!
- El cliente paga tu cuenta del hotel, y por horas trabajadas. ¡Como a las putas!
- Evalúan tu "capacidad" con horribles pruebas. ¡Como a las putas!
- El cliente siempre quiere pagar menos y, encima, quiere que hagas maravillas. ¡Como las putas!
- Cada día, al levantarte, dices: "¡NO VOY A HACER ESTO TODA MI VIDA!". ¡Como las putas!
- Sin conocer nada de su problema, los clientes esperan que les des el consejo que necesitan. ¡Como las putas!
- Si las cosas salen mal, es siempre culpa tuya. ¡Como las putas!
- Tienes que brindarle servicios gratis a tu jefe, amigos y familiares. ¡Como las putas!
XD XP
lunes, 27 de febrero de 2012
Group By SUM Linq C#
Hoy me vi en una situacion donde debia usar Group By SUM con linq por motivios de tiempo en el que actualmente me encuentro no puedo dar mas explicaciones les muestro el codigo ya que en los proyecto que me encuentro actualmente mi tiempo es cortisimo, bueno hay les envio el codigo que realize :
var result = from oObjetoGroup in
(from oRes in oLista
select new
{
oRes.pr_NombreProducto,
oRes.pr_NumeroLote,
oRes.pr_CodigoLote,
oRes.pr_CodigoProducto,
oRes.pr_CodigoSede,
oRes.pr_CodigoCompania,
oRes.pr_CodigoAlmacen,
oRes.pr_CantidadPedida,
oRes.pr_Items
})
group oObjetoGroup by new
{
oObjetoGroup.pr_NombreProducto,
oObjetoGroup.pr_NumeroLote,
oObjetoGroup.pr_CodigoLote,
oObjetoGroup.pr_CodigoProducto,
oObjetoGroup.pr_CodigoSede,
oObjetoGroup.pr_CodigoCompania,
oObjetoGroup.pr_CodigoAlmacen,
oObjetoGroup.pr_CantidadPedida,
oObjetoGroup.pr_Items
} into groupBy
select new
{
groupBy.Key.pr_CodigoProducto,
groupBy.Key.pr_CodigoLote,
groupBy.Key.pr_NombreProducto,
groupBy.Key.pr_NumeroLote,
groupBy.Key.pr_Items,
pr_CantidadPedida = groupBy.Sum(oRes => oRes.pr_CantidadPedida)
};
esta bastante claro , espero les sirva
Saludos,
var result = from oObjetoGroup in
(from oRes in oLista
select new
{
oRes.pr_NombreProducto,
oRes.pr_NumeroLote,
oRes.pr_CodigoLote,
oRes.pr_CodigoProducto,
oRes.pr_CodigoSede,
oRes.pr_CodigoCompania,
oRes.pr_CodigoAlmacen,
oRes.pr_CantidadPedida,
oRes.pr_Items
})
group oObjetoGroup by new
{
oObjetoGroup.pr_NombreProducto,
oObjetoGroup.pr_NumeroLote,
oObjetoGroup.pr_CodigoLote,
oObjetoGroup.pr_CodigoProducto,
oObjetoGroup.pr_CodigoSede,
oObjetoGroup.pr_CodigoCompania,
oObjetoGroup.pr_CodigoAlmacen,
oObjetoGroup.pr_CantidadPedida,
oObjetoGroup.pr_Items
} into groupBy
select new
{
groupBy.Key.pr_CodigoProducto,
groupBy.Key.pr_CodigoLote,
groupBy.Key.pr_NombreProducto,
groupBy.Key.pr_NumeroLote,
groupBy.Key.pr_Items,
pr_CantidadPedida = groupBy.Sum(oRes => oRes.pr_CantidadPedida)
};
esta bastante claro , espero les sirva
Saludos,
viernes, 17 de febrero de 2012
IIS Windows Server 2008 Problemas con Formato de Fechas y Monedas
Buenas, hoy me surgio una excepcion en el servidor de produccion al publicar la aplicacion web, me di con la sorpresa que todo corria correctamente pero el formato de moneda en el cual se estaba guardando no era el correcto osea me estaba reconociendo la coma como punto decimal, lo primero que se nos viene a la mente es la CONFIGURACION REGIONAL DEL SERVIDOR,QUE ES LO CORRECTO, PERO HABIA ALGUN PASO ADICIONAL QUE REALIZAR QUE LUEGO QUE CONFIGURAMOS LOS FORMATOS,UBICACION , ADMINISTRATIVO, DEBEMOS SEGUIR EL SIGUIENTE PASO
1.- CONFIGURAR LA CONFIGURACION REGIONAL DE TAL MODO QUE TODO QUEDE CORRECTO ALGO ASI (no explico los pasos anteriores porque son muy basicos),ojo todo debe coincidir como en este caso teniendo en cuenta al usuario IIS_IUSRS.
2.- Nos vamos al cmd / IISRESET
Reseteamos el IIS y de los mas seguro todo va ha estar correctamente.
Saludos
1.- CONFIGURAR LA CONFIGURACION REGIONAL DE TAL MODO QUE TODO QUEDE CORRECTO ALGO ASI (no explico los pasos anteriores porque son muy basicos),ojo todo debe coincidir como en este caso teniendo en cuenta al usuario IIS_IUSRS.
2.- Nos vamos al cmd / IISRESET
Reseteamos el IIS y de los mas seguro todo va ha estar correctamente.
Saludos
lunes, 13 de febrero de 2012
BASIC UN LENGUAJE QUE TODAVIA SE ENSEÑA
Me causa un poco de admiraciòn que aun en institutos superiores y en algunas universidades aun se este enseñando el lenguaje Basic (vb.net ,vb6,) NO TENGO NADA EN CONTRA DE LOS PROGRAMADORES DE BASIC, pero yo creo que ya es hora de dar una vuelta a la pagina y dejar el lenguaje BASIC que poco ha poco va desapareciendo y la verdad no estoy seguro si desaparecera pronto, ESTA NO ES UNA CAMPAÑA ANTI BASIC, PERO EN MI PARTICULARIDAD PREFIERO LOS LENGUAJES que deriven de la hermosa familia C , bueno finalmente ya cada uno elije el lenguaje que mas guste.
Saludos ,
Saludos ,
domingo, 29 de enero de 2012
PROBLEMAS AL COMPARTIR SQL CLIENT EN RED
Cuando tratamos de compartir un servidor remoto en SQL SERVER 2008 nos damos cuenta que no nos permite compartir veamos los pasos para poder compartirlo en una red.
1. Verifique el puerto del SQL osea el 1433 se pueda ver desde la maquina cliente.
2. Luego nos vamos al administrador de configuraciones de SQL SERVER luego seleccionamos SQL SERVER NETWORK CONFIGURATION / PROTOCOLS FOR MSSQLSERVER / TCP -IP / , luego nos vamos a la pestaña IP ADDRESSES Y SELECCIONAMOS TODOS LOS COMBOS A YES EN ACTIVE Y ENABLED y de esta manera nos podremos conectar sin nungun problemas en una red .
Saludos.
1. Verifique el puerto del SQL osea el 1433 se pueda ver desde la maquina cliente.
2. Luego nos vamos al administrador de configuraciones de SQL SERVER luego seleccionamos SQL SERVER NETWORK CONFIGURATION / PROTOCOLS FOR MSSQLSERVER / TCP -IP / , luego nos vamos a la pestaña IP ADDRESSES Y SELECCIONAMOS TODOS LOS COMBOS A YES EN ACTIVE Y ENABLED y de esta manera nos podremos conectar sin nungun problemas en una red .
Saludos.
miércoles, 25 de enero de 2012
GRIDVIEW CAMBIAR COLOR POR FILTRO ASP.NET 3.5 C#
Cuando deseamos cambiar los colores a un Control Gridview desde el lado del servidor, debemos de ingresar en el evento fn_GridViewRowDataBound y preguntar por la fila en donde se encuentra el flag o la descripcion de algun flag que tengamos en este caso es por la descripcion para que sea mas entendible
public void fn_GridViewRowDataBound(GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
if (e.Row.Cells[2].Text == "DESACTIVADO")
{
for (int _xCell = 0; _xCell <= e.Row.Cells.Count - 1; _xCell++) {
e.Row.Cells[_xCell].ForeColor = System.Drawing.Color.Red;
}
}
}
y de esta manera alteramos las letras del detalle del gridview y si quiseramos cambiar el fondo solo lo cambiamos por BackColor
Nos vemos,
public void fn_GridViewRowDataBound(GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
if (e.Row.Cells[2].Text == "DESACTIVADO")
{
for (int _xCell = 0; _xCell <= e.Row.Cells.Count - 1; _xCell++) {
e.Row.Cells[_xCell].ForeColor = System.Drawing.Color.Red;
}
}
}
y de esta manera alteramos las letras del detalle del gridview y si quiseramos cambiar el fondo solo lo cambiamos por BackColor
Nos vemos,
lunes, 16 de enero de 2012
WCF - El servidor no pudo procesar la solicitud debido a un error interno. Para obtener más información acerca del error, active IncludeExceptionDetailInFaults (desde ServiceBehaviorAttribute o desde el comportamiento de configuración de )
El servidor no pudo procesar la solicitud debido a un error interno. Para obtener más información acerca del error, active IncludeExceptionDetailInFaults (desde ServiceBehaviorAttribute o desde el comportamiento de configuración de <serviceDebug>) en el servidor para enviar la información de la excepción al cliente, o active el seguimiento según las instrucciones de la documentación de Microsoft .NET Framework 3.0 SDK y consulte los registros de seguimiento del servidor , este error nos sales cuando tratamos de consumir un Servicio Web desde el cliente sinhaber configurado nuestro web config solo nos bastara con cambiar en nuestro web config del servidor donde publicamos el servico web WCF
ubcamos <serviceDebug includeExceptionDetailInFaults="false" /> y lo unico que hacemos ambiamos la propiedad a true debe quedar asi <serviceDebug includeExceptionDetailInFaults="true" /> , luego compilamos y lo mas seguro es que no nos vuelva ha salir el error.
Saludos ,
ubcamos <serviceDebug includeExceptionDetailInFaults="false" /> y lo unico que hacemos ambiamos la propiedad a true debe quedar asi <serviceDebug includeExceptionDetailInFaults="true" /> , luego compilamos y lo mas seguro es que no nos vuelva ha salir el error.
Saludos ,
domingo, 15 de enero de 2012
Windows Comunnication Fundation WCF PARTE 1
Buenas en esta ocasion hablaremos sobre WCF (Windows Comunnication Fundation),es un modelo de programacion o un marco de trabajo para el desarrollo de aplicaciones con arquitectura Orientada a Servicios
(SOA),nos permite la comunicacion mediente mensajes asincronicos, los mensajes son entre servicios y clientes en diferentes mecanismos de transportes,ademas nos permite interoperar con aplicaciones desarrolladas con otras tecnologías (PHP,J2EE, ETC),ademas que en la actualidad es muy usado por muchas empresas ya que nos va ha permitir comunicarnos tambien con diferentes aplicaciones ya sea webs windows o mobile ya que la comunicacion seria por XML.
Principalmente WCF esta compuesta por Cliente y Servicio:
Cliente :
Una aplicación de cliente usa el cliente WCF para comunicarse con el servicio. Las aplicaciones de cliente suelen importar los metadatos de un servicio para generar el código de cliente WCF que se puede usar para invocar el servicio.
Servicio:
Son aplicaciones que esperan los mensajes de los clientes y responden a los mismos.
Los mensajes son enviados entre endpoints.
Un EndPoint es cada uno de los extremos que intervienen en una comunicacion. El EndPoint define tres elementos básicos de la comunicacion:
Saludos,
(SOA),nos permite la comunicacion mediente mensajes asincronicos, los mensajes son entre servicios y clientes en diferentes mecanismos de transportes,ademas nos permite interoperar con aplicaciones desarrolladas con otras tecnologías (PHP,J2EE, ETC),ademas que en la actualidad es muy usado por muchas empresas ya que nos va ha permitir comunicarnos tambien con diferentes aplicaciones ya sea webs windows o mobile ya que la comunicacion seria por XML.
Principalmente WCF esta compuesta por Cliente y Servicio:
Cliente :
Una aplicación de cliente usa el cliente WCF para comunicarse con el servicio. Las aplicaciones de cliente suelen importar los metadatos de un servicio para generar el código de cliente WCF que se puede usar para invocar el servicio.
Servicio:
Son aplicaciones que esperan los mensajes de los clientes y responden a los mismos.
Los mensajes son enviados entre endpoints.
Un EndPoint es cada uno de los extremos que intervienen en una comunicacion. El EndPoint define tres elementos básicos de la comunicacion:
- Adress - la direccion URI donde se expone el servicio.
- Binding - el enlace que vamos a utilizar. Este parametro define el canal de la comunicacion.
- Contract - la interface, es decir las operaciones que vamos a poder realizar.
Pasos para desarrollar un servicio.
- Definir el Contrato (ServiceContract): Service Contract describe las operaciones que provee un servicio. Convierte los métodos de la interfaz de un servicio en una descripción de plataforma independiente (WSDL), y define el patrón de mensajes utilizado en el servicio.Un Service Contract se puede definir de dos maneras:• Por medio de una interfaz con el atributo [ServiceContract]. Se identifican sus operaciones con el atributo [OperationContract].• Por medio de una clase en la cual, al declarar la clase, se deberá escribir el atributo [ServiceContract], y a cada uno de sus métodos, el atributo [OperationContract].
- Implementar el Contrato (ServiceContract): Se escribe una clase mediante la cual se implemente la interfaz. Es posible establecer comportamientos a la definición del servicio usando el atributo ServiceBehavior.
- Configurar el Servicio: Especificar los endpoints y metadata del servicio, estos son definidos en un archivo de configuración de .NET (Web.config o App.config).
- Diseñar una aplicación Hosting del servicio: Web Host dentro del IIS - Self-Host dentro de cualquier proceso .NET - Managed Windows Services - Windows Process Activation Service.
- Diseñar una aplicación cliente del servicio: Acá definiremos las aplicaciones clientes que consumirán el servicio.
Saludos,
jueves, 12 de enero de 2012
user lacks create session privilege logon denied - ORACLE
Este Tipo de error nos ocurre cuando hemos creado un usuario en ORACLE y queremos iniciar sesion en una base de datos, pero no le hemos especificado la sesión de creación de privilegios del sistema, solo bastara con escribir el siguiente script con un usuario administrador (System)
Donde mcox es mi usuario en el caso de ustedes especifiquen su usario;
Saludos ,
grant create session to mcox;
Donde mcox es mi usuario en el caso de ustedes especifiquen su usario;
Saludos ,
martes, 10 de enero de 2012
Saving changes is not permitted SQL 2008
Este error nos da cuando deseamos guardar los cambios generados en MS SQL SERVER 2008 ya sea por modificar un campo de una tabla o por algun motivo nos sale un mensaje de error :
"Saving changes is not permitted. The changes you have made require the following tables to be dropped and re-created"
Para solucionar este problema es facil nos vamos a Tools / Options
Nos vamos a designers y desmarcamos el CHECK Prevent saving changes that require table re-creation.
y solucionamos el problema .
Nos vemos
"Saving changes is not permitted. The changes you have made require the following tables to be dropped and re-created"
Para solucionar este problema es facil nos vamos a Tools / Options
Nos vamos a designers y desmarcamos el CHECK Prevent saving changes that require table re-creation.
y solucionamos el problema .
Nos vemos
Suscribirse a:
Entradas (Atom)