2015-08-31 60 views
0
Private Sub txtExportCleanRecords_Click() 

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

End Sub 

我在访问报告上创建了一个按钮,并试图导出已经创建的查询。查询的目的是收集已经验证和批准的数据,因此数据库不会变得麻烦。该报告按日期范围筛选已批准的数据,我只需导出与报告匹配的记录。因此,查询ID必须与报告ID匹配,并且我只需要导出与报告ID匹配的记录。到目前为止,我的报告所做的是导出整个查询,我无法弄清楚如何在Command acOutputQuery中放置一个where子句来过滤导出。关于如何调整我的代码以便我可以根据与查询ID相匹配的报告ID导出的任何想法?之后我定的SQL语句,不同的是,vMayClean.LogID正的数据相比从报告中导出查询以访问excel参数

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 

一切工作正常。

"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

回答

0

这并不直接合作。 DoCmd.OpenFormDoCmd.OpenReport有一个参数WhereCondition,但DoCmd.OutputToDoCmd.TransferSpreadsheet没有。

最简单的方法是有一个“导出查询”,其中您动态地将其SQL属性设置为过滤列表。使用虚拟SQL手动创建此查询,之后SQL将被每个导出覆盖。

由艾伦·布朗从newsgroup post改编:

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]") 

+0

那么,如果没有错误,那是件好事,不是吗? :p ---除了笑话,有两个明显的可能性:1.您没有创建选择查询“ExportQuery”,2.您没有修改SQL。 '“WHERE QueryID =”&Me.ReportID'只是我的猜测。 – Andre

+0

CurrentDb.QueryDefs(strcExportQuery).SQL = S会导致以下错误:在此集合中找不到运行时错误'3265'此外,Me.ReportID会导致报告仅调用顶部ID,而不是所有报告ID @ Andre451 –

+0

我的评论中都提到了这两个问题。如果您需要2的帮助,则需要发布有关表格和查询的更多信息以及一些示例数据。我们现在所能做的只是猜测。 – Andre