2009-08-14 37 views
20

Tengo que documentar una base de datos de MS Access con muchas consultas de macros, etc. Deseo usar código para extraer cada consulta SQL a un archivo que se llame igual la consulta, por ejemplo, si una consulta se llama q_warehouse_issues, entonces deseo extraer el SQL a un archivo llamado q_warehouse_issues.sqlUso de VBA para exportar todas las consultas SQL de MS Access a archivos de texto

¡NO DESEO EXPORTAR EL CONJUNTO DE RESULTADOS DE LA CONSULTA, SÓLO EL SQL!

sé que puedo hacerlo de forma manual en Access, pero estoy cansado de todo el clic, haciendo saveas etc.

+1

Personalmente, solo exportaría los nombres de las consultas y documentaría para qué se utilizan. En lugar de la cadena SQL completa. Toda la documentación se desactualiza rápidamente en tales situaciones, ya que las personas que trabajan en la base de datos tienen cosas mucho mejores que hacer que recordar guardar la cadena de consulta cada vez que realizan cambios. –

Respuesta

21

Esto debería empezar:

Dim db As DAO.Database 
    Dim qdf As DAO.QueryDef 

    Set db = CurrentDB() 
    For Each qdf In db.QueryDefs 
    Debug.Print qdf.SQL 
    Next qdf 
    Set qdf = Nothing 
    Set db = Nothing 

Puede utilizar el sistema de archivos Objeto o las funciones integradas de E/S de archivo VBA para escribir el SQL en un archivo. Supongo que estaba preguntando más sobre cómo obtener el SQL que sobre cómo escribir el archivo, pero si lo necesita, dígalo en un comentario y lo editaré (o alguien publicará su propia respuesta con instrucciones para eso).

+0

David, muchas gracias. Eso es justo lo que necesitaba (cómo obtener el SQL). Debería hacer la vida más fácil ... –

+0

Acabo de enterarme de cómo marcarlo. No fue obvio, ¡pero StackOverflow es genial! –

8

Esta solución incluyen campos de consulta

Public Sub ListQueries() 
    ' Author:      Date:    Contact: 
    ' André Bernardes    09/09/2010 08:45 [email protected]  http://al-bernardes.sites.uol.com.br/ 
    ' Lista todas as queries da aplicação. 
    ' Listening: 

    Dim i As Integer 
    Dim j As Integer 
    Dim k As Integer 
    Dim l As Integer 

    On Error Resume Next 

    For i = 0 To CurrentDb.QueryDefs.Count - 1 
     Debug.Print "Query: " & CurrentDb.QueryDefs(i).Name 

     For j = 0 To CurrentDb.QueryDefs(i).Fields.Count - 1 
      Debug.Print "Field " & CurrentDb.QueryDefs(i).Fields(j).Name 
     Next 

     Debug.Print " SQL: " & CurrentDb.QueryDefs(i).SQL 
    Next 
End Sub 
+4

Por favor, no use un bloque de firma. Hay un enlace a su perfil en sus preguntas y respuestas que actúa como su firma en SO. La gente puede hacer clic en eso para ver su perfil, y puede publicar la información de contacto que desee allí. –

+1

Amigo, no tienes idea de cuánto trabajo me acabas de salvar. ¡Gracias! –

+1

Tiene que ser 'Para i = 0 A CurrentDb.QueryDefs.Count - 1' no' TableDefs' – noway

3
  1. En la ventana de VB, haga clic en Tools->References....
  2. En la ventana Referencias agregar la dependencia Microsoft Scripting Runtime comprobando si fuera poco.

A continuación, este código será exportar las consultas en un archivo conveniente para usar grep en:

Sub ExportQueries() 

    Dim fso As New FileSystemObject 

    Dim stream As TextStream 

    Set stream = fso.CreateTextFile("e:\temp\queries.txt") 

    Dim db As DAO.Database 
    Dim qdf As DAO.QueryDef 

    Set db = CurrentDb() 
    For Each qdf In db.QueryDefs 

    stream.writeline "Name: " & qdf.Name 
    stream.writeline qdf.SQL 
    stream.writeline "--------------------------" 
    Next qdf 
    Set qdf = Nothing 
    Set db = Nothing 

End Sub 
11

Espero que esto ayude.

Public Function query_print() 
Dim db As Database 
Dim qr As QueryDef 

Set db = CurrentDb 

For Each qr In db.QueryDefs 
    TextOut (qr.Name) 
    TextOut (qr.SQL) 
    TextOut (String(100, "-")) 
Next 
End Function 

Public Sub TextOut(OutputString As String) 

    Dim fh As Long 

    fh = FreeFile 
    Open "c:\File.txt" For Append As fh 
    Print #fh, OutputString 
    Close fh 

End Sub 
Cuestiones relacionadas