Un ejemplo de sentencia sería:Tarde, como siempre, aqui teneis la quinta y no última entrega de este curso práctico de VB.
Primero.
Como ya os dije en la anterior entrega hoy os comentaré algo de SQL (Structured Query Languaje) o algo así. No lo mostraré todo, pero si lo suficiente para que podais hacer consultas bastante buenas.
Anterior: Y, como Pedro Duque ya ha bajado, no se que decir. Sólo espero que suba otra vez a por mi porque yo estoy todavía en las nubes.
Pues si, el SQL que tanto se oye hablar y tan poco se comenta detenidamente. Pues esto es sql, un lenguaje estructurado de consultas. Con este lenguaje podemos conseguir una consulta del tipo de 'todas las chicas de la base de datos que tengan los ojos verdes y el pelo negro y ordenadas por edad'. (lo que falta es la base de datos). :-)
SQL (Structured Query Languaje) En nuestro caso (dejando la base de datos anterior, aunque si alguien la tiene que la mande) podemos hacer una consulta de este tipo: 'Todos los cd-roms cuyo contenido sea aventuras y que su autor sea EA Sports' pero las posibilidades de consultas y accesos a la base de datos son inmensas.
Bueno, pasamos a cómo hacerlo, es que me he inspirado y no dejo de escribir. ¿Cómo lo hacemos en visual basic?. Pues, sencillamente, ponemos la sentencia SQL en la propiedad RecordSource del control Data. ¿Y cómo cojxxxx hago la sentencia SQL?, pues a eso vamos, no seamos tan impacientes.
Podemos decir que una sentencia SQL tiene tres partes:
- SELECT
- WHERE
- ORDER
SELECT * FROM multimedia WHERE autor='EA Sports' ORDER BY contenido
Esto nos SELECCIONA (select) TODOS los campos (*) DE LA tabla (from) multimedia DONDE (where) el autor sea igual a EA Sports y que se ORDENE (order) por (by) contenido.
En esa sentencia está lo más necesario para que podais hacer vuestra primera sentencia propia, bueno, no todo. Ahora os explicaré lo que no está escrito.
Primera Parte: SELECT
Pues esta la podeis dejar casi fija, cambiando la tabla claro. El objetivo de esta sentencia (que es obligatoria) es decirle que campos queremos en la consulta, le decimos que todos con el asterisco pero, si queremos podemos poner la lista de los campos que vamos a utilizar, por ejemplo: SELECT autor, titulo, tipo, contenido FROM multimedia
Como ya he dicho es OBLIGATORIA y siempre debe ponerse, si utilizamos SQL, si no lo hacemos basta con poner el nombre de la tabla, como ya hemos hecho en el módulo de mantenimiento.
Segunda Parte: WHERE
Esta clausula no es obligatoria, puedes ponerla o no, pero sólo tiene sentido omitirla si lo que hacemos es sólo ordenar la base de datos.
Considerando que autor='EA Sports' es la consulta, en la clausula where podemos poner tantas como queramos enlazadas con OR, AND, NOT, etc. Entonces podríamos poner: (select) WHERE autor='EA Sports' AND titulo='FIFA 98', nos daría como resultado todos los registros cuyo autor sea EA Sports y cuyo titulo sea FIFA 98, fácil no?.
Si, si, lo de las comillas, ¿por qué lo de las comillas? pues por el tipo de campo que es, es un campo de texto, pues comillas simples. En esta tabla os indico los distintos tipos y su forma de consulta en SQL.
TIPO | EJEMPLO con WHERE |
Texto | WHERE campo_texto = 'texto_busqueda' |
Número | WHERE campo_numero = numero |
Fecha | WHERE campo_fecha = fecha ----------> problema, la fecha en formato mes/dia/año |
El LIKE, es cómo PARECIDO A. Por ejemplo: SELECT * FROM multimedia WHERE autor like 'EA*' , esto haría lo siguiente, coge todos los campos de la tabla multimedia donde el campo autor tenga sus dos primeras letras como EA. Osea, tendriamos un registro cuyo autor fuese EA Sports, otro que fuese EA Games, otro EAT ALL, etc, todo los que empiezan por EA. Quizás el ejemplo más claro es el siguiente: Select * from clientes where apellidos like 'Rosas*', y saldrían todos mis familiares.
Pero ATENCIÓN, sólo con campos texto, no funciona con los demás.
Otro truco, para la fecha. En el caso de que queramos saber todos los registros cuya fecha está en un determinado mes (que se lo damos en una variable), esto ya es código operativo 100X100.
private sub Command1_click()
' el control Data se llama dbCon
mes=10
select="SELECT * FROM multimedia "
where=" WHERE MONTH(fecha)="&str$(mes) ' mes de octubre (puede salir el 1/10/1998 y el 1/10/1950)
'osea, todos cuyo mes sea octubre
' where=" WHERE fecha BETWEEN 2/1/1998 AND 12/31/1998" 'fecha entre el 1 de Febrero y el 31 de Diciembre
' where=" WHERE fecha > 1/17/1998" ' fecha mayor que el 17 de Enero de 1998
order=" ORDER BY autor"
dbCon.RecordSource=select & where & order
dbCom.Refresh
end sub
Os pongo estos ejemplos porque es muy importante lo de las fechas ya que yo estuve mucho tiempo liado con ellas y, casi siempre, se equivoca uno al ponerlas y hacer las consultas. Sobre todo si trabaja con el sistema de España que es dia/mes/año. Otra cosilla, poned siempre en las consultas el año completo (no seamos tan malos como para hacer un programa que no funcione con los cuatro dígitos, luego puede haber problemas).
Tercero: ORDER
Simplemente, por que campo o campos quieres que te ordene el resultado. Por ejemplo, ORDER BY autor, titulo. Ordenaría el resultado por autor y, dentro de cada autor, por título.
Creo que ya está. Podeis probar, en el formulario de Mantenimiento poneis un botón y en su evento CLICK pegais el código que he puesto aqui arriba. Añadeis varios registros a la base de datos y despues pulsais en el botón. Lo más fácil sería poner una de texto con LIKE que son las que antes se ve el resultado. De todas formas, lo debeis hacer en el formulario de mantenimiento porque se actualizaría la base de datos y el DBGrid con lo que veriamos los resultados al instante en pantalla. Bueno no se si ha quedado claro. La próxima mando un ejemplo que en esta ya no me llega.
Hasta pronto, aqui me quedo escuchando a Celine Dion y su Let's talk about love, es que soy un sentimental, no puedo remediarlo :-)