Descargue la versión de lanzamiento de la documentación y los tutoriales de Microsoft SQL Server 2008 R2.
Al instalar los Libros en pantalla de SQL Server 2008 R2, se actualiza la versión existente de los Libros en pantalla de SQL Server 2008. Si efectúa la actualización, tenga en cuenta que el contenido y los temas de Ayuda describirán ahora las herramientas y características de SQL Server 2008 R2. Para volver a instalar los Libros en pantalla de SQL Server 2008 debe primero desinstalar los Libros en pantalla de SQL Server 2008 R2. Dado que SQL Server 2008 y SQL Server 2008 R2 comparten componentes, no puede tener instalaciones en paralelo de los Libros en pantalla en el mismo equipo.
Acceso conexiones remotas usuario root en mysql (para usar algun gui externo)
Acceso conexiones remotas usuario root en mysql (para usar algun gui externo)
> GRANT ALL ON *.* TO root@’%’ IDENTIFIED BY ‘password_root’;
> FLUSH PRIVILEGES;
Libros Gratuitos: SQL Server 2008 R2 & Virtualization
SQL Server 2008 R2 está disponible, los que tienen la suscripción TechNet+ o MSDN pueden bajarlo y nosotros podemos bajar el software de evaluación desde el sitio de Microsoft de SQL Server 2008.
En todo caso también podemos obtener gratis un e-book de SQL Server puedes bajarlos de los siguientes links.
Incremento automático de MySQL (SET IDENTITY_INSERT de SQL)
Estuve buscando algo que sea parecido al SET IDENTITY_INSERT ON/OFF del SqlServer pero no pude encontrar nada parecido así que haciendo pruebas vi que no era necesaria esta función en MySql.
Veamos , Primero creemos una tabla de prueba con un campo Auto_Increment
Delimiter $$
CREATE TABLE `pruebas` (
`id_prueba` int(10) unsigned NOT NULL auto_increment,
`descripcion` varchar(100) NOT NULL default ‘ ‘,
PRIMARY KEY (`id_prueba`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1$$
Insertamos 2 registros y mostramos la tabla
INSERT INTO `pruebas` (`descripcion`) VALUES (‘PRUEBAS1’);
INSERT INTO `pruebas` (`descripcion`) VALUES (‘PRUEBAS2’);
SELECT * FROM `pruebas`;
Luego insertamos 2 registros , pero con id_prueba
INSERT INTO `pruebas` (`id_prueba`,`descripcion`) VALUES (20,‘PRUEBAS20’);
INSERT INTO `pruebas` (`id_prueba`,`descripcion`) VALUES (21,‘PRUEBAS21’);
Como se muestra nos permite insertar los registros sin dar ningún error.
Ahora insertamos un nuevo registro.
Y vemos que se modifico el auto incremento de la tabla.
Información de las tablas en MySql (INFORMATION_SCHEMA)
En las siguientes secciones, tomamos tablas y columnas del INFORMATION_SCHEMA. Para cada columna, hay tres informaciones
— Listado de las DB que existen en tu servidor mysql
SELECT SCHEMA_NAME AS ‘Database’ FROM INFORMATION_SCHEMA.SCHEMATA ;
— Listado de Tablas de una determinada DB
SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = ‘TuDB’ ;
— Listado de Tablas de todas las DB que contengan el caracter A
SELECT table_schema, table_name FROM INFORMATION_SCHEMA.TABLES WHERE Table_name LIKE ‘%A%’;
— Listado de informacion de una tabla
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = ‘PERFILES’;
— Verificar si existe un campo en una tabla
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = ‘TuTabla’ AND column_name = ‘TuCampo’;
SELECT Count(column_name) AS ExisteComuna FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = ‘TuTabla’ AND column_name = ‘TuCampo’;
— Información estadistica de una tabla
SELECT * FROM INFORMATION_SCHEMA.STATISTICS WHERE table_name = ‘TuTabla’;
— Proporciona información acerca de permisos globales. Esta información viene de la tabla de permisos
SELECT * FROM INFORMATION_SCHEMA.USER_PRIVILEGES ;
Desencadenadores en MySQL (Triggers)
Para crear descencadenador4s es necesario seguir la siguiente sintaxis :
CREATE TRIGGER nombre momento evento
ON tabla FOR EACH ROW instrucciones;
Donde :
nombre–> Nombre que recibe el desencadenador, aquel por el que nos referimos a él cuando lo utilizamos
momento –> Puede tomar 2 valores BEFORE (antes) , AFTER (después), se utiliza para determinar si las instrucciones asociadas al desencadenador se ejecutaran antes o después de la operación que la activo.
evento –> Indica el tipo de instrucción que activara el desencadenante. Se puede tratar de INSERT, UPDATE, DELETE.
tabla –> Nombre de la tabla con la cual está asociada el desencadenador.
instrucciones –> Utilice BEGIN Y END, como en los procedimientos almacenados, si desea que el desencadenador tenga asociado más de una orden.
EJEMPLO INSERCION:
DELIMITER //
CREATE TRIGGER dc_Clientes_Insertar
AFTER INSERT ON Clientes
FOR EACH ROW
BEGIN
DECLARE NUEVO_CLIENTE VARCHAR(255);
SET NUEVO_CLIENTE = CONCAT(LOWER(NEW.nombres) + ‘-‘ + LOWER(NEW.apellidos));
INSERT INTO ClienteExt (id,nombre) VALUES (NEW.id,NUEVO_CLIENTE);
END
//
DELIMITER ;
EJEMPLO DE ACTUALIZACION :
DELIMITER //
CREATE TRIGGER dc_Clientes_Actualizar
AFTER UPDATE ON Clientes
FOR EACH ROW
BEGIN
DECLARE NUEVO_CLIENTE VARCHAR(255);
SET NUEVO_CLIENTE = CONCAT(LOWER(NEW.nombres) + ‘-‘ + LOWER(NEW.apellidos));
UPDATE ClienteExt SET nombre= NUEVO_CLIENTE WHERE id = NEW.id;
END
//
DELIMITER ;
EJEMPLO DE BORRADO:
DELIMITER //
CREATE TRIGGER dc_Clientes_Eliminar
AFTER DELETE ON Clientes
FOR EACH ROW
BEGIN
DELETE FROM ClienteExt WHERE id = OLD.id;
END
//
DELIMITER ;
Usando AUTO_INCREMENT en MySql
El atributo AUTO_INCREMENT puede utilizarse para generar un identificador único para cada nueva fila :
CREATE TABLE Clientes (
id MEDIUMINT NOT NULL AUTO_INCREMENT,
nombre CHAR(50) NOT NULL,
PRIMARY KEY (id)
);
INSERT INTO Clientes (nombre) VALUES
(‘Juan’),(‘Alberto’),(‘Luis’),
(‘Anotnio’),(‘Ricardo’),(‘Alfredo’);
SELECT * FROM Clientes;
Para empezar o modificar el valor AUTO_INCREMENT distinto de 1, se puede establecer que el valor con CREATE TABLE o ALTER TABLE, así:
ALTER TABLE Clientes AUTO_INCREMENT = 0;
Guardar imágenes en diferentes formatos con GdiPlus-X
A continuación se muestra la biblioteca GDIPlus-X, ya está estable y fiable para hacer la mayoría de las tareas de GDI +. Descargue la última versión estable de Codeplex:
http://www.codeplex.com/Wiki/View.aspx?ProjectName=VFPX&title=GDIPlusX
DO LOCFILE(«System.App»)
WITH _SCREEN.System.Drawing
LOCAL myBitmap AS xfcBitmap
*** Crear un objeto Bitmap
myBitmap = .Bitmap.New(GETPICT())
*** Grabar el bitmap en diferentes formatos
myBitmap.Save(«c:\MyPNG.png», .Imaging.ImageFormat.Png)
myBitmap.Save(«c:\MyBMP.bmp», .Imaging.ImageFormat.Bmp)
myBitmap.Save(«c:\MyTIFF.tif», .Imaging.ImageFormat.Tiff)
myBitmap.Save(«c:\MyJPEG.jpg», .Imaging.ImageFormat.Jpeg)
myBitmap.Save(«c:\MyGIF.gif», .Imaging.ImageFormat.Gif)
ENDWITH
GETPICT () con imágenes en miniatura – FoxPro
En los foros la gente que pregunta sobre la posibilidad de abrir el GETPICT () y que muestre en miniaturas las imagenes en lugar de nombres de archivo de imagen.
oShell = CREATEOBJECT(«Wscript.Shell»)
oShell.SendKeys(«{TAB}{TAB}{TAB}{TAB}{TAB}{DOWN}{DOWN}{DOWN}{DOWN}{ENTER}»)
GETPICT()
Extracción de fotogramas de archivos TIFF, GDI+
En este código de abajo, se guarda los marcos de un TIFF en archivos de imagen por separado:
*** Ubicar la calse system
DO LOCFILE(«System,prg»)
WITH _SCREEN.System.Drawing
*** Leer archivo TIFF con GDI+
LOCAL loMultif AS xfcBitmap
loMultif = .Bitmap.New(GETPICT(«TIF»))
LOCAL lnFrames, n, lcFrameFileName
lnFrames = loMultif.GetFrameCount()
IF lnFrames > 1
FOR n = 0 TO lnFrames – 1
loMultif.SelectActiveFrame(.Imaging.FrameDimension.Page, n)
lcFrameFileName = «c:\Frame» + TRANSFORM(n + 1) + «.Tif»
loMultif.Save(lcFrameFileName, .Imaging.ImageFormat.Bmp)
ENDFOR
ELSE
MESSAGEBOX(«El archivo seleccionado no es Multiframe TIFF»)
ENDIF
ENDWITH