簡體   English   中英

從報表中導出查詢以使用參數訪問Excel

[英]Export query from a report in access to excel with parameters

Private Sub txtExportCleanRecords_Click()

DoCmd.OutputTo acOutputQuery, "vCleanRecordsExport", "Excel97- Excel2003Workbook(*.xls)", "", 
True, "", , acExportQualityPrint    

End Sub

我在訪問報告上創建了一個按鈕,並且嘗試導出已經創建的查詢。 查詢的目的是收集已經驗證和批准的數據,因此數據庫不會變得很麻煩。 報告按日期范圍過濾了批准的數據,我只需要導出與報告匹配的記錄。 因此,查詢ID必須與報告ID匹配,並且我只需要導出與報告ID匹配的記錄。 到目前為止,我的報告所做的只是導出整個查詢,我無法弄清楚如何在acOutputQuery命令上放置where子句以過濾導出。 關於如何調整代碼以便可以根據與查詢ID匹配的報表ID進行導出的任何想法?

Private Sub txtExportCleanRecords_Click()

Const strcExportQuery = "ExportQuery"    ' Name of the query for exports.
Dim S As String
Dim strFile As String

' Adapt to your actual fields / filter
S = "SELECT vMayClean.LogID As 'CleanRecordsID', vMayClean.[Mark Read],    vMayClean.[Report Available], vMayClean.[Has Images], vMayClean.[Performing Resource], vMayClean.Org, " & _
"vMayClean.[Exam Date/Time], vMayClean.[Patient Nam], vMayClean.[Accession  #], vMayClean.MRN, vMayClean.Modality, vMayClean.[Exam Description], vMayClean.[Exam Status], " & _
"vMayClean.[Referring Phys], vMayClean.[Ordering Location], vMayClean.COMMENTS, vMayClean.STATUS, vMayClean.Exceptions, vMayClean.CR, vMayClean.[CPU/ Spreadsheets], vMayClean.PACs, vMayClean.Facility, " & _
"CodeRyteID, [Patient MRN], [Patient Name], [Account Number], [Patient DOB],[Signing Physician Location], [Referring Physician], [Pri Ins Name], " & _
"[Accident Code], [Accident Event], [Accident Date], [Admit Date], [Signing Physician], [Date Of Service], Service, [Stay Type], " & _
"[Accession Number], [Order CPT], [CPT Annotation], CPT4, Modifiers, ICD1, ICD2, ICD3, ICD4, [ICD10-1], [ICD10-2], " & _
"[ICD10-3], [ICD10-4], Units, [Override Queue Level], [Manual Route Queue], [Note Handle] FROM vCleanRecordsExport " & _
"WHERE vMayClean.LogID = " & Me.ID
' Set SQL of export query. This is all it takes, no explicit "Save" needed.
CurrentDb.QueryDefs(strcExportQuery).SQL = S

strFile = "T:\Users\Reuben\Reconciliation Testing\ExportQuery"
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9,   strcExportQuery, strFile
DoCmd.OutputTo acOutputQuery, "ExportQuery", "Excel97-Excel2003Workbook (*.xls)", "", True, "", , acExportQualityPrint

DoCmd.OpenQuery "vCleanRecordsDelete", acViewNormal, acEdit

End Sub

修復SQL語句后,除了將vMayClean.LogID與之進行比較的數據外,其他所有內容均正常運行。

"Where vMayClean.LogID = " & Me.ID

此行代碼將查詢ID僅與當前報告ID進行比較。 我需要的是導出包含與所有報告ID匹配的所有查詢ID,而不僅僅是一個。 讓我知道是否需要提供其他信息。

新編輯

我添加了用於過濾報告的代碼。 該報告使用vCleanRecords查詢,並且我正在導出vCleanRecordsExport查詢,該查詢應該具有vCleanRecords查詢中的所有記錄,但是包含更多數據,因為我正在導出以從數據庫中刪除。 該報告是根據與服務日期匹配的開始日期和結束日期進行過濾的。

我了解您在說讓where子句與日期過濾器where子句匹配,但是我該如何調整它使其適用於報表呢?

Dim strReport As String
Dim StrDateField As String
Dim strWhere As String
Const strcDateConst = "\#mm\/dd\/yyyy\#"

strReport = "rptCleanRecords"
StrDateField = "[DateOfService]"

If IsDate(Me.txtStartDate) Then
strWhere = "(" & StrDateField & " >= " & Format(Me.txtStartDate,  strcDateConst) & ")"
End If

If IsDate(Me.txtEndDate) Then
If strWhere <> vbNullString Then
    strWhere = strWhere & " AND "
End If
strWhere = strWhere & "(" & StrDateField & " < " & Format(Me.txtEndDate + 1, strcDateConst) & ")"
End If

DoCmd.OpenReport strReport,acViewReport,strWhere,strWhere

這不直接起作用。 DoCmd.OpenFormDoCmd.OpenReport具有參數WhereCondition ,但DoCmd.OutputToDoCmd.TransferSpreadsheet沒有。

最簡單的方法是擁有一個“導出查詢”,您可以在其中將其SQL屬性動態設置為過濾后的列表。 使用虛擬SQL手動創建此查詢,此后每次導出都會覆蓋該SQL。

摘自艾倫·布朗的新聞組帖子

Const strcExportQuery = "ExportQuery"    ' Name of the query for exports.
Dim S As String
Dim strFile As String

' Adapt to your actual fields / filter
S = "SELECT * FROM vCleanRecordsExport " & _
    "WHERE QueryID = " & Me.ReportID
' Set SQL of export query. This is all it takes, no explicit "Save" needed.
CurrentDb.QueryDefs(strcExportQuery).SQL = S

strFile = "C:\Data\MyExport.xls"
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, strcExportQuery, strFile

編輯:
也許我開始理解“報告ID”和“查詢ID”的含義。
您的報告列出了一些記錄,按日期過濾?
導出查詢應該導出相同的記錄集(即具有相同ID的記錄)嗎?

然后: 報告的記錄源是什么?

如果是這樣的話

SELECT Fields FROM Table WHERE someDate BETWEEN x AND y

那么您應該對導出查詢使用相同的過濾器或WHERE子句( someDate BETWEEN x AND y )。

如果我錯了:報告的ID來自何處?


編輯2
因此,您已經在構造WHERE字符串(strWhere),並將其作為OpenArgs傳遞給報表。

然后,您可以簡單地使用該字符串而不是vMayClean.LogID = " & Me.ID

您在導出代碼中的字段為[Date Of Service]
在報告代碼中為StrDateField = "[DateOfService]"
如果無法在兩個查詢中使用相同的名稱,則可以執行

strWhere = Replace(Me.OpenArgs, "[DateOfService]", "[Date Of Service]")

在導出代碼中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM