Como insertar el valor resultante de una consulta access en un msgbox hecho con macro?

Necesito mediante una macro ejecutar dos consultas de accion en una bd access. Pero antes de ejecutarlas desde un boton, quiero decirle al usuario cuantos registros se van a modificar con un select count. Es posible hacerlo, ¿o necesariamente tiene que ser por codigo? ¿Cómo se hace?

2 respuestas

Respuesta
1

Guillermo, una macro no es más que un trozo de código, para realizar operaciones básicas, al que le han puesto un nombre en "cristiano". Además, ¿para que crear consultas para modificar datos cuando puedes modificar directamente las tablas origen de esas consultas. Habría que saber como determinas los registros que se van a cambiar. Te pongo un ejemplo. Tengo la tabla Clientes con sus países

En un formulario tengo un botón, pero podría ponerse la instrucción en cualquier evento.

Voy a decirle que me diga cuantos registros hay con país=Alemania y luego que me cambie en dichos registros Alemania por Senegal.

Cuando pulso el botón

Y al Aceptar me deja la tabla como

Puedes ver que donde antes estaba Alemania ahora está Senegal ( kilómetro arriba, kilómetro abajo)

En este caso el código del evento Al hacer clic del botón es

Private Sub Comando94_Click()
Dim b As Integer
b = DCount("*", "clientes", "pais=""Alemania""")
MsgBox "Se van a cambiar " & b & " registros", vbOKOnly, "Luego no digas que no te avisé"
DoCmd.RunSQL "update clientes set pais=""Senegal"" where pais=""Alemania"""
End Sub

En el caso de que quisieras usar consultas de acción tendrías que poner

msgbox....

Docmd. Openquery "consulta1"

Docmd. Openquery "consulta2"

Respuesta
1

Tal como ha sido planteado, parece un ejercicio de aprendizaje por lo que la respuesta debe de ser el resultado de lo que se aprendió en esa etapa, parece que la etapa actual es MACROS:

Las macros hacen lo que le indiquemos que hagan y condicionado a que se pueda hacer (que lo entienda Access) para hacerlo 'aunque no lo entienda' está el VBA)

Una consulta de actualización se parecería a esto:

UPDATE CONTROL SET CONTROL.A1 = 10 WHERE (((CONTROL.A1)>10));

La misma consulta (en el editor grafico de consultas) pero de selección:

SELECT CONTROL.A1 FROM CONTROL WHERE (((CONTROL.A1)>10));

Si queremos que cuente los registros, se necesita contar los resultados de la consulta anterior, dos métodos:

.- Uno utilizando la anterior consulta de selección guardada bajo el nombre de 'consulta1'

SELECT Count(*) AS Total FROM Consulta1;

.- Dos, en la propia consulta (recordemos que los paréntesis imponen el orden de ejecución)

SELECT Count(*) AS Total FROM (SELECT CONTROL.A1 FROM CONTROL WHERE (((CONTROL.A1)>10)));

Pero la consulta no retorna un dato de forma directa, se ha de utilizar un recordset o un 'recordset encapsulado' esto es: una función de dominio por ejemplo DCount para asignarlo (incluso a un MsgBox):

MsgBox DCount("*"; "CONTROL"; "CONTROL.A1 >10")

Siguiendo con el supuesto de que es un ejercicio sobre MACROS. solo añadir que las acciones de macro son más de las que se ven a primera vista, hay que expandirlas para que se muestren todas las acciones y las opciones de flujo:
.- Presentar el cálculo de los recordset afectados
.- Preguntar si se desean hacer el ajuste
.- Ejecutarlo o no en función de la respuesta del usuario

.- Presentar el segundo cálculo de resultados ... (repetir lo anterior tantas veces como se necesite), eso si, la acción 'abrir consulta' exige que la consulta (o consultas) estén creadas con anterioridad.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas