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

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


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

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

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"

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

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

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

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 ,


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




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,

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

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 , 

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.

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 ,

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

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,

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



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 ,

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 :

  1. Haz una copia de seguridad de Nuestra base de datos.
  2. Ponemos la BD modo SIMPLE -  DataBase/Propiedades/Opciones/Recovery Model /Simple
  3. 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.
  4. 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.
 

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;

  • 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!
SALUDOS ,

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,

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

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 ,

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.

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,

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 ,

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:
  • 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.

  1. 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].
  2.  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.
  3. 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).
  4. 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.
  5. Diseñar una aplicación cliente del servicio: Acá definiremos las aplicaciones clientes que consumirán el servicio. 
Espero les sirva esta pequeña introduccion ya pasare a publicar la segunda parte donde explicare un pequeño ejemplo

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)



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