miércoles, 31 de mayo de 2017

Novedades Windows 10

Sabíamos muchas cosas sobre Windows 10, pero hoy es el día en el que Microsoft se juega el todo por el todo y anuncia las novedades más importantes de su nuevo sistema operativo. ¿Se ha sacado Microsoft la espina de Windows 8?

NOTAS ESPECIALES



Aplicaciones Universales

Windows 10 es la versión más ambiciosa del sistema operativo hasta la fecha. Para empezar aspira a la universalidad total entre dispositivos. Las aplicaciones serán comunes incluso hasta para la Xbox One. Para continuar, Microsoft ha asegurado que la actualización a Windows 10 será gratuita durante el primer año para todos los usuarios de Windows 7, Windows 8, y Windows Phone 8.1. No ha explicado, eso sí, qué pasará a partir de ese primer año.




Menú de inicio

Lamentablemente, no todo va a ser de color de rosa. Microsoft ha dado más detalles sobre el nuevo menú de inicio, y lo cierto es que no se trata de la revolución que los que deseaban una vuelta al menú de inicio de Windows 7 estaban esperando.




En realidad, el menú de inicio de Windows 10 mantiene todo más o menos igual que lo que se vio en las primeras betas de desarrollo. El área del menú es una versión miniaturizada de la interfaz a pantalla completa de Windows 8 y poco más. De hecho, al aumentarse se convierte en la pantalla principal de Windows 8 que ya conocemos. Una pequeña lista de aplicaciones y alguna función extra son las únicas concesiones al pasado del nuevo menú.

viernes, 21 de septiembre de 2012

UPDATE con INNER JOIN (SELECT)

Bueno antiguamente recurría, a usar un cursor para actualizar campos de una tabla, bueno por lógica 

Paso1: cargaba los datos de una tabla en un cursor
paso2: empezaba a recorrer el cursor
paso3: cada recorrido de un registro actualizaba datos de otra tabla, (obviamente en los datos que tenian en igualdad)

ERRRORRRR, indudablemente funciona, o si FUNCIONAAA, pero, viene el pero, sucede que si lo mando a realizar este proceso sobre una tabla de 20,000 demorar unos cuantos segundos, si lo mando a 500,000 ya se demora unos minutos y si sobre pasa de millon, imagínense que demora, por lo tanto los cursores no los vuelvo a tocar.

Solución no favorable (usando cursor)
DECLARE @XCODIGO CHAR(10), @XSERIE CHAR(4)
declare MIPAPELETA CURSOR FOR SELECT cCodigo,cserie FROM TU_PAPELETA
OPEN MIPAPELETA
FETCH NEXT FROM MIPAPELETA INTO @XCODIGO,@XSERIE
WHILE @@FETCH_STATUS=0
BEGIN
UPDATE TU_CTA_CORRIENTE SET ccodigo=@XCODIGO   WHERE SERIE=@XSERIE
FETCH NEXT FROM MIPAPELETA INTO @XCODIGO,@XSERIE
END
CLOSE MIPAPELETA
DEALLOCATE MIPAPELETA
GO



SQL SERVER 2008
Solución optima (sin cursor)

UPDATE TU_INSPECTORES 
SET TU_INSPECTORES.cCodigoPersona = TG_PERSONA.cCodigoPersona
FROM TU_INSPECTORES INNER JOIN TG_PERSONA 
ON TU_INSPECTORES.cdniinspector = TG_PERSONA.cNumeroTD
WHERE tg_persona.cCodigoTD='02'


Muy aparte que uff no ahorramos lineas de codigo.

UPDATE
    Table
SET
    Table.col1 = other_table.col1,
    Table.col2 = other_table.col2FROM
    Table
INNER JOIN
    other_tableON
    Table.id = other_table.id




Pueden observar en el siguiente link también su funcionalidad

Hasta la próxima, nos vemos

miércoles, 12 de septiembre de 2012

Insertando un Registro y Actualizando SI EXISTE EXISTS SQL SERVER

Bueno hoy algo sencillo pero que tambien podría ser útil para algún lector, como hacemos para verificar si el registro existe en la tabla, para actualizar o bien insertar como nuevo registro

Solución 1:
Si al hacer la consulta devuelve algún registro el EXIST devolvera TRUE

IF NOT EXISTS(SELECT ID FROM EMPLEADO WHERE ID = @ID)
   INSERT INTO EMPLEADO (Nombre,Apellido, ID) VALUES (@_nombre,@_apellido ,@ID)
ELSE   UPDATE EMPLEADO SET Nombre=@_nombre, Apellido=@_apellido WHERE ID = @ID

Nota: Talvez en procedimiento esta solución, es la mas común, pero esta haciendo un select, por lo tnato acarrea recursos o un par de milisegundos.

Solución 2:
Ahora utilizaremos una función del sistema para poder realizar lo mismo. @@ROWCOUNT

UPDATE TABLA SET Campo1 = @Valor WHERE ID = @ID
IF @@ROWCOUNT = 0
   INSERT INTO TABLA (Campo1,ID) VALUES (@Valor,@ID)

Nota: Por defecto, mandamos la linea de actualización de registro, y con nuestra función verificamos si alguna fila o registro a sido afectado, caso que no haya afectado, insertamos el nuevo registro.

Aca un ejemplo usando @@ROWCOUNT y raiserror


UPDATE TOP(1) TU_CTA_CORRIENTE SET cIdAnt=cId, cId='D', dtfechaanulacion=GETDATE(), cUsuarioSis=@_usuario, cEquipoSis=@_equipo, cIPSis=@_ip, cMacNICSis=@_mac
WHERE ccodigoautogeneradopapeleta=@_papeleta
IF @@ROWCOUNT=0
    begin
      raiserror('No se ha actualizado ningun registro',16,1)
      return
    end


Otras soluciones podemos utilizar un BEGIN TRY , BEGIN CATCH, para la solucion 2 y tendriams otra lógica.

Hasta la próxima ...

viernes, 31 de agosto de 2012

USANDO CASE - WHEN EN CLAUSULA WHERE


Esto no se si alguien lo hizo antes, pero recientemente se me dio la necesidad de hacer un procedimiento almacenado en SQL Server con la opción de poder seleccionar los datos de uno o todos los clientes en una misma consulta. Encontré una forma fácil de realizarlo. Espero les sirva. 

Ejemplo: Tenemos una tabla de datos de clientes, y necesitamos desplegar la información de uno o todos los clientes. Este es el código de ejemplo:

Declare @id_cliente char(13) -- Declaracion de la variable que nos servira de parametro

Set @id_cliente='Todos' -- Establecer el Valor

Select a.id_cliente,a.nombre
  From tbl_clientes a
  where a.id_cliente= case when @id_cliente='Todos' then
  a.id_cliente else @id_cliente end
  -- En esta parte es donde usamos el case dentro 
  del where para hacer la comparacion de datos,
  si deseamos todos los clientes, unicamente
  debemos compararlo con el codigo dentro de la
  misma tabla, de lo contrario lo comparamos con
  el valor de la variable o parametro que utilizemos.



DECLARE @VAR1 nvarchar(50)
DECLARE @VAR2 nvarchar(50)
SELECT * FROM ORDERS
WHERE @VAR2 = ( CASE @VAR1
                WHEN 'Customers' THEN CustomerID 
                WHEN 'Employee'  THEN EmployeeID 
                ELSE -1
                END )




Data Modeling Introduction

Pueden revisar otros ejemplos en esta pagina.
http://www.craigsmullins.com/ssu_0899.htm


Hasta la próxima amigos

miércoles, 29 de agosto de 2012

CODIGOS ASCII Standar

ASCII (acrónimo inglés de American Standard Code for Information Interchange — Código Estándar Estadounidense para el Intercambio de Información), pronunciado generalmente [áski] o [ásci] , es un código de caracteres basado en el alfabeto latino, tal como se usa en inglés moderno y en otras lenguas occidentales. Fue creado en 1963 por el Comité Estadounidense de Estándares (ASA, conocido desde 1969 como el Instituto Estadounidense de Estándares Nacionales, o ANSI) como una refundición



martes, 28 de agosto de 2012

FoxRibbon para Visual Foxpro

Bueno aquí de nuevo, estaba buscando por Internet una manera de como mejorar los menús en un par de sistemas que tenia, para sorpresa mía, encontré el ribbon de Office para fox lo había visto par Visual NET, y bueno acá les dejo el material y la pagina de donde pueden ver la documentación y descargar el archivo

FoxRibbon es una biblioteca de clases VCX 100% Visual FoxPro que ofrece una serie de herramientas para mejorar el aspecto visual de nuestras aplicaciones. Su uso y distribución es libre para toda la Comunidad de Visual FoxPro.

https://sites.google.com/site/foxribbonclass/


Fox Ribbon

Bueno, hasta la próxima.