visual run query ejemplos codigos vba ms-access access-vba ms-access-2007

vba - run - QueryDefs devuelve ~ sq_rrptStatTabRout



ms access vba run query (2)

Situación: necesito buscar el primer campo de cada consulta. Después de crear el código que figura a continuación y ejecutarlo, recibí la siguiente Debug.Print :

~sq_rrptStatTabRout qryBridgeSub qryCentTabRout

Esperaba que los dos últimos se imprimieran, pero no estoy particularmente seguro de por qué lo hizo el primero, ya que rptStatTabRout existe en la base de datos como un informe.

Pregunta: ¿Hay una manera simple de explicar esto o deshacerse de él?

Código:

Private Sub Command47_Click() Dim db As DAO.Database Dim rs As DAO.Recordset Dim queries As DAO.QueryDefs Dim query As DAO.QueryDef Dim queryname As String Dim fld As DAO.Field Set db = CurrentDb Set queries = db.QueryDefs '' loop through each query For Each query In queries On Error Resume Next queryname = query.name Debug.Print queryname Set rs = CurrentDb.OpenRecordset("SELECT * FROM " & queryname & "", dbOpenDynaset) fld = rs.Fields(0).name MsgBox fld Next End Sub


En primer lugar, lamento mucho ejecutar tu código antes de darte cuenta de que ejecutas cada consulta. Hecho para momentos interesantes ya que tengo más de 50 consultas.

Modifiqué tu código para ayudar a explicar lo que está sucediendo, el código está limitado a 10 iteraciones porque parece que las consultas guardadas se muestran primero y se expulsaron de mi ventana inmediata.

Public Function Test() Dim db As DAO.Database Dim rs As DAO.Recordset Dim queries As DAO.QueryDefs Dim query As DAO.QueryDef Dim queryname As String Dim fld As DAO.Field Set db = CurrentDb Set queries = db.QueryDefs Dim i As Integer i = 0 '' loop through each query For Each query In queries On Error Resume Next If i < 10 Then Debug.Print query.Name Debug.Print query.SQL i = i + 1 End If Next End Function

Si ejecuta eso, puede ver el SQL real que encontró en su informe rptStatTabRout . Esto se debe a que hay más consultas en QueryDefs que solo las que ve en su panel de navegación.

En su ejemplo, eche un vistazo a RecordSource para su informe y sospecho que encontrará una consulta escrita. Incluso encontrará sql en el RowSource para comboboxes también.


Parece que quiere ignorar las consultas guardadas cuyos nombres comienzan con ~ . Use una condición If para ignorarlos.

If Not query.Name Like "~*" Then '' find the first field End If

Tenga en cuenta que si desea limitar la evaluación solo a las consultas SELECT , verifique la propiedad .Type cada consulta. Una consulta SELECT es tipo dbQSelect (0). Compruebe el tema QueryDef.Type Property en el sistema de ayuda de Access en caso de que desee procesar otros tipos de consultas.

Si se pregunta de dónde salió esa consulta ~ sq_rrptStatTabRout , marque la propiedad Record Source de su informe rptStatTabRout . Cuando la fuente es una instrucción SELECT , Access guarda la declaración como una consulta oculta. El prefijo ~ evita que se muestre en el panel de navegación.

Lo mismo sucede cuando usa una instrucción SELECT como origen de fila para un combo o cuadro de lista.