Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用参数从access to excel中的报表导出查询_Sql_Excel_Ms Access_Export_Report - Fatal编程技术网

Sql 使用参数从access to excel中的报表导出查询

Sql 使用参数从access to excel中的报表导出查询,sql,excel,ms-access,export,report,Sql,Excel,Ms Access,Export,Report,我在access报告上创建了一个按钮,并尝试导出已创建的查询。查询的目的是收集已经过验证和批准的数据,这样数据库就不会变得麻烦。报告按日期范围过滤批准的数据,我只需要导出与报告匹配的记录。因此,查询ID必须与报表ID匹配,我只需要导出与报表ID匹配的记录。到目前为止,我的报表所做的只是导出整个查询,我不知道如何在命令acOutputQuery上放置where子句以过滤导出。关于如何调整代码,以便根据与查询ID匹配的报表ID进行导出,有什么想法吗 Private Sub txtExportClea

我在access报告上创建了一个按钮,并尝试导出已创建的查询。查询的目的是收集已经过验证和批准的数据,这样数据库就不会变得麻烦。报告按日期范围过滤批准的数据,我只需要导出与报告匹配的记录。因此,查询ID必须与报表ID匹配,我只需要导出与报表ID匹配的记录。到目前为止,我的报表所做的只是导出整个查询,我不知道如何在命令acOutputQuery上放置where子句以过滤导出。关于如何调整代码,以便根据与查询ID匹配的报表ID进行导出,有什么想法吗

Private Sub txtExportCleanRecords_Click()

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

End Sub
在修复SQL语句后,除了与vMayClean.LogID进行比较的数据外,其他一切都正常工作

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
这行代码仅将查询ID与当前报表ID进行比较。我需要的是导出包含与所有报表ID匹配的所有查询ID,而不仅仅是一个。如果我需要提供更多信息,请告诉我

新编辑

我添加了过滤报告的代码。报告使用vCleanRecords查询,我正在导出vCleanRecordsExport查询,该查询应该包含vCleanRecords查询中的所有记录,但包含更多数据,因为我正在导出以从数据库中删除。根据与服务日期匹配的开始和结束日期筛选报告

我理解您关于where子句与date filter where子句匹配的说法,但我如何调整它使其适用于报表

"Where vMayClean.LogID = " & Me.ID

DoCmd.OpenReport strReport、acViewReport、strWhere、strWhere

这不能直接工作。DoCmd.OpenForm或DoCmd.OpenReport有一个参数WhereCondition,但DoCmd.OutputTo或DoCmd.TransferSpreadsheet没有

最简单的方法是使用导出查询,您可以在其中动态地将其SQL属性设置为筛选列表。使用伪SQL手动创建此查询,之后每次导出都会覆盖该SQL

改编自艾伦·布朗的小说:

Const strexportquery=ExportQuery“导出查询的名称”。 像线一样变暗 作为字符串的Dim strFile '适应您的实际字段/过滤器 S=从vCleanRecordsExport&_ 其中QueryID=&Me.ReportID '设置导出查询的SQL。这就是所需要的,不需要显式保存。
CurrentDb.QueryDefstrExportQuery.SQL=S strFile=C:\Data\MyExport.xls DoCmd.transfer电子表格acExport,acSpreadsheetTypeExcel9,strExportQuery,strFile 编辑: 也许我开始明白你所说的报表ID和查询ID是什么意思了。 您的报告列出了许多记录,按日期过滤? 导出查询应该导出同一组记录,即具有相同ID的记录

那么:报告的记录来源是什么

"Where vMayClean.LogID = " & Me.ID
如果是这样的话

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
然后,您应该使用相同的筛选器或WHERE子句在x和y之间的某个日期进行导出查询

如果我错了:报告的ID来自哪里

编辑2 因此,您已经在构建WHERE字符串strWhere,并将其作为OpenArgs传递给报表

然后您可以简单地使用该字符串而不是vMayClean.LogID=&Me.ID

导出代码中的字段为[服务日期], 在报告代码中为StrDateField=[DateOfService]。 如果不能在两个查询中使用相同的名称,可以这样做

SELECT Fields FROM Table WHERE someDate BETWEEN x AND y

在导出代码中。

如果没有错误,那是件好事,不是吗撇开玩笑不谈,有两个明显的可能性:1。您没有创建选择查询ExportQuery和2。您没有调整SQL。其中QueryID=&Me.ReportID只是我的猜测。CurrentDb.QueryDefstrExportQuery.SQL=S会导致以下错误:运行时错误“3265”项未在此集合中找到。此外,Me.ReportID会导致报表仅调用顶级ID,而不是所有报表ID的@Andre451。这两个问题都会在我的注释中解决。如果您需要2.的帮助,则需要发布有关表和查询的更多信息,以及一些示例数据。目前我们所能做的就是猜测。我提供了一个编辑,提供了关于什么工作正常以及我还需要什么的更详细信息。非常感谢您在这个问题上的帮助@Andre451编辑了一个建议和更多问题。我想我们正在取得进展