Asignar resultado de una consulta a una variable

Desearía saber como asignar resultado de una consulta a una variable.
Respuesta
1
Solo se me ocurre ponerte dos ejemplos del tema:
Sub UpdateX()
Dim dbs As Database
Dim qdf As QueryDef
Set dbs = CurrentDb
' Cambia el valor del campo ReportsTo a 5 de todos
' aquellos registros de empleados que actualmente
' tienen el valor 2 en ReportsTo.
dbs.Execute "UPDATE Empleados " _
& "SET Cargo = peon " _
& "WHERE Cargo = administrador;"
dbs.Close
End Sub
Function inventario()
Dim db As Database
Dim Q As QueryDef
Set db = CurrentDb()
Set Q = db.QueryDefs("Inventario")
Q!ParamIdProducto = Forms!Pedidos![Subformulario Pedidos].Form![IdProducto]
Q!ParamQtyShipped = Forms!Pedidos![Subformulario Pedidos].Form![Cantidad]
Q.Execute
Q.Close
End Function
NOTA: esta ultima función la uso para descontar productos del stock de existencias.
Varias dudas:
Los tipos Database y QueryDef no me los reconoce.
Y otra cosa mi pregunta se refería más a:
Por ejemplo definir una consulta:
SQL="SELECT * FROM STOCK"
Y ejecutarla y asignar a una variable los resultados de esa consulta.
Resultado <- ejecuta(SQL)
Gracias
Los ejemplos descritos anteriormente son de la versión 7.0 y es posible que necesites marcar una Referencia a Microsoft DAO 2.5/3.5 Compatibility Library.
Bien, como entre ejecutar y abrir una consulta no veo la diferencia, te paso otro ejemplo de código, se usa la tabla Productos aunque es válido para una consulta:
Sub FindFirstX()
'se necesita la función EncontrarCualquiera
Dim dbsNeptuno As Database
Dim rstClientes As Recordset
Dim strPaís As String
Dim varMarcador As Variant
Dim strMensaje As String
Dim intComando As Integer
Set dbsNeptuno = CurrentDb
Set rstClientes = dbsNeptuno.OpenRecordset( _
"SELECT IdProducto, UnidadesEnExistencia, NivelNuevoPedido ,NombreProducto " & _
"FROM Productos ORDER BY NombreProducto", _
dbOpenSnapshot)
Do While True
' Obtiene una entrada del usuario y construye la cadena de búsqueda.
strPaís = Forms!Pedidos![Subformulario Pedidos].Form![NombreProducto]
strPaís = "NombreProducto = '" & strPaís & "'"
With rstClientes
' Llena el Recordset.
.MoveLast
' Encuentra el primer registro que coincide
' Con la cadena de búsqueda. Sale del bucle si no existe ningún registro.
.FindFirst strPaís
If rstClientes!UnidadesEnExistencia >= rstClientes!NivelNuevoPedido Then
'Criterio para advertir stock bajo. Usar form Productos
Exit Do
End If
Do While True
' Almacena el marcador de posición del registro actual.
varMarcador = .Bookmark
' Obtiene la elección del usuario del método a utilizar.
strMensaje = "Id: " & !IdProducto & _
vbCr & "Nivel de Unidades en almacén bajo: " & !UnidadesEnExistencia & _
vbCr & _
strPaís
intComando = Val(Left(MsgBox(strMensaje), 1))
If intComando = 1 Then Exit Do 'es = 1 porque va a encontrar el 1º por la
'variable strPaís
' Utiliza el método Find seleccionado. Si
' falla Find, vuelve al último registro actual.
If EncontrarCualquiera(intComando, rstClientes, _
strPaís) = False Then
.Bookmark = varMarcador
MsgBox "No hay coincidencias -volviendo al " & _
"registro actual."
End If
Loop
End With
Exit Do
Loop
rstClientes.Close
End Sub
Function EncontrarCualquiera(intChoice As Integer, _
rstTemp As Recordset, _
strEncontrar As String) As Boolean
' Utiliza el método Find basado en la entrada del usuario.
' Se deja el resto de Case aunque solo se utiliza el primero. Estoy seguro
' que si encontrara un rstTemp.
Select Case intChoice
Case 1
rstTemp.FindFirst strEncontrar
Case 2
rstTemp.FindLast strEncontrar
Case 3
rstTemp.FindNext strEncontrar
Case 4
rstTemp.FindPrevious strEncontrar
End Select
' Establece el valor devuleto basado en la propiedad NoMatch.
EncontrarCualquiera = IIf(rstTemp.NoMatch, False, True)
End Function

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas