Sei sulla pagina 1di 32

Sistemas de Información /Guía de Prácticas en Visual Basic 6.

0 2007A/ Ismael Véliz Vilca -57-

PRACTICA 6 SELECCIÓN DE DATOS CON SQL1

SELECCIÓN DE DATOS MEDIANTE SQL

SQL.- Lenguaje de Consulta estructurada (SQL.- por sus siglas en inglés ). SQL es un
poderoso lenguaje para manejo de bases de datos que puede utilizar en sus
aplicaciones. las instrucciones SQL se encuentran organizadas en dos grandes
categorías : Instrucciones para manipulación de datos (DML), se utilizan para
seleccionar , clasificar , contar y calcular la información almacenada en las tablas
Instrucciones para la Definición de datos (DDL) . Le permiten definir tablas, índices
y relaciones en la base de datos

Que es el SQL

Se desarrolló en la década de los años 70 en IBM para permitir a los usuarios el uso
de instrucciones estandarizadas en diversas bases de datos. La intención fue crear un
lenguaje que no estuviera basada en ningún otro lenguaje de programación, pero que
pudiera ser utilizado de manera indistinta en cualesquiera de ellos para actualizar y
consultar la información de las bases de datos.
Muchas instrucciones SQL devuelven conjuntos de registros a los que se les conoce
como vistas. A pesar de todo SQL no es un lenguaje particularmente amigable punto
que se acentúan si no se tiene conocimientos del idioma inglés.
El SQL ANSI estándar comparada con el SQL del Jet

La sintaxis de SQL se determina por un comité que forma parte del Instituto Nacional
Americano de Estándares (ANSI) – El estándar SQL mas utilizado es el denominado
SQL-89 y también se usa el SQL reformado SQL-92

Cada Conjunto de normas del SQL tiene tres niveles de conformidad. Un producto de
bases de datos deberá cumplir con el nivel 1 para poderse considerar como
compatible con SQL. El motor Jet cumple con la norma ANSI SQL -89 Nivel 1.

Fundamentos de SQL

El comando SELECT
Este comando le permite obtener registro de 1 o más tablas. Como resultado de su
ejecución, obtendrá una serie de registros que se conocen como vistas. Esta vista es
un subconjunto de los datos que sirven como origen de la consulta.

En las vistas que solo se pueden desplegar se usará recorsets de tipo snapshot

Un comando SELECT consta de dos secciones


Una lista de columnas (los campos por seleccionar)
Una lista de tablas de dónde obtener tales columnas

PRÁCTICA DE LABORATORIO.6.1-
Elabore un nuevo Proyecto llamado Sistema SQL
El primer formulario grabe con el nombre del FrmSQL
Diseñe el formulario de la como se muestra en la figura 5

1
Smith Curtis,Amundsen M.. Aprendiendo programación de base datos con Visual Basic 6.0 . Pearson mexico 1999
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -58-

Figura 5. Formulario de demostración de instrucciones SQL


Inserte tres controles y cambia las siguientes propiedades
Control Propiedad Valor
Data1 Nombre DatOrigen
DataBaseName F:\CD2006\SI2006A\GUIA DE PRACTICAS 2006
Mayo\PRACTICAS2006\BASE DE
DATOS\Productos1.mdb
Recorsource Productos1
Data1 Nombre DatSQL
DataBaseName F:\CD2006\SI2006A\GUIA DE PRACTICAS 2006
Mayo\PRACTICAS2006\BASE DE
DATOS\Productos1.mdb
Text1 Nombre TxtSQL
Multline Trae
ScrollBars 3. Both
DbGrid1 DataSource DatOrigen
Dbgrid2 DataSource DatSQl

Nota Importante: cambie la propiedad AllowAddNew, AllowArrows,


AllowDelete,AllowUpdate del control DBGrid1 para poder agregar, eliminar y modificar
registros de la base de datos Original

El código del formulario es el siguiente

Option Explicit
Dim cadenaSQL As String
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -59-

Private Sub CmdGenerarSQL_Click()


On Error GoTo Mensaje:
cadenaSQL = TxtSQL.Text
DatSQL.RecordSource = cadenaSQL
DatSQL.Refresh
Exit Sub
Mensaje:
MsgBox Err.Description, vbCritical, "ERROR"
End Sub

Private Sub TxtSQL_KeyPress(KeyAscii As Integer)


If KeyAscii = 13 Then
On Error GoTo Mensaje:
cadenaSQL = TxtSQL.Text
DatSQL.RecordSource = cadenaSQL
DatSQL.Refresh
Exit Sub
Mensaje:
MsgBox Err.Description, vbCritical, "ERROR"
End If
End Sub

El mismo problema puede resolver mediante el administrador Visual de datos Usando


la Ventana SQL
SELECT CodProducto, NombreProducto FROM PRODUCTOS WHERE
UnidadesALmacen > 10

EJERCICIOS.- ESCRIBIR INSTRUCCIONES SQL PARA


Copiar las instrucciones a su aplicación y pruebe

1. Listar el campo Nro de la tabla Productos


SELECT Productos.Nro From Productos
La tabla productos después de select es opcional por que por defecto es la tabla
productos

2. Lista los campos CodProducto, NombreProducto y PrecioUnitario de la tabla


productos

SELECT CodProducto, NombreProducto, PrecioUnitario From Productos


Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -60-

Nota :Es recomendable que no se escriba con espacios en blanco el nombre de los
campos , si hubiera blanco se debe poner entre corchetes

SELECT CodProducto, [Nombre Producto], [Precio Unitario] From Productos

3. Listar los campos CodProducto, NombreProducto y PrecioUnitario de la tabla


PRODUCTOS pero en el orden NombreProducto, PrecioUniitario y CodProducto
SELECT NombreProducto,PrecioUnitario,CodProducto FROM Productos

Nota.- el orden en el que indique los nombres de los campos en una Instrucción
SELECT será el mismo en el que aparezca en la vista

Es de destacar en que se combinado la capacidad de cambiar el orden de aparición


de los campos, con la de cambiar el orden en que aparecen los registros. Esto es
parte de la magia de SQL.

4. Listar todos los campos de la tabla productos

SELECT * FROM Productos

Aplicación 1. Elaborar una Aplicación que permita listar los campos seleccionados en
un cuadro de lista .Par ello utilice una lista multple de style= check box
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -61-

El còdigo del formulario es

Option Explicit
Dim cadenaSQL As String
Dim i As Integer
Dim Numreg As Integer
Private Sub CmdGenerarSQL_Click()
__ Descrito Anteriormente
End Sub

Private Sub TxtSQL_KeyPress(KeyAscii As Integer)


---- Descrito anteriormente
End Sub

Private Sub Form_Activate()


Numreg = DatOrigen.Recordset.Fields.Count
For i = 0 To Numreg - 1
List1.AddItem DatOrigen.Recordset.Fields(i).Name
Next
End Sub

Private Sub List1_Click()


Dim CadSQL As String
CadSQL = ""
For i = 0 To List1.ListCount - 1
If List1.Selected(i) = True Then
CadSQL = CadSQL & List1.List(i) & ","
End If
Next
If Len(CadSQL) > 0 Then CadSQL = Left(CadSQL, Len(CadSQL) - 1)
TxtSQL = "SELECT " & CadSQL & " FROM PRODUCTOS"
End Sub

TAREA.- Elaborar un programa similar a la pagina 53 para listar los campos que se
elijan en el segundo cuadro de lista

LA CLAUSULA ORDER BY
Se utiliza para ordenar los registros con base en algún campo en especial. En este
cláusula puede establecer si el orden será ascendente o descendente mediante las
palabras claves ASC y des respectivamente. Si no especifica ninguna opción, se
asumirá un orden ascendente en la clasificación.
Puede especificar más de una columna en la cláusula ORDER BY, como resultado
obtendrá una vista que cumplirá con el orden especificado.

Ejercicios.- Utilizando la base de datos Productos escriba instrucciones SQL para

1. Mostrar el campo Nombre del Producto Ordenado por el Nombre del Producto

SELECT NombreProducto FROM Productos ORDER BY NombreProducto


Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -62-

2. Mostrar todos los campos Ordenados por el Nombre del Producto en forma
ascendente

SELECT * FROM Productos ORDER BY NombreProducto Por Defecto


SELECT * FROM Productos ORDER BY NombreProducto ASC Completo
SELECT * FROM Productos ORDER BY [NombreProducto] si hay espacios en
blanco

3. Mostrar todos los campos ordenados en forma descendente de acuerdo al campo


Unidades en Almacen y luego de acuerdo al campo nombre ( pero el segundo
campo ordenarlo debe ser ordenado en forma a ascendente

SELECT * FROM Productos ORDER BY UnidadesAlmacen DESC,


NombreProducto ASC

4 Mostrar los campos en el orden UnidadesAlmacen y luego Nombre del


producto Ordenados en forma descendente por UnidadesAlmacen

SELECT UnidadesAlmacen, NombreProducto FROM Productos ORDER BY


UnidadesALmacen DESC

Ejercicio.- Modificar la aplicación anterior que permita escoger el campo a ordenar y


escoger si es ascendente o descendente
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -63-

El código Modificado es

Option Explicit
Dim cadenaSQL As String
Dim i As Integer
Dim Numreg As Integer
Dim CadenaOrdenamiento As String
Dim CampoOrdenamiento As String
Dim CadSQL As String
Dim CadSQLFinal As String

Private Sub CmdGenerarSQL_Click()


On Error GoTo Mensaje:
cadenaSQL = TxtSQL.Text
DatSQL.RecordSource = cadenaSQL
DatSQL.Refresh
Exit Sub
Mensaje:
MsgBox Err.Description, vbCritical, "ERROR"
End Sub
Private Sub Combo1_Click()
CampoOrdenamiento = Combo1.List(Combo1.ListIndex)
TxtSQL = CadSQLFinal & " ORDER BY " & CampoOrdenamiento & " " &
CadenaOrdenamiento
End Sub

Private Sub Optasc_Click()


If Optasc.Value = True Then
CadenaOrdenamiento = "ASC"
Else
CadenaOrdenamiento = "DESC"
End If
TxtSQL = CadSQLFinal & " ORDER BY " & CampoOrdenamiento & " " &
CadenaOrdenamiento
End Sub

Private Sub OptDESC_Click()


If OptDESC.Value = True Then
CadenaOrdenamiento = "DESC"
Else
CadenaOrdenamiento = "ASC"
End If
TxtSQL = CadSQLFinal & " ORDER BY " & CampoOrdenamiento & " " &
CadenaOrdenamiento
End Sub

Private Sub TxtSQL_KeyPress(KeyAscii As Integer)


If KeyAscii = 13 Then
On Error GoTo Mensaje:
cadenaSQL = TxtSQL.Text
DatSQL.RecordSource = cadenaSQL
DatSQL.Refresh
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -64-

Exit Sub
Mensaje:
MsgBox Err.Description, vbCritical, "ERROR"
End If
End Sub

Private Sub Form_Activate()


Numreg = DatOrigen.Recordset.Fields.Count
For i = 0 To Numreg - 1
List1.AddItem DatOrigen.Recordset.Fields(i).Name
Combo1.AddItem DatOrigen.Recordset.Fields(i).Name
Next
List1.Selected(2) = True ' Escoge por defecto el campo 2
Combo1.ListIndex = 2
CadenaOrdenamiento = "ASC"
CampoOrdenamiento = Combo1.List(Combo1.ListIndex)
Call List1_Click
End Sub

Private Sub List1_Click()


Dim CadSQL As String
CadSQL = ""
For i = 0 To List1.ListCount - 1
If List1.Selected(i) = True Then
CadSQL = CadSQL & List1.List(i) & ","
End If
Next
If Len(CadSQL) > 0 Then CadSQL = Left(CadSQL, Len(CadSQL) - 1)
CadSQLFinal = "SELECT " & CadSQL & " FROM PRODUCTOS"
TxtSQL = CadSQLFinal & " ORDER BY " & CampoOrdenamiento & " " &
CadenaOrdenamiento
End Sub

LA CLAUSULA WHERE
Uno de lo más poderosos aspectos de la Instrucción SELECT es el que tiene que ver
con el condicionamiento de los registros mediante la cláusula WHERE (donde). Hay
dos formas de utilizarla.

• Para limitar la cantidad de registros obtenidos en una lista (Filtrar)


• Para vincular dos o mas tablas dentro de una vista

Uso de WHERE para limitar la cantidad de registros

Esta cláusula le permite llevar a cabo comparaciones lógicas en los datos de


cualquier columna de la tabla. En su forma mas simple , La cláusula WHERE luce de
la siguiente forma:

WHERE columna = valor


Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -65-

Columna representa el nombre de una tabla establecida y el valor representa el valor


literal que se requiere, como 45 o PEREZ. La cláusula WHERE siempre deberá estar
precedido por la Instrucción SELECt

Ejercicios.- Utilizando la base de datos Productos escriba instrucciones SQL para:

1. Seleccionar todos aquellos registros que unidades de Almacén tenga 0 unidades

SELECT * FROM Productos WHERE UnidadesAlmacen =0

La consulta anterior devuelve un subconjunto de datos de la Tabla Productos. Es


decir en esta vista no se encuentran todos los registros de la tabla Productos solo los
que cumplieron con la condición establecida en WHERE

2. Seleccionar todos aquellos productos que en Unidades en Almacén Tenga


Mayor a 10 unidades
SELECT * FROM Productos WHERE UnidadesAlmacen>50
3. Seleccionar todos aquellos productos cuyo campo Nombre del Producto sea
‘PAPAS’

SELECT * FROM Productos WHERE NombreProducto = 'PAPAS'

Puede establecer varias condiciones en WHERE mediante los operadores AND y OR.
Puede utilizar no sólo los operadores lógicos =, <>, >, <, >=, >=, El SQL del Jet
también soporta el uso de los operadores BETWEEN , IN y LIKE

4. Seleccionar todos aquellos productos que en Unidades en Almacén Tenga


Mayor a 10 unidades pero menores a 50 unidades

SELECT * FROM Productos WHERE UnidadesAlmacen> 10 AND


UnidadesAlmacen<= 50

5. Seleccionar todos aquellos productos que en Unidades en Almacén Tenga


Menor a 10 unidades y que se llame PAPAS además ordenarlos de acuerdo al
campo Nombre del Producto en forma Ascendente

SELECT * FROM Productos WHERE NombreProducto ='PAPAS’ AND


UnidadesAlmacen<= 10 ORDER BY NombreProducto ASC

6. Seleccionar todos aquellos productos que el precio Unitario este en el rango 2


a 5 (inclusive)

SELECT * FROM Productos WHERE PrecioUnitario BETWEEN 2 AND 5

SQL también Puede utilizarse para obtener una vista cuyos registros cumplan con una
lista de condiciones. Por ejemplo , se desearía obtener todos aquellos clientes con
residencia en México, Venezuela y Argentina , tendría que poner todos esos países
dentro de un paréntesis y separados por comas después del operador IN : Todo Esto
formaría parte de la cláusula WHERE

Para ello a su Formulario FRMSQL Modifique la propiedad Database name del control
Data A BIBLIO.MDB( de la base de datos de Visual Basic) y la propiedad Record
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -66-

Source a Publishers y debe escribir la siguiente instrucción SQL, puede usar también la
ventana

SELECT PubID, Name , City, State FROM Publishers WHERE State IN ('NY','CA',
'RI')

Figura 6. Resultados del Uso de WHERE y IN en una consulta

También Puede usar el modo del operador LIKE para obtener una vista cuyos
registros cumplan con una patrón especificado. Por ejemplo para obtener todos
aquellos registros Cuya Columna State Tenga Una letra I en algún lado debe obtener
la siguiente Instrucción Select

SELECT Pubid, Name, City, State FROM Publishers WHERE State LIKE '*I*'

Ejercicios Utilizando la base de datos Productos escriba instrucciones SQL para:

1. Listar todos lo productos que en el campo nombre tenga la cadena PA

SELECT * FROM Productos WHERE NombreProducto LIKE '*PA*'

2. Listar todos lo productos que cuyo nombre comienza con A

SELECT * FROM Productos WHERE NombreProducto LIKE 'A*'

3. Listar todos lo productos que cuyo Código de Producto comience P04

SELECT * FROM Productos WHERE CodProducto LIKE 'P04*'

4. Listar todos lo productos que cuyo Nombre comienza co A y además cuesta


más de 2 soles

SELECT * FROM Productos WHERE NombreProducto LIKE 'A*' AND


PrecioUnitario > 2
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -67-

5. Listar todos los productos Cuyo Nombre contenga la palabra “Pollo”

SELECT * FROM Productos WHERE NombreProducto LIKE '*Pollo*'

6. Listar todos lo productos que Cuyo códigos sean P01, P02 o P04
SELECT * FROM Productos WHERE CodProducto IN ('P01','P02','P04')

7. Listar todos lo productos que contenga las palabras “Arequipa”, “Puno“ en el


nombre del producto

SELECT * FROM Productos WHERE NombreProducto LIKE '*Arequipa*' OR


NombreProducto LIKE '*Puno*'

Ejrcicio:_ Agregar un Formulario llamado frmFiltros que permita filtrar datos por el
campo Nombre del Producto los siguientes criterios son dado en un cuadro de texto
para ello use instrucciones SQL
Criterio Filtra todos aquellos registros
"Es igual " que son iguales al cuadro de texto
"Es Mayor" son mayores al cuadro de texto
"Que comienza Con que comienzan con las letras especificadas en el cuadro
" de texto
"Que Termina Con " que terminan con lo especificado en el cuadro de texto
"Que Contiene " que contiene la el cuadro de texto
Diseño del Formulario
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -68-

Código del formulario

Option Explicit
Dim opcion As String
Dim SubCadena As String
Dim CadenaSQl As String
Option Compare Text 'para que coicida mayusculas y minusculas

Private Sub CmdLimpiar_Click()


CadenaSQl = ""
TxtSQL = CadenaSQl
DatSQL.RecordSource = CadenaSQl
DatSQL.Refresh
DBGrid2.Refresh
End Sub

Private Sub FILTRARSQL_Click()


On Error GoTo Mensaje:
opcion = Combo1.List(Combo1.ListIndex)
Select Case opcion
Case "Es igual "
SubCadena = " LIKE '" & TxtFiltro.Text & "'"
Case "Es Mayor"
SubCadena = " >'" & TxtFiltro.Text & "'"
Case "Que comienza Con "
SubCadena = "LIKE '" & TxtFiltro.Text & "*'"
Case "Que Termina Con "
SubCadena = "LIKE '*" & TxtFiltro.Text & "'"
Case "Que Contiene "
SubCadena = "LIKE '*" & TxtFiltro.Text & "*'"
End Select
CadenaSQl = "SELECT * FROM Productos WHERE NombreProducto " & SubCadena
TxtSQL = CadenaSQl
DatSQL.RecordSource = CadenaSQl
DatSQL.Refresh
Exit Sub
Mensaje:
MsgBox Err.Description, vbCritical, "ERROR"
End Sub

Private Sub Form_Load()


Combo1.AddItem "Es igual "
Combo1.AddItem "Es Mayor"
Combo1.AddItem "Que comienza Con "
Combo1.AddItem "Que Termina Con "
Combo1.AddItem "Que Contiene "
Combo1.ListIndex = 0
End Sub

Private Sub TxtFiltro_KeyPress(KeyAscii As Integer)


Call FILTRARSQL_Click
End Sub
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -69-

Private Sub TxtSQL_KeyPress(KeyAscii As Integer)


If KeyAscii = 13 Then
DatSQL.RecordSource = TxtSQL
DatSQL.Refresh
Exit Sub
Mensaje:
MsgBox Err.Description, vbCritical, "ERROR"
End If
End Sub

Private Sub Salir_Click()


Unload Me
End
End Sub

USO DE WHERE PARA VINCULAR DOS O MAS TABLAS EN UNA


VISTA

La funcionalidad de WHERE puede aprovecharse para comparar los campos de tablas


distintas, crear un criterio, así le permitirá obtener una vista donde se conjunten los
campos de dos tablas la sintaxis para su uso es la siguiente

SELECT Tabla1.columnaA, Tabla2.ColumnaA FROM Tabla1, Tabla2 WHERE


Tabla1.columnaA = Tabla2.ColumnaA
Tanto Tabla1 como tabla2 son tablas de la misma base de datos

EJERCICIOS
Ejercicio 1.- Modifique la propiedad DatabaseName de sus controles Data a
BIBLIO.MDB luego capture y ejecute la siguiente Instrucción

SELECT Titles.Title , Publishers.Name FROM Publishers, Titles WHERE


Publishers.PubID = Titles.pubId

Puede probar con el generador de


Instrucciones SQL de
Administrador Visual de datos
Visdata (donde le informa la
características del informe
generado)

Figura 7 Combinación de
Cláusulas WHERE de tipo vínculo
y limitación con VisData

La instrucción anterior crea una vista que muestra el Título de un libro y el nombre de
la editorial

La combinación de tablas mediante WHERE siempre arrojará una vista que no podrá
actualizarse, es decir que no podrá hacer cambios en la información por este medio
(en general las tablas que se obtiene con SELECT no se pueden eliminar registros
tanto en las tablas fuentes como en la generada). Para abrir vistas que pueden ser
modificadas, deberá utilizar la cláusula JOIN
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -70-

Ejercicio 2. Capture y ejecute la siguiente Instrucción

SELECT Titles.PubID, Titles.Title , Publishers.Name FROM Titles, Publishers


WHERE Publishers.PubID = Titles.PubId AND Publishers.PubID BETWEEN 5
AND 10
La instrucción anterior selecciona los registros, donde las columnas PubId de ambas
tablas confluyan y sus valores se encuentran comprendidos entre 5 y 10: Si desea
escribir una instrucción dividida en varias líneas oprima Control + Enter al final de
cada Línea para pasar al siguiente renglón sin ejecutar la instrucción

WHERE puede vincular mas de dos tablas


Ejercicio 3.- Escriba la siguiente instrucción SQL
SELECT Titles.PubID , Titles.Title, Publishers.Name, Authors.Author FROM
Titles,Publishers, Authors WHERE Titles.PubID =Publishers.PubID
AND Titles.PubId = Authors.Au_Id

Figura 8. Resultado de de utiliza WHERE para vincular 3 tablas

En SQL puede usar la cláusula AS para asignarles un nombre más adecuado a las
columnas de la Vista

Ejercicio 4.- Ejecute la siguiente Instrucción y compare los resultados con la Figura 9
SELECT Titles.PubID AS CodigoPub, Titles.Title AS [Titulo del Libro],
Publishers.Name AS NombrePub ,Authors.Author AS NombreAuthor FROM
Titles, Publishers, Authors
WHERE Titles.PubID =Publishers.PubID AND Titles.PubId = Authors.Au_Id

Figura 9 Resultado de Usar AS para cambiar el nombre de las columnas en un


conjunto de datos en VisData
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -71-

Ejercicio Nro 4.- Cree una base de datos similar a lo que se muestra en la Página 147
(del libro) ponga de nombre BaseSimple.Mdb (los campos de las tablas son de tipo
texto, excepto el campo Nota de la tabla Notas que es de tipo numérico La figura 10
muestra el contenido y estructura de las tablas

(a)

(b)

(c) (d)
Figura 10.- Estructura de la base de datos BaseSimple.MDb .a)Tabla Alumnos
b) Tabla cursos c)Tabla Notas d)Estructura de la Base de datos Alumnos.mdb

Ejercicio 5 Pruebe los siguientes comandos SQL


a) SELECT * FROM alumnos
Genere 6 registros de la tabla alumnos y dos campos
b) SELECT * FROM alumnos,cursos
Genera 30 registros (6x 5) y cuatro campos
c) SELECT SELECT * FROM alumnos,cursos,notas
Se obtiene 240 registros (6 x 5 x 8) y 8 campos (2+2+4)
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -72-

d) SELECT Notas.codalu, Notas.CodCurso, Notas.Nota FROM


alumnos,cursos,notas
Se Obtiene 240 registros y 3 campos (las que se enumeran ) y son registros de solo
lectura

Ejercicio 6 genere una tabla de consulta que con todos los datos de la tabla notas y
de acuerdo al código del alumno busque el nombre del alumno en la tabla alumnos y
de acuerdo al código del curso busque el nombre del curso en la tabla cursos

SELECT Notas.codalumno, Alumnos.Apenom, Notas.CodCurso,


Cursos.NomCurso ,Notas.Nota FROM alumnos,cursos,notas WHERE
Notas.CodAlumno = Alumnos.CodAlumno AND Notas.CodCurso =
Cursos.CodCurso ORDER BY notas.codalumno

Remplace con SELECT * FROM (luego sigue igual) y vea que pasa

Figura 11.- Uso de WHERE para eliminar datos que se repiten ( quedan 8 registros)
Ejercicio 7. Escribir una sentencia SQL para listar todos los alumnos que llevan el
curso 1(C1)
SELECT Notas.codalumno, Alumnos.Apenom, Notas.CodCurso,
Cursos.NomCurso ,Notas.Nota FROM alumnos,cursos,notas WHERE
Notas.CodAlumno = Alumnos.CodAlumno AND Notas.CodCurso =
Cursos.CodCurso AND Cursos.CodCurso ='C1' ORDER BY notas.codalumno
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -73-

Ejercicio 8.- Elaborar una aplicación donde se carga en un cuadro de lista la lista de
cursos y otro cuadro de lista la lista de alumnos. Generar Sentencias SQL para ambos
casos

Option Explicit
Dim i As Integer
Dim curso As String
Dim alumno As String
Dim CadenaSQl As String

Private Sub CmdAlumnos_Click()


Data1.RecordSource = "Alumnos"
Data1.Caption = "Alumnos"
Data1.Refresh
alumno = List2.List(List2.ListIndex)
Data1.Recordset.MoveFirst
Data1.Recordset.FindFirst "CodAlumno = '" & alumno & "'"
DBGrid1.Caption = "Alumno " & alumno & " " & Data1.Recordset.Fields("Apenom")
CadenaSQl = " SELECT Notas.codalumno, Alumnos.Apenom, Notas.CodCurso,
Cursos.NomCurso ,Notas.Nota FROM alumnos,cursos,notas WHERE
Notas.CodAlumno = Alumnos.CodAlumno AND Notas.CodCurso = Cursos.CodCurso
AND Alumnos.CodAlumno = '" & alumno & "' ORDER BY notas.codcurso"
txtSql = CadenaSQl
Data1.RecordSource = txtSql
Data1.Refresh
List2.Refresh
End Sub

Private Sub CmdCurso_Click()


Data1.RecordSource = "Cursos"
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -74-

Data1.Caption = "Cursos"
Data1.Refresh
curso = List1.List(List1.ListIndex)
Data1.Recordset.MoveFirst
Data1.Recordset.FindFirst "Codcurso = '" & curso & "'"
DBGrid1.Caption = "Curso " & curso & " " & Data1.Recordset.Fields("nomcurso")
CadenaSQl = " SELECT Notas.codalumno, Alumnos.Apenom, Notas.CodCurso,
Cursos.NomCurso ,Notas.Nota FROM alumnos,cursos,notas WHERE
Notas.CodAlumno = Alumnos.CodAlumno AND Notas.CodCurso = Cursos.CodCurso
AND Cursos.CodCurso = '" & curso & "' ORDER BY notas.codalumno"
txtSql = CadenaSQl
Data1.RecordSource = txtSql
Data1.Refresh
List1.Refresh
End Sub

Private Sub Form_Activate()


' llenar el cuadro de lista cursos
Data1.RecordSource = "Cursos"
Data1.Caption = "Alumnos"
Data1.Refresh
Data1.Recordset.MoveFirst
For i = 0 To Data1.Recordset.RecordCount - 1
List1.AddItem Data1.Recordset.Fields("CodCurso").Value
Data1.Recordset.MoveNext
Next i
' llenar el cuadro de lista alumnos
Data1.RecordSource = "Alumnos"
Data1.Refresh
Data1.Recordset.MoveFirst
For i = 0 To Data1.Recordset.RecordCount - 1
List2.AddItem Data1.Recordset.Fields("CodAlumno").Value
Data1.Recordset.MoveNext
Next i
End Sub

FUNCIONES AGREGADAS DE SQL

Los estándares de SQL, definen un conjunto de funciones que deberán encontrarse


en todos los sistemas que acaten las normas de SQL. Tales funciones que están
disponibles en el Jet Son.
AVG.- Devuelve el promedio de los valores que se encuentran en una columna
COUNT Devuelve la cantidad de registros y se suele utilizar para determinar la
cantidad de ellos en una vista. Esta e la única función estándar que puede utilizarse
con columnas que no sean numéricas).
SUM.- Devuelve una sumatoria de los valores de una columna
MAX devuelve el mayor valor encontrado en una columna
MIN devuelve el menor valor encontrado en una columna
StDev, StDevP.- Devuelve n estimaciones de la desviación estándar de una población
o una muestra.
Var, VarP.- Devuelve n estimaciones de la varianza de una población o una muestra.
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -75-

Ejercicio 7. Usando la base de datos productos escriba

SELECT COUNT (NombreProducto) AS [TOTAL PRODUCTOS] ,AVG


(PrecioUnitario) AS [Promedio Precio Unitario] , SUM (UnidadesAlmacen) AS
[Suma Unidades Almacen] ,
MAX(UnidadesAlmacen) From Productos

Figura 10 Uso de las funciones Agregadas de SQL


Nota:-en MAX([Unidades en Almacen]) al no poner AS el Nombre del campo sale
expr. 1003
Es posible Utilizar WHERE y las funciones agregadas en un mismo select

Ejercicio 8. trabajando con la base de datos productos pruebe la sentencia

SELECT COUNT([NombreProducto]) AS [TOTAL PRODUCTOS] ,


AVG ([PrecioUnitario]) AS [Promedio Precio Unitario] ,
SUM ([UnidadesAlmacen]) AS [Suma Unidades Almacen] ,
MAX([UnidadesAlmacen]) As MayorUnidAlmacen From Productos
WHERE [NombreProducto] LIKE '*P*'

Figura 11. Resultado de WHERE para limitar el alcance de las funciones agregadas
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -76-

Ejercicio 1. Con la base de datos Base simple escriba una Instrucción SQL para listar
los tabla alumnos con al cantidad de cursos que lleva cada uno.

SELECT Alumnos.Apenom , Count (Notas.CodCurso) As


Total FROM Alumnos,Cursos ,notas WHERE
Notas.CodAlumno = Alumnos.CodAlumno AND
Notas.CodCurso = Cursos.CodCurso GROUP BY
Alumnos.Apenom ORDER BY alumnos.Apenom

Ejercicio 2. Con la base de datos Base simple escriba una Instrucción SQL para listar
los tabla cursos con el promedio de notas por curso
SELECT Cursos.Nomcurso , AVG (Notas.Nota) As PromNotal FROM
Alumnos,Cursos ,notas WHERE Notas.CodAlu = Alumnos.CodAlu AND
Notas.CodCurso = Cursos.CodCurso GROUP BY Cursos.NomCurso ORDER BY
Cursos.Nomcurso

Figura 12.- Resultados de funciones agregadas en la Base de datos de alumnos

Uso de las funciones de visual Basic en una Instrucción Select

Al cargar cualquier base de datos mediante el Jet en una aplicación de VB , es posible


utilizar cualesquiera de las funciones propias del entorno como parte de una Instrucción
SQL (Figura 13-a)
Select Left (NombreProducto,3) AS Iniciales, NombreProducto From Productos

También puede utilizar una sintaxis propia de visual Basic para combinar varis
columnas en un sola dentro de la vista (Figura 13-b)

Select NombreProducto & " : " & PrecioUnitario AS [Descripcion del


producto] From Productos

Figura 13 a) Uso de las


funciones propias de Visual Basic
en una instrucción SQL
b) Uso de recursos de Visual
Basic para combinar columnas
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -77-

También puede utilizar las funciones de Visual Basic como parte de la cláusula
WHERE

SELECT NombreProducto From Productos WHERE


Mid(NombreProducto,3,2)='PA'

Figura 14.- Uso de funciones de Visual Basic en una Cláusula WHERE

Nota.- Aunque es muy útil poder utilizar las funciones y sintaxis de Visual Basic tiene
sus desventajas. La Principal es que toda aquella consulta SQL que incluye porciones
específicas de VB, carecerá por completo de compatibilidad y, por lo tanto portabilidad.
Si intenta utilizar tales consultas en alguna otra base de datos (como SQL Server) ,
deberá eliminar tales Instrucciones y reemplazarlas por aquellas que funcionan en
ella. Pero si se utiliza solo bases de datos del Jet no será problema

Es mejor utilizar la menor cantidad de funciones de Visual Basic en sus consultas SQL.
Así no afectará significativamente ni la portabilidad de su código SQL, ni su rapidez de
su ejecución.

Otras instrucciones DML de SQL


Alguna características extra de SELECT
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -78-

Los predicados DISTINCT y DISTINCTROW

Si Utiliza el Predicado DISTINCT para asegurarse que no aparezcan nombres


duplicados en la vista

SELECT DISTINCT NombreProducto From Productos ORDER BY


NombreProducto

Figura 15.- Uso de DISTINCT para evitar duplicados en un conjunto de datos

Si se incluye más de una columna en la lista SELECT, todas ellas serán evaluados
para obtener un registro único

SELECT DISTINCT Nro, NombreProducto From Productos


Lista todos los campos, por lo que DISTINC solo se puede usar para listar un solo
campo

DISTINTNCTROW .- Omite los datos basados en registros duplicados completos, no


sólo campos duplicados.
SELECT ALL DISTINCTROW * FROM Productos

El predicado TOP y la clave PERCENT

TOP Devuelve cierto número de registros que se encuentran entre la parte superior e
inferior de un intervalo especificado por una cláusula ORDER BY.(los primeros n
registros), si hubiera dos registros con el mismo nombre , devolverá ambos ,al utilizar el
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -79-

predicado TOP si la cláusula ORDER BY es omitido muestra un conjunto arbitrario de


registros.

SELECT ALL TOP 4 * From Productos ORDER BY UnidadesAlmacen ASC

Selecciona los primeros 4 registros

PERCENT.- Realiza la misma acción que el predicado TOP para un porcentaje de


registros.
SELECT TOP 50 PERCENT * From Productos WHERE UnidadesALmacen > 0
Muestra el 50 % de los registros que cumplen la condición especificado en WHERE
( si hay 5 registros listara 3)

Las cláusulas GROUP BY HAVING

Con estas funciones se podrá utilizar las funciones agregadas de SQL para crear una
lista de subtotales obtenidos de la tabla Origén

Sintaxis
SELECT listacampos
FROM tabla
WHERE criterioselección
GROUP BY grupolistacampos
[HAVING grupocriterio]
Donde
grupolistacampos Los nombres de hasta 10 campos que se van a utilizar para
agrupar registros. El orden de los nombres de los campos en grupolistacampos
determina los niveles de agrupamiento desde el más alto hasta el más bajo.
grupocriterio Una expresión que determina qué registros agrupados se van a
mostrar.
Ejemplo.- encontrar subtotales
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -80-

SELECT NombreProducto, SUM (UnidadesAlmacen) As Totales FROM


Productos GROUP BY NombreProducto

Figura 16 Uso de GROUP BY para crear Subtotales

Si queremos listar todos los productos cuya suma sea mayor a 100 se podría escribir
una sentencia SQL de la siguiente forma

SELECT NombreProducto SUM (Unidades Almacen) As Totales


FROM Productos WHERE SUM (UnidadesAlmacen)>100 GROUP BY
NombreProducto

Si se intenta ejecutarlo el detector de errores lanza un mensaje de que no se permite


el uso de funciones agregadas en WHERE

HAVING .- tiene un efecto similar similar a WHERE , pero solo trabaja de acuerdo a
los resultados obtenidos por GROUP BY . Con la siguiente Instrucción

SELECT [Nombre del Producto], SUM ([Unidades en Almacen]) As Totales


FROM Productos GROUP BY [Nombre del Producto] HAVING SUM([Unidades
en Almacen])>50
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -81-

Figura 17. Uso de Having en Grupo By

No es necesario que las columnas indicadas en las cláusula HAVING se encuentre


en SELECT, con HAVING se siguen las mismas reglas que con WHERE : A su vez ,
puede utilizar los operadores AND , OR, NOT , y puede incluir funciones propias de
VB.

Con la base productos antiguo


SELECT [Nombre del Producto], SUM ([Unidades en Almacen]) As Totales
FROM Productos GROUP BY [Nombre del Producto]
HAVING SUM([Unidades en Almacen])>50 AND InStr([Nombre del Producto],
"R") >0

Con la base productos Nuevo

SELECT NombreProducto, SUM (UnidadesAlmacen) As Totales FROM


Productos GROUP BY NombreProducto HAVING SUM(UnidadesAlmacen)>50
AND InStr(NombreProducto, "R") >0

Figura 18.- Uso de una condición compleja en HAVING

Nota.- Es mala idea utilizar espacios en los nombres de las columnas y de las tablas,
no solo necesita utilizar corchetes, sino también porque el asistente para convertir
tablas de Access en Microsoft SQL Server no funcionará adecuadamente con
aquellas tablas que tengas espacios en sus nombres

La operación JOIN

En la vinculación de dos tablas se podía seguir la siguiente sintaxis


Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -82-

WHERE Tabla1.columna1= Tabla2.columna1 por este método la vista resultante es


de solo lectura, para una vista que puede ser actualizada usar JOIN
Existen tres tipos de operaciones JOIN en el SQL del Jet

INNER JOIN(fusión Interna).-Combina registros de dos tablas siempre que existan


valores coincidentes en un campo común.
Sintaxis
FROM tabla1 INNER JOIN tabla2 ON tabla1.campo1 operadorcomp tabla2.campo2

La operación INNER JOIN consta de las siguientes partes:


Parte Descripción
tabla1, tabla2 Los nombres de las tablas cuyos registros se van a combinar.
campo1, campo2 Los nombres de los campos que se van a combinar. Si no son
numéricos, los campos deben ser del mismo tipo de datos y contener la misma clase
de datos, pero no tienen porqué tener el mismo nombre.

operadorcomp Cualquier operador de comparación relacional: "=," "<," ">," "<=,"


">=," o "<>."

INNER JOIN2 se utiliza para generar una vista que contenga sólo aquellos registros
que tengan una correspondencia exacta en ambas tablas.

Ejercicio .- Juntar las tablas Cursos y Notas si el código del curso es igual
SELECT Cursos.* FROM Notas INNER JOIN Cursos ON Notas.CodCurso =
Cursos.CodCurso

Figura 19.-
Uso de INNER
JOIN EN SQL

LEFT JOIN
2
Aprendiendo Progrmaciòn de bases de datos con Visual Basic 6.0 de Curtis Smith Michael Admusin p 245
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -83-

LEFT JOIN es otro tipo de operación de fusión conocida como fusión externa.
Recapitulemos: la fusión interna devolverá una vista con los registros correspondientes
en ambas tablas. Una fusión extema devolverá todos los registros de una tabla, haya o
no registros correspondientes en la otra. LEFT JOIN es una fusión exlerna que
devolverá todos los registros de la tabla indicada primero (a la izquierda) y aquellos
registros que se encuentren en la segunda tabla (a la derecha) y que coincidan. La
figura 7,30 muestra el resultado de la misma instrucción SQL que se utilizó para la
figura 7.28, excepto que INNER ha sido reemplazado por LEFT. Ejecute esta
instrucción y compare sus resultados con los de la
figura 7.30:

SELECT Cursos.* FROM Notas


LEFT JOIN Cursos ON Notas.CodCurso = Cursos.CodCurso

RIGTH JOIN
Funciona igual que LEFT JOIN excepto que la tabla principal será la de la derecha

OPERACIÓN UNION

Con ella es posible crear dos tablas o consultas que contengan datos similares, pero
no relacionados. Una operación UNION es conveniente cuando desee cotejar
información obtenida de dos consultas en una sola vista .UNION puede mezclar el
resultado de dos o más consultas.
Ejemplo 1

TABLE alumnos UNION TABLE Cursos ORDER BY Alumnos.Codalu

Figura 20. Resultado de mezclar dos tablas en 1 con UNION

Ejercicio 2 Vea el siguiente ejercicio

TABLE Cursos UNION TABLE Alumnos ORDER BY Cursos.CodCurso

Ejercicio 3. Mezclar 2 consultas

SELECT Notas.Codcurso, Cursos.Nomcurso FROM Notas,Cursos UNION


SELECT Cursos.CodCurso ,Cursos.Nomcurso FROM Cursos

Ejercicio 4. Puede utilizar UNION en la misma tabla


Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -84-

SELECT Productos.[nombre del Producto] FROM Productos UNION


SELECT Productos.[Unidades en Almacen] FROM Productos

REFERENCIAS CRUZADAS CON TRANSFORM

Permiten crear vistas que contienen datos resumidos de una forma conocida como
referencia cruzada
Ejemplo

TRANSFORM SUM([Unidades en Almacen]) SELECT [Nombre del Producto]


FROM Productos GROUP BY [Nombre del Producto] PIVOT [Unidades en
Almacen]

Figura 21 Ejemplo de Uso de Transform

Figura 22. Uso de Transform para base de


datos alumnos

Desventaja de Transform.- no es una


instrucción propia de la norma ANSI-SQL

CONSULTAS SELECT ANIDADAS

Las consultas anidadas SELECT se conoce como subconsultas son consultas


contenidas en otra

Ejemplo realizar un consulta en otra


Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -85-

SELECT Notas.*, Alumnos.Apenom from Notas , alumnos WHERE


Notas.codalu
IN ( SELECT Notas.CodAlu FROM Notas WHERE
Notas.CodAlu=Alumnos.CodALu )

La instrucción SELECT que se encuentra fuera del paréntesis ( La consulta principal)


se ejecuta de acuerdo a los resultados obtenidos por la subconsulta (paréntesis
interna).

PROBLEMAS

Solución del diseño de base de datos simple pag 147 usando SQL y reportes
Se tiene la base de datos mostrada en la página 47 elaborar una aplicación usando
Instrucciones SQL
1:- Diseñe un formulario como se muestra, elimine las opciones de ver Detalle y cerrar
detalle, además solo use dos controles data

Figura 23.- Nuevo diseño del formulario de la base datos alumns

El código del formulario es

Option Explicit
Dim consulta As String
Dim DETALLE As String
Dim NombreBase As String

Sub mostrar()
DBGrid1.Visible = True :DBGrid2.Visible = True
Data1.Visible = True :Data2.Visible = True
End Sub
Sub Ocultar()
DBGrid1.Visible = False :DBGrid2.Visible = False
Data1.Visible = False :Data2.Visible = False
End Sub
Private Sub ArcCerrarBase_Click()
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -86-

Ocultar
End Sub

Private Sub ArcMostrar_Click()


' el data1 se usara como datos de trabajo relacionado a dbgrid1
Data1.RecordSource = "Alumnos"
Data1.Refresh: Data1.Caption = "Alumnos"
Data1.Visible = True
mostrar
End Sub
Private Sub Data1_Reposition()
Dim Nombre As String
With Data1.Recordset
Select Case Data1.Caption
Case "Alumnos"
Nombre = .Fields("Apenom").Value
consulta = DETALLE & " AND Alumnos.Apenom LIKE '" & Nombre & "'"
Case "Cursos"
Nombre = .Fields("NomCurso").Value
consulta = DETALLE & " AND Cursos.Nomcurso LIKE '" & Nombre & "'"
Case "Notas"
consulta = DETALLE
End Select
Data2.RecordSource = consulta
Data2.Refresh
End With
End Sub

Private Sub Form_Load()


NombreBase = "c:\cd2002b\SI2002B\BasedeDatos\BaseSimple1.mdb"
Data1.DatabaseName = NombreBase
Data2.DatabaseName = NombreBase
DETALLE = " SELECT Notas.codalu,Alumnos.Apenom, Notas.CodCurso, " & _
" Cursos.NomCurso , Notas.Nota FROM alumnos,cursos,notas WHERE " & _
" Notas.CodAlu = Alumnos.CodAlu And Notas.CodCurso = Cursos.CodCurso"
End Sub

Private Sub MnuALUMNOS_Click()


Data1.RecordSource = "Alumnos"
Data1.Caption = "Alumnos"
Data1.Refresh
End Sub
Private Sub MnuCursos_Click()
Data1.RecordSource = "Cursos"
Data1.Caption = "Cursos"
Data1.Refresh
End Sub
Private Sub MnuNotas_Click()
Data1.RecordSource = "Notas"
Data1.Caption = "Notas"
Data1.Refresh
End Sub
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -87-

Version cd
SOLUCION DE LA TERCERA PREGUNTA DEL EXAMEN USANDO SQL

PREGUNTA 3 TEMA A EXAMEN DEL JUEVES 19 /12 02


Modifique la siguiente sentencia

Private Sub Combo1_Click()


promo = Right(Combo1.List(Combo1.ListIndex), 2)
consulta = "SELECT * FROM Alumnos WHERE left(Alumnos.Cui,2) LIKE '" & promo &
"'"
Data2.RecordSource = consulta
Data2.Refresh
End Sub

PREGUNTA 3 TEMA B Modifique el siguiente procedimiento


Private Sub Combo2_Click()
Nacimiento = Combo2.List(Combo2.ListIndex)
'consulta = "SELECT * FROM Alumnos Where Right(Alumnos.[Fecha de Nacimiento],
4) LIKE '" & Nacimiento & "'"
consulta = "SELECT * FROM Alumnos Where Right(Alumnos.[Fecha Nacimiento] , 4)
LIKE '" & Nacimiento & "'"
Data1.RecordSource = consulta :Data1.Refresh
End Sub

EXAMEN VIERNES 20 de diciembre del 2002


PREGUNTA 3 TEMAS A y B .El nuevo código del formulario es

Option Explicit
Dim i As Integer, NReg As Integer
Dim libro As String, consulta As String
Private Sub CdmAutor_Click()
List1.Clear
consulta = "SELECT DISTINCT Autor FROM Libros "
Data2.RecordSource = consulta: Data2.Refresh
With Data2.Recordset
.MoveLast: NReg = .RecordCount
.MoveFirst
For i = 0 To NReg - 1
List1.AddItem .Fields("Autor")
.MoveNext
Next
End With
End Sub
Private Sub CmdEditorial_Click()
List2.Clear
consulta = "SELECT DISTINCT Editorial FROM Libros "
Data2.RecordSource = consulta: Data2.Refresh
With Data2.Recordset
.MoveLast: NReg = .RecordCount
.MoveFirst
For i = 0 To NReg - 1
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -88-

List2.AddItem .Fields("Editorial")
.MoveNext
Next
End With
End Sub
Private Sub List1_Click()
libro = List1.List(List1.ListIndex)
consulta = "SELECT * FROM Libros Where Autor LIKE '" & libro & "'"
Data2.RecordSource = consulta: Data2.Refresh
End Sub
Private Sub List2_Click()
libro = List2.List(List2.ListIndex)
consulta = "SELECT * FROM Libros Where Editorial LIKE '" & libro & "'"
Data2.RecordSource = consulta: Data2.Refresh
End Sub

Ejercicios
1 Se tiene una hbase de datos cuyos campos CodALumno. Nombre , Nota, listas todos
los alumnos aprobados

Potrebbero piacerti anche