Sub conectarConDbActual()
Dim conexionDB As New ADODB.Connection
Set conexionDB = CurrentProject.Connection
'Inserción de registros en tabla Medicos
conexionDB.Execute ("INSERT INTO Medicos VALUES(1, 'Julio', 'Rodriguez', 'Cardiología')")
conexionDB.Execute ("INSERT INTO Medicos VALUES(2, 'Pedro', 'Estrada', 'Neurología')")
conexionDB.Execute ("INSERT INTO Medicos VALUES(3, 'Mariana', 'Hurtado', 'Dermatología')")
conexionDB.Execute ("INSERT INTO Medicos VALUES(4, 'Luis', 'Fernández', 'Oncología')")
conexionDB.Execute ("INSERT INTO Medicos VALUES(5, 'Sonia', 'Martínez', 'Radiología')")
'Inserción de registros en tabla Pacientes
conexionDB.Execute ("INSERT INTO Pacientes VALUES(1, 'Alberto', 'Ramírez', 'Camarena', 'Masculino', 10, 'Calle 3, No 9', 'Valle de Bravo', '99502', 'CDMX', '0987640123', 'alberto@micorreo.com')")
conexionDB.Execute ("INSERT INTO Pacientes VALUES(2, 'Maria', 'Juarez', 'López', 'Femenino', 30, 'Calle 9, No 8', 'Valle de Anáhuac', '88412', 'Estado de México', '8904321456', 'maria@micorreo.com')")
conexionDB.Execute ("INSERT INTO Pacientes VALUES(3, 'Adriana', 'Domínguez', 'Antulio', 'Femenino', 36, 'Calle 13, No 90', 'Héreoes', '89022', 'CDMX', '5589098901', 'adriana@micorreo.com')")
conexionDB.Execute ("INSERT INTO Pacientes VALUES(4, 'Fernando', 'Jiménez', 'Fernández', 'Masculino', 45, 'Calle 23, No 4', 'Laureles', '09789', 'CDMX', '550000000021', 'fernando@micorreo.com')")
conexionDB.Execute ("INSERT INTO Pacientes VALUES(5, 'Antonio', 'Perales', 'Ochoa', 'Masculino', 48, 'Calle 33, No 2', 'Cedros', '09034', 'Estado de México', '0923567891', 'kevin@micorreo.com')")
'Inserción de registros en tabla Citas
conexionDB.Execute ("INSERT INTO Citas VALUES(1, 1, 1, '2025-05- 25', '10:00', 70, 'Ninguna')")
conexionDB.Execute ("INSERT INTO Citas VALUES(2, 2, 1, '2025-06- 25', '13:00', 70, 'Ninguna')")
conexionDB.Execute ("INSERT INTO Citas VALUES(3, 1, 2, '2025-01- 25', '16:00', 80, 'Ninguna')")
conexionDB.Execute ("INSERT INTO Citas VALUES(4, 2, 2, '2025-02- 25', '09:00', 80, 'Ninguna')")
conexionDB.Execute ("INSERT INTO Citas VALUES(5, 1, 3, '2025-03- 25', '14:00', 90, 'Ninguna')")
conexionDB.Execute ("INSERT INTO Citas VALUES(6, 2, 3, '2025-04- 25', '15:00', 90, 'Ninguna')")
conexionDB.Execute ("INSERT INTO Citas VALUES(7, 1, 4, '2025-11- 25', '16:00', 100, 'Ninguna')")
conexionDB.Execute ("INSERT INTO Citas VALUES(8, 2, 4, '2025-12- 25', '15:00', 100, 'Ninguna')")
conexionDB.Execute ("INSERT INTO Citas VALUES(9, 1, 5, '2025-10- 25', '15:00', 50, 'Ninguna')")
conexionDB.Execute ("INSERT INTO Citas VALUES(10, 2, 5, '2025-11- 25', '17:00', 50, 'Ninguna')")
End Sub
La siguiente imagen muestra los registros colocados en las tablas de este proyecto de Access (Clic en cada imagen para ampliarla).
Pruebas y resultados
Para probar la correcta estructuración de la base de datos podemos ejecutar algunas consultas multitabla que nos permitan observar las relaciones que fueron creadas, para esto se tiene la opción de usar uniones, específicamente se va usar INNER JOIN para obtener los datos comunes a dos o más tablas. Por ejemplo, vamos a realizar una consulta para obtener la fecha de la cita, la hora y el costa de la misma, también vamos a extraer el nombre del paciente de esa cita, su entidad federativa y el nombre del médico que va atender a ese paciente. El código para llevar a cabo esto es el siguiente.
SELECT
Citas.fechaCita, Citas.horaCita, Citas.costoCita, Pacientes.nombre, Pacientes.entidadFederativa, Medicos.nombre
FROM
(Citas
INNER JOIN
Pacientes ON Citas.idPaciente = Pacientes.idPaciente)
INNER JOIN
Medicos ON Citas.idMedico = Medicos.idMedico;
El resultado (Vista de hoja de datos) que devuelve esta consulta se muestra en la siguiente imagen.
Otra consulta que puede ser muy útil es extraer todas las citas que tiene un médico junto con datos del paciente asociado, para esto podemos usar la clausula INNER JOIN y la clausula WHERE para definir la condición de extraer solo los datos de columnas de un id de médico específico. El código de esta consulta se muestra en seguida.
SELECT
Citas.fechaCita, Citas.horaCita, Medicos.nombre, Medicos.idMedico
FROM
Citas
INNER JOIN
Medicos ON Citas.idMedico = Medicos.idMedico
WHERE
Medicos.idMedico = 1;
Esta consulta devuelve la tabla de datos que se muestra en la siguiente imagen.
También podemos hacer uso de uniones de tipo LEFT JOIN para extraer todos los médicos o pacientes que no tienen ninguna cita pero que están presentes en la base de datos, esto puede ser útil para casos como contactar a clientes con los que no se ha tenido comunicación o que no han tenido la oportunidad de asistir a la clínica y por tanto no tienen citas recientes en el sistema, o bien, puede se útil para asignar citas y pacientes a médicos que por el momento están más libres de tiempo. En seguida se proporcionan dos consultas del tipo descrito.
SELECT Pacientes.nombre, Pacientes.apellidoPaterno, Pacientes.telefono, Citas.idCita
FROM
Pacientes
LEFT JOIN
Citas ON Pacientes.idPaciente = Citas.idPaciente;
SELECT Medicos.nombre, Medicos.apellidoPaterno, Citas.idCita
FROM
Medicos
LEFT JOIN
Citas ON Medicos.idMedico = Citas.idMedico;
Los resultados de estas consultas se muestran en las siguientes imágenes.
En estas imágenes se puede ver que aquellos pacientes sin citas y médicos sin citas muestran una casilla vacía de id de citas, esto se debe a que LEFT JOIN devuelve los resultados propios de cada tabla (registros sin cita) y los comunes a ambas tablas (registros con cita).
Además, de las consultas multitabla que se usaron previamente, podemos usar RIGHT JOIN para traer todos los registros de la tabla de citas (definida como tabla derecha) junto con los registros coincidentes de la tabla de médicos o pacientes, en este caso, en el sistema todas las citas están asignadas, por tanto no se van a devolver resultados vacíos de parte de la tabla de citas. La consulta RIGHT JOIN se describe a continuación y contiene los id de cada cita pero también el nombre y apellido de cada paciente relacionado con esa cita.
SELECT citas.idCita, Pacientes.nombre, Pacientes.apellidoPaterno
FROM
Pacientes
RIGHT JOIN
Citas ON Pacientes.idPaciente = Citas.idPaciente;
El resultado devuelto por esta consulta se muestra a continuación.
Finalmente, la estructura del proyecto creada con los procesos anteriores se puede observar en la siguiente imagen, los objetos que están presentes son las tablas, consultas y los módulos que contienen los códigos de VBA.