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, 23 de abril de 2012
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.
Suscribirse a:
Entradas (Atom)