Академический Документы
Профессиональный Документы
Культура Документы
CAPTULO 41
ndice de contenido
LAS CONSULTAS DE ACCIN........................................................................................................2
TRES Y... ACCIN!......................................................................................................................2
CONSULTA DE DATOS ANEXADOS..........................................................................................3
ANEXAR EN UNA TABLA EXISTENTE (un nico registro).................................................3
ANEXAR EN UNA TABLA EXISTENTE (todos los registros / conjunto de registros)...........4
ANEXAR HACIA UNA BD EXTERNA...................................................................................5
ANEXAR DESDE UNA BD EXTERNA..................................................................................6
CONSULTA DE ACTUALIZACIN.............................................................................................6
CONSULTA DE ELIMINACIN...................................................................................................7
CONSULTA PARA BSQUEDA DE REGISTROS DUPLICADOS............................................8
CONSULTAS PARAMETRIZADAS..................................................................................................9
PROCEDURES..................................................................................................................................10
PARA FINALIZAR ESTE CAPTULO.............................................................................................10
Vistame en http://siliconproject.com.ar/neckkito/
Estas advertencias estn muy bien cuando no sabemos bien lo que hacemos, pero, y cundo
lo tenemos ms que claro? Pues dichos warnings se convierten en algo de lo ms incmodo
(pueden llegar a salirnos tres warnings seguidos, a veces). Click, y click, y click para conseguir
ejecutar la consulta...
Lo anterior podemos evitarlo en nuestro cdigo VB para Access aadiendo dos lneas de
cdigo: una antes de la ejecucin de la consulta y otra a continuacin de la ejecucin de la
consulta. Lo escribiramos de la siguiente manera:
DoCmd.SetWarnings False
'Ejecucin de la consulta
DoCmd.SetWarnings True
Con estas dos lneas se acabaron los avisos de Access... aunque si nos hemos equivocado...
Houston, tenemos un problema.
Importante: es vital que volvamos a activar la aparicin de warnings a travs del
<DoCmd.SetWarnings True>. Ello es as porque la inhabilitacin de los avisos (a travs del
2
Vistame en http://siliconproject.com.ar/neckkito/
Vistame en http://siliconproject.com.ar/neckkito/
Private Sub cmdDatosAnexados1_Click()
Dim miSql As String
miSql = "INSERT INTO TClientes2(NomCli,NIFCli,PoblCli)" _
& " VALUES ('Sopas La Morsa','B25123456','Almera')"
DoCmd.SetWarnings False
DoCmd.RunSQL miSql
DoCmd.SetWarnings True
MsgBox "Anexin
vbInformation, "OK"
End Sub
realizada
correctamente",
Incluyo el MsgBox al final porque si no es frustrante no saber si las cosas han ido bien o no, o
dudar de si se ha realizado el proceso o no.
Fcil, verdad?
Si lo que queremos no son todos los registros sino un conjunto de registros simplemente
deberamos aadir un WHERE a nuestra SQL.
Para que quede ms claro, por si acaso, por ejemplo anexaremos a esta tabla los registros de
los clientes cuyo CIF empiece por A.
El cdigo sera:
4
Vistame en http://siliconproject.com.ar/neckkito/
Private Sub cmdDatosAnexadosAlgunos_Click()
Dim miSql As String
miSql = "INSERT INTO TClientes2 SELECT * FROM TClientes" _
& " WHERE TClientes.NIFCli LIKE 'A*'"
DoCmd.SetWarnings False
DoCmd.RunSQL miSql
DoCmd.SetWarnings True
MsgBox "Anexin realizada correctamente", vbInformation,
"OK"
End Sub
Como podemos intuir, vamos a anexar en esta tabla los datos de nuestra tabla TClientes (slo
los campos con el nombre y el NIF).
La estructura de este tipo de exportacin sera la siguiente:
INSERT INTO <tablaDestino> IN '<rutaBDExterna>'
SELECT nomTabla.nomCampo1,...,nomTabla.nomCampoN FROM nomTabla
Es decir, que nuestro cdigo en la BD de ejemplo debera ser el siguiente:
Vistame en http://siliconproject.com.ar/neckkito/
Tened en cuenta que los nombres de campos deben ser idnticos. Si no lo fueran el cdigo
nos dira que no se
que se explica a
CONSULTA DE ACTUALIZACIN
Para realizar las consultas de actualizacin utilizaremos la instruccin UPDATE. La estructura de
una consulta de actualizacin es:
UPDATE nomTabla
SET nomCampo1 = <nuevoValor>,..., nomCampoN = <nuevoValor>
Es muy usual utilizar WHERE con este tipo de consultas para indicar qu registros son los que
deben ser utilizados. La clusula WHERE se sita al final. Es decir:
UPDATE nomTabla
SET nomCampo1 = <nuevoValor>,..., nomCampoN = <nuevoValor>
WHERE <condicin>
los
registros,
la
accin
NO
se
podr
deshacer.
Vistame en http://siliconproject.com.ar/neckkito/
Recordamos
nuestros
DoCmd.SetWarnings False
DoCmd.RunSQL miSql
DoCmd.SetWarnings True
MsgBox "Actualizacin realizada correctamente", vbInformation, "OK"
End Sub
Recordad que tambin podemos realizar clculos para actualizar datos. Por ejemplo, el da que
metimos los datos en nuestra BD no estbamos muy inspirados y al dar de alta las ventas no
nos dimos cuenta que las metamos impuestos incluidos. Lgicamente haba que almacenar
los datos con impuestos excluidos.
Si, por ejemplo, habamos aplicado una tasa del 18%, nuestra consulta de actualizacin
debera ser:
Efectivamente, en este caso necesitaba que se actualizaran todos los registros, por lo que he
omitido el uso de WHERE
CONSULTA DE ELIMINACIN
Las instruccin que nos define una consulta de eliminacin es DELETE.
El uso de DELETE, personalmente, me recuerda a la figura de asesino a sueldo: realiza el
trabajo de limpieza de una manera rpida, eficaz y sin dejar huellas
Su estructura es:
DELETE FROM nomTabla
7
Vistame en http://siliconproject.com.ar/neckkito/
Y, si queremos ser un poco selectivos (es decir, no realizar una matanza masiva), utilizamos
WHERE
DELETE FROM nomTabla WHERE <condicin>
Al igual que lo que comentbamos en las consultas de
actualizacin, una vez ejecutada la instruccin DELETE no
hay vuelta atrs, as que debemos proceder con mucho
cuidado.
En nuestra BD de ejemplo debemos tener por ah una tabla llamada TClientes2. Vamos a
eliminar todos los clientes que tengan, en su nombre, alguna relacin con la carne.
Nuestra SQL sera la siguiente:
Vistame en http://siliconproject.com.ar/neckkito/
Call eliminaConsulta(nomQuery)
miSql
&"
&"
&"
CONSULTAS PARAMETRIZADAS
Podemos construir consultas en las cuales se solicite informacin al usuario para, a
continuacin, mostrar los datos deseados. Esta solicitud de informacin se realiza a travs de
lo que denominamos parmetros.
Y para ello utilizamos la declaracin PARAMETERS, que tiene la siguiente estructura:
PARAMETERS nomParametro1 <tipoDato>, , nomParametroN <tipoDato>;
<ESTRUCTURA DE LA CONSULTA QUE QUERAMOS EJECUTAR>
Supongamos que queremos saber las ventas que se han producido en nuestra empresa, pero a
veces necesitamos los datos con anterioridad a una fecha y dependiendo de un determinado
volumen de ventas.
Nuestros parmetros, en este caso, seran la fecha y el importe. Ms all la consulta sera una
simple consulta de seleccin.
Ergo nuestro cdigo podra ser el siguiente:
Vistame en http://siliconproject.com.ar/neckkito/
Fijaos que separamos los parmetros de la consulta utilizando punto y coma (;). Ojo: no hay
que olvidarse de ese punto y coma porque si no obtendremos error en los parmetros de la
SQL.
PROCEDURES
La clusula PROCEDURE, segn Access, <<define un
nombre y parmetros opcionales para una consulta>>.
Como siempre, la ayuda de Access a veces se pasa con la
explicacin . A eso debemos aadir que esta clusula ha
quedado obsoleta, debindose utilizar (siempre segn
Access) la instruccin PROCEDURE.
No la voy a explicar porque, sinceramente, no tengo mucha idea de cmo hacerlo. En primer
lugar porque no la he utilizado nunca; en segundo lugar porque soy incapaz de encontrar un
ejemplo prctico para aplicar a nuestra BD de ejemplo, dado que al combinarla con VB esta
instruccin pierde un poco el sentido (siempre desde mi punto de vista).
Si adems os digo que en todos los manuales o tutoriales de SQL que he visto, al hablar de
PROCEDURE, se dice que no es comn, es muy poco comn, es muy poco utilizada, y
comentarios similares... pues creo que tampoco nos perdemos gran cosa.
En la ayuda de Access hay un ejemplo de cmo programar una SQL utilizando la
clusula/instruccin PROCEDURE. Si alguien quiere echarle un vistazo invitado est a ello.
En definitiva, que as sabris que existe esto que llaman PROCEDURE, y por eso lo dejo,
como mnimo, apuntado.
10
Vistame en http://siliconproject.com.ar/neckkito/