2009-08-14 63 views
20

Tôi phải ghi lại cơ sở dữ liệu MS Access với nhiều truy vấn macro, v.v. Tôi muốn sử dụng mã để trích xuất từng truy vấn SQL vào một tệp được đặt tên giống như truy vấn, ví dụ: nếu truy vấn được đặt tên là q_warehouse_issues thì tôi muốn trích xuất SQL thành tệp có tên q_warehouse_issues.sqlSử dụng VBA để xuất tất cả truy vấn MS Access SQL sang tệp văn bản

Tôi KHÔNG MUỐN XUẤT KHẨU BỘ LẠI KẾT QUẢ NHANH, CHỈ RA SQL!

Tôi biết tôi có thể làm điều này bằng tay trong Access, nhưng tôi mệt mỏi của tất cả các nhấp vào, làm saveas, vv

+1

Cá nhân tôi chỉ xuất tên truy vấn và ghi lại những gì chúng được sử dụng. Thay vì chuỗi SQL hoàn chỉnh. Tất cả các tài liệu bị lỗi thời khá nhanh trong các tình huống như những người làm việc trên cơ sở dữ liệu có nhiều việc phải làm hơn là nhớ lưu chuỗi truy vấn mỗi khi họ thực hiện thay đổi. –

Trả lời

21

Điều này sẽ giúp bạn bắt đầu:

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 

Bạn có thể sử dụng File System Đối tượng hoặc các tính năng I/O của tệp VBA có sẵn để viết SQL ra tệp. Tôi cho rằng bạn đã hỏi nhiều hơn về cách lấy SQL hơn là về cách viết tệp, nhưng nếu bạn cần, hãy nói như vậy trong một nhận xét và tôi sẽ chỉnh sửa bài đăng (hoặc ai đó sẽ đăng câu trả lời của riêng họ) hướng dẫn cho điều đó).

+0

David, cảm ơn rất nhiều. Đó chỉ là những gì tôi cần (cách lấy SQL). Nên làm cho cuộc sống dễ dàng ... –

+0

Chỉ tìm ra cách đánh dấu nó. Nó không rõ ràng, nhưng StackOverflow là tuyệt vời! –

8

Giải pháp này bao gồm các lĩnh vực trong truy vấn

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

Vui lòng không sử dụng khối chữ ký. Có một liên kết đến hồ sơ của bạn về các câu hỏi và câu trả lời của bạn hoạt động như chữ ký của bạn trên SO. Mọi người có thể nhấp vào đó để xem tiểu sử của bạn và bạn có thể đăng bất kỳ thông tin liên hệ nào bạn muốn ở đó. –

+1

Dude, bạn không có ý tưởng bao nhiêu công việc bạn vừa lưu tôi. Cảm ơn! –

+1

Nó cần phải là 'Đối với i = 0 Để CurrentDb.QueryDefs.Count - 1' không' TableDefs' – noway

3
  1. Trong cửa sổ VB, nhấp Tools->References....
  2. Trong cửa sổ tài liệu tham khảo thêm các phụ thuộc Microsoft Scripting Runtime bằng cách kiểm tra nó đi.

Sau đó, mã này sẽ xuất khẩu các truy vấn vào một tập tin thích hợp cho việc sử dụng grep trên:

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

Hope this helps.

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 
Các vấn đề liên quan