2016-07-12 14 views
-1

Ich versuche, eine Schaltfläche in einem Access-Formular zu erstellen, das einige Abfragen ausführt und dann die resultierenden Re-Cord-Sets nimmt und sie in Berichten ablegt. Ich bin an den Punkt gelangt, an dem die Schaltfläche das Modul aufruft, die richtigen Recordsets erstellt und dann die Reports erstellt. Die Berichte sind jedoch leer, sie enthalten nicht die Daten aus den Recordsets. Ich denke, mein Problem ist, dass ich die Datenquelle der Berichte nicht richtig zugeordnet habe, aber ich kann nicht herausfinden, wie das geht, wenn dies der Fall ist.Einstellen der Datenquelle für einen Bericht

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

Worauf haben Sie Ihre Datenquelle eingestellt? Sie zeigen das hier nicht - ist es eine Abfrage oder Tabelle - was ist das SQL, wenn es Abfrage ist? Wenn Sie den Bericht selbst öffnen - gibt es Seiten mit Daten? Was ist "CreateReport" und "CreateReportControl"? – dbmitch

+1

Welche Version von MS-Access verwenden Sie - bitte aktualisieren Sie Ihre Tags – dbmitch

+0

Nun, das Problem ist, dass ich keine Möglichkeit gefunden habe, die Datenquelle von einem Modul außerhalb des Berichts zu setzen. Die Datenquelle soll eine Abfrage sein. Wenn ich es ausführe, wird der Bericht mit der richtigen Formatierung geöffnet, aber ohne die Daten, nur #Name? in jedem Bereich. – Ulthran

Antwort

2

Ich würde sagen, dass Sie eine Zeile wie

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

Aber ich bin mir ziemlich sicher, dass es einen besseren Weg, um Ihr Ziel zu erreichen, als einen neuen Bericht von Grund auf neu erstellen .

Und es ist fehleranfällig Ihre Variablen wie ihre Datentypen zu nennen (label, report, ...)


bearbeiten

Sind Sie sicher, dass Ihre SQL gültig ist? Alternativ können Sie versuchen, es als Abfrage zu speichern und den Abfragenamen zu übergeben.

Ich habe einen kleinen Test gemacht, sollte es prinzipiell funktionieren. r_tbProduct hat eine leere Datenherkunft wenn ich laufe dies:

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 

Es die richtigen Daten zeigt.

Auch hier empfehle ich Ihnen dringend, Ihre Variablen umzubenennen.

Dim report As report 

fragt nur nach Problemen.

+0

Ich habe dies hinzugefügt, aber jetzt gibt es mir die Fehlermeldung, dass Microsoft Access Database nicht auf das Objekt in der Zeile DoCmd.OpenReport zugreifen kann. Dieser Fehlermeldung folgt die SQL-Zeichenfolge, die ich verwende. – Ulthran

+1

Was genau haben Sie hinzugefügt? Bitte bearbeiten Sie Ihre Frage. – Andre

+0

Bearbeitet. Ich habe der Funktion und der Zeile, die Sie zum Einstellen der Recordsource vorgeschlagen haben, einige neue Parameter hinzugefügt. Nachdem ich die recordsource Zeile hinzugefügt habe, fing ich an, den Fehler zu erhalten: Das Microsoft Access-Datenbankmodul konnte das Objekt 'SELECT ... (der Rest der SQL-Zeichenfolge) nicht finden'. – Ulthran