2016-07-12 3 views
-1

Я пытаюсь сделать кнопку в форме доступа, которая будет запускать пару запросов, а затем взять результирующие наборы записей и поместить их в отчеты. Я дошел до того момента, когда кнопка вызывается модулем, он создает соответствующие наборы записей, а затем создает отчеты. Тем не менее, отчеты пустые, у них нет данных в них из наборов записей. Я думаю, что моя проблема в том, что я неправильно назначил источник данных для отчетов, но я не могу понять, как это сделать.Настройка источника данных для отчета

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 
+0

К чему вы настроили свой источник данных? Вы не показываете, что здесь - это запрос или таблица - что такое SQL, если это запрос? Если вы откроете отчет сам по себе - есть ли какие-либо страницы с данными? Что такое «CreateReport» и «CreateReportControl»? – dbmitch

+1

Какую версию MS-Access вы используете - пожалуйста, обновите свои теги – dbmitch

+0

Ну, проблема в том, что я не нашел способа установить источник данных из внешнего модуля для отчета. Цель состоит в том, чтобы источник данных был запросом. Когда я запускаю его, отчет открывается с правильным форматированием, но без каких-либо данных просто #Name? в каждом поле. – Ulthran

ответ

2

Я бы сказал, что вам не хватает строку

report.RecordSource = "the query that fills <recordset>" 

Но я уверен, что должно быть лучшим способом для достижения этой цели, чем создание нового отчета с нуля ,

И это к ошибкам назвать переменные, как и их типы данных (label, report ...)


Редактировать

Вы уверены, что ваш SQL является действительным? Кроме того, вы можете попробовать сохранить его в качестве запроса и передать имя запроса.

Я сделал небольшой тест, он должен работать в основном. r_tbProduct имеет пустой RecordSource, когда я запускаю это:

Dim rep As Report 

DoCmd.OpenReport "r_tbProduct", acViewDesign 
Set rep = Reports!r_tbProduct 
rep.RecordSource = "SELECT * FROM tbProduct WHERE ID >= 6" 
DoCmd.OpenReport "r_tbProduct", acViewPreview 

Это показывает правильные данные.

Опять же, я настоятельно рекомендую вам переименовать переменные.

Dim report As report 

просто спрашивает о проблемах.

+0

Я добавил это, но теперь он дает мне сообщение об ошибке, что Microsoft Access Database не может получить доступ к объекту в строке DoCmd.OpenReport. Это сообщение об ошибке сопровождается строкой SQL, которую я использую. – Ulthran

+1

Что именно вы добавили? Пожалуйста, отредактируйте свой вопрос. – Andre

+0

Отредактировано. Я добавил некоторые новые параметры функции и строку, которую вы предложили установить источник записи. После добавления строки источника записи я начал получать ошибку: механизм базы данных Microsoft Access не смог найти объект «SELECT ... (остальная часть строки SQL)». – Ulthran

Смежные вопросы