Ms access 设置报表的数据源

Ms access 设置报表的数据源,ms-access,vba,ms-access-2010,Ms Access,Vba,Ms Access 2010,我试图在Access窗体中创建一个按钮,它将运行两个查询,然后获取结果记录集并将它们放入报告中。我已经到了按钮将调用模块的地步,它创建适当的记录集,然后创建报告。但是,报告是空白的,其中没有来自记录集的数据。我认为我的问题是,我没有正确分配报告的数据源,但我不知道如何解决这一问题 Private Function showReport(sectionHeading As String, SQL As String, recordset As ADODB.Recordset) Dim textBo

我试图在Access窗体中创建一个按钮,它将运行两个查询,然后获取结果记录集并将它们放入报告中。我已经到了按钮将调用模块的地步,它创建适当的记录集,然后创建报告。但是,报告是空白的,其中没有来自记录集的数据。我认为我的问题是,我没有正确分配报告的数据源,但我不知道如何解决这一问题

Private Function showReport(sectionHeading As String, SQL As String, recordset As ADODB.Recordset)
Dim textBox As Access.textBox ' textbox control
Dim label As Access.label ' label control
Dim report As report ' hold report object
Dim controlTop As Long ' holds top value of control position
Dim controlLeft As Long ' holds left value of control position
Dim title As String 'holds title of report
Dim i As Integer 'iterator
i = 0

title = sectionHeading

controlLeft = 0
controlTop = 0

Set report = CreateReport

report.Width = 8500
report.Caption = title

Set label = CreateReportControl(report.Name, acLabel, _
acPageHeader, , "Title", 0, 0)
label.FontBold = True
label.FontSize = 12
label.SizeToFit

For Each fld In recordset.fields
    Set textBox = CreateReportControl(report.Name, acTextBox, _
    acDetail, , fld.Name, controlLeft + 1500, controlTop)
    textBox.SizeToFit

    Set label = CreateReportControl(report.Name, acLabel, acDetail, _
    textBox.Name, fld.Name, controlLeft, controlTop, 1400, textBox.Height)
    label.SizeToFit

    controlTop = controlTop + textBox.Height + 25

    i = i + 1
Next

Set label = CreateReportControl(report.Name, acLabel, _
acPageFooter, , Now(), 0, 0)

Set textBox = CreateReportControl(report.Name, acTextBox, _
acPageFooter, , "='Page ' & [Page] & ' of ' & [Pages]", report.Width - 1000, 0)
textBox.SizeToFit

report.RecordSource = SQL

DoCmd.OpenReport report.Name, acViewPreview

recordset.Close
Set recordset = Nothing
Set report = Nothing
End Function

我得说你漏掉了一行

report.RecordSource=填充的查询 但我很确定,一定有比从头开始创建新报告更好的方法来实现您的目标

而且,将变量命名为数据类型标签、报告等是很容易出错的

编辑

您确定您的SQL是有效的吗?或者,您可以尝试将其保存为查询并传递查询名称

我做了一个小测试,基本上可以用。当我运行此命令时,r\tbProduct的记录源为空:

Dim rep As报告 DoCmd.OpenReport r\u tbProduct,acViewDesign 设置rep=报告!产品 rep.RecordSource=从tbProduct中选择*,其中ID>=6 DoCmd.OpenReport r\u tbProduct,acViewPreview 它显示了正确的数据

我再次强烈建议您重命名变量

作为报告的Dim报告
只是在问问题。

您将数据源设置为什么?在这里,您没有显示这一点—它是查询还是表—如果是查询,SQL是什么?如果您自己打开报告-是否有包含数据的页面?什么是CreateReport和CreateReportControl?您使用的是什么版本的MS Access?请更新您的标记。问题是我没有找到任何方法从报表外部的模块设置数据源。目的是使数据源成为一个查询。当我运行它时,报告以正确的格式打开,但没有任何数据,只有名称?在每一个领域。@dbmitch:它们是:和。通常使用这些方法构建向导@dbmitch:所有MSDN页面都是这样的。点击其他版本,ta da:我已经在中添加了这个,但现在它给了我一条错误消息,Microsoft Access数据库无法访问DoCmd.OpenReport行上的对象。此错误消息后面是我正在使用的SQL字符串。您到底添加了什么?请编辑您的问题。已编辑。我向函数和您建议设置recordsource的行中添加了一些新参数。添加recordsource行后,我开始出现错误:Microsoft Access数据库引擎找不到对象“SELECT…”。。。SQL字符串“”的其余部分。请参见编辑。不确定SQL是否有效。