miércoles, 2 de marzo de 2011

Primeros pasos con OpenGL

Usando mi Macbook Blanco Intel dual core 1.83Ghz, Ubuntu 10.10, Eclipse 3.5.2 y openGL (lenguaje C++):

- Instalar el plugin para eclipse de C/C++
- Instalar los paquetes freeglut3 y freeglut3-dev desde el repositorio
- Crear un proyecto nuevo
- En propiedades del proyecto -> C/C++ Build -> Settings -> GCC C++ Linker -> Libraries hay que añadir GLU y glut.

miércoles, 19 de enero de 2011

VISUAL BASIC 6: Trabajar con Strings

Function Len (s as string) as integer

----> Devuelve la longitud del string

Function Mid (s as string, posicionInicio as integer [, longitud as integer]) as string

----> Devuelve una subcadena

Function Left (s as string, longitud as integer) as string

----> Devuelve la subcadena empezando por la izquierda de longitud especificada

Function Right (s as string, longitud as integer) as string

----> Devuelve la subcadena empezando por la derecha de longitud especificada

Function Ucase (s as string) as string

----> Devuelve una cadena en mayúsculas

Function Lcase (s as string) as string

----> Devuelve una cadena en minúsculas

Function Instr ([inicio as integer,] s1 as string, s2 as string)

----> Devuelve la posición de s2 en s1, 0 si no existe.

Function InstrRev (s1 as string, s2 as string [,inicio as integer] )

----> Devuelve la posición de s2 en s1, 0 si no existe, empezando por el final.

Sub Replace (s1 as string, s2 as string, s3 as string)

----> Reemplaza en s1 todas las ocurrencias de s2 por s3.

Function StrReverse (s as string) as string

----> Devuelve s al revés.

Function LTrim(s as string) as string

----> Devuelve s sin los espacios del principio.

Function RTrim(s as string) as string

----> Devuelve s sin los espacios del final.

Function Trim(s as string) as string

----> Devuelve s sin los espacios del final y del principio.

Function asc(s as string) as integer

----> Devuelve el valor ascii del primer carácter de s.

Function Chr (i as integer) as char

----> Devuelve el carácter que corresponde a un valor ascii.

jueves, 28 de octubre de 2010

MYSQL: Modificar el tipo de datos de un campo

ALTER TABLE tabla
CHANGE COLUMN nombre_columna nombre_nuevo_columna tipo_datos atributos;

jueves, 14 de octubre de 2010

VISUAL BASIC 6: Leer de un archivo Excel 2003

Primero añadimos la referencia al Microsoft Excel 11.0 Object Library en Proyecto -> Referencias.

A continuación con el siguiente código abrimos la ruta a un fichero excel y leemos o escribimos en él con:

'Variable de tipo Aplicación de Excel
Dim objExcel As Excel.Application

'Una variable de tipo Libro de Excel
Dim xLibro As Excel.Workbook
Dim Col As Integer, Fila As Integer

'creamos un nuevo objeto excel
Set objExcel = New Excel.Application

'Usamos el método open para abrir el archivo que está en el directorio del programa llamado archivo.xls
Set xLibro = objExcel.Workbooks.Open(Path)

'Hacemos referencia a la Hoja

Dim i As Integer

Fila = 5
Col = 3
MsgBox xLibro.Sheets("Hoja1").Cells(Fila, Col)


xLibro.Close (True)

VISUAL BASIC 6: interfaz para elegir un archivo.

En nuestro proyecto Visual Basic 6 debemos añadir en Project -> Components el Microsoft Common Dialog Control 6.0 que nos permitirá abrir diálogos para elegir archivos. Veremos que aparece un botón nuevo en nuestra barra de componentes y arrastramos uno hasta nuestro form. El nombre por defecto es CommonDialog1.

Una vez añadido, el siguiente código nos abre una ventana para seleccionar un archivo con un filtro determinado:

'Añadir un filtro al dialog de elegir archivo
Private Sub AddFilter(ByVal dlg As CommonDialog, ByVal _
filter_title As String, ByVal filter_value As String)

Dim txt As String

txt = dlg.Filter
If Len(txt) > 0 Then txt = txt & "|"
txt = txt & filter_title & " (" & filter_value & ")|" & _
filter_value
dlg.Filter = txt

End Sub

Después, asociamos a un evento el siguiente código:

AddFilter CommonDialog1, "Excel files", "*.xls"
CommonDialog1.ShowOpen
Path = CommonDialog1.FileName

En la variable path tendremos la ruta al archivo.

lunes, 27 de septiembre de 2010

MS SQL 2005: Crear un disparador (TRIGGER) sobre una vista (VIEW) que mande un e-mail al DBA

Supongamos que queremos que nuestro gestor de bases de datos nos avise cuando se modifiquen ciertos datos. En este caso concreto, quiero recibir un email a mi cuenta cuando los datos de una tabla no concuerden con los datos de otra (es decir, que la cantidad de un artículo que hay en una tabla sea diferente a la cantidad de ese mismo artículo en otra tabla). Parece lioso, pero se ve rápido con un ejemplo:

TABLA datos_almacen

Codigo_articulo varchar(16)
Cantidad decimal(12,3)

TABLA datos_almacen_2

Codigo_articulo varchar(16)
Cantidad decimal(12,3)

Entonces, si la cantidad del mismo artículo es diferente para las dos tablas, quiero que me avise. Supongamos que tengo la siguiente vista que muestra todos los artículos con diferencias:

CREATE VIEW mi_vista AS
SELECT *
FROM datos_almacen a inner join datos_almacen_2 b
on a.codigo_articulo = b.codigo_articulo
and a.cantidad <> b.cantidad

Correcto, esta vista muestra las diferencias (recuerda que estamos suponiendo que ambas tablas tienen los mismos códigos de artículo, si en uno hubiese más que en otro habría que hacer un JOIN lateral). Ahora el trigger para que salte cuando aparezca alguna diferencia:

MS SQL 2005: Crear una vista

Lo que hace una vista es devolver el resultado de una consulta de selección como si se tratase de un select, pero de forma que podemos impedir al usuario el acceso a las tablas sobre las que se ejecuta la consulta.

Un ejemplo:

CREATE VIEW mi_vista AS
select *
from mi_tabla

Ahora podemos quitarle permisos a un usuario sobre la tabla 'mi_tabla' pero darle permisos sobre la vista 'mi_vista' y el usuario podría consultar los datos de la tabla (los que nosotros, DBAs, queramos, jeje) sin tener acceso directo a la misma.