2016-06-03 7 views
0

Ich bin Entwickler einer Access-Datenbank (mit Office 2016) und mehrere Registerkarte Steuerelemente, die ich die Anzahl der Datensätze im Unterformular/Unterbericht anzeigen möchte.MS Access Registerkarte Steuerelementname mit Anzahl der Datensätze

Nach vielen Suchen etc Ich habe es für die Teilformulare mit einer Funktion, die ich in den Hauptformularen aktuellen Ereignis aufrufen (aber in einer separaten Funktion so kann ich auch über ein Makro aufrufen, wenn ich den Hauptformular Datensatz ändern mit einem Kombinationsfeld, da es sonst nicht aktualisiert wurde). Der Code Ich verwende ist:

Function ClientTotals() 

Dim i As Integer 
i = Form_sbfrm_ClientContacts.Recordset.RecordCount 
Form_frm_Clients.ClientTabs.Pages("Contacts").Caption = "Contacts (" & i & ")" 
End Function 

Das funktioniert perfekt für mich und mein Registerkarte Name wird „Kontakte (Anzahl der Datensätze)“ aber ich kann nicht die Syntax richtig machen, dies ändern für einen Bericht zur Arbeit , ist es möglich?

Ich habe versucht:

Function ClientTotals() 

Dim i As Integer 
i = Form_sbfrm_ClientContacts.Recordset.RecordCount 
Form_frm_Clients.ClientTabs.Pages("Contacts").Caption = "Contacts (" & i & ")" 

Dim j As Integer 
j = Report_rpt_CurrentProjects.Recordset.RecordCount ' this line is highlighted with the debugger 
Form_frm_Clients.ClientTabs.Pages("Current Projects").Caption = "Current Projects (" & j & ")" 

End Function 

Neben:

Dim j As Integer 
j = rpt_CurrentProjects.Report.Recordset.RecordCount ' this line is highlighted with the debugger 
Form_frm_Clients.ClientTabs.Pages("Current Projects").Caption = "Current Projects (" & j & ")" 

und verschiedene andere.

Eine andere Frage, die ich habe, ist, warum ist die Syntax für das Formular "Form_sbfrm" usw. und nicht mit einem "!". Wenn ich zu "!" es nervt.

Danke für Ihre Hilfe, KAL

Antwort

0

Recordset Wenn Sie komplexe Daten zurückgeben müssen, wenn Sie einen Wert, eine Summe oder eine Summe benötigen, sind Domain-Funktionen der richtige Weg. Überholen Sie sie nicht, zu viele auf einem Formular oder einem Bericht können die Benutzerfreundlichkeit beeinträchtigen.

Ich bin froh, dass ich helfen kann.

0

Recordset.Recordcount ist ein Vermächtnis-Funktion, die nur in ADP-Dateien gearbeitet (in einer SQL-Datenbank-Front-End-Zugang). Diese werden nicht mehr unterstützt.

Wenn der Bericht auf 1 Client basiert nur und es gibt keine Gruppierung, dann können Sie dies tun:

Klicken Sie auf den Detailabschnitt und in Veranstaltungen erstellen ein Ereignis für On Paint. In gesetzt dort

(Name of Page).Caption = DCount("*", "NAME OF QUERY/TABLE") or 
(Name of Page).Caption = DCount("*", "NAME OF QUERY/TABLE", "Filter Expression") (Filter expression optional). 

Wenn der Bericht gruppiert wird, wo es eine andere Seite pro Client oder Datumsbereich oder ein anderes dieser Gruppierung wird nicht funktionieren, da das Feld Beschriftung nicht gebunden Daten zeigen wird. Sie müssten der obigen Dcount-Anweisung Logik hinzufügen, um nach der aktuellen Filterbedingung zu suchen.

Zum Beispiel, sagen Sie eine Datenbank von 200 Kunden haben und Sie auf alle von ihnen einen großen Bericht ausgeführt wird, jede Seite wird eine eigene Registerkarte pro Client bekommen, würde die Syntax

(Name of Page).Caption = DCount("*", "ClientContacts, "ClientID = " & ClientID) 

sein Der beste Weg, um es zu tun, besonders wenn Sie gruppieren, ist loszuwerden der Registerkarte Steuerelement und verwenden Sie datengebundene Steuerelemente. Sie könnten eine Box um die Informationen erstellen, die auf der Registerkarte angezeigt werden, und ein Textfeld in die Registerkarte einfügen. Erstellen Sie einen Gruppenkopf für die Gruppierung der Daten. Erstellen Sie ein weiteres unsichtbares Textfeld in der Gruppenkopfzeile, und legen Sie die Steuerelemente = Count ([Feldname]), wobei Feldname ist, was auch immer Sie die Daten gruppieren (die Anzahl der inneren Klammern).

Legen Sie in dem Textfeld, das Sie zum Simulieren des Registers erstellt haben, die Steuerquelle auf den Namen des unsichtbaren Textfelds fest.

Lassen Sie mich wissen, ob dies hilft.

2

Dank Delecron,

Ich glaube, ich mit den Registerkarten für jetzt bleiben wird, wie sie mir genau geben, was ich will, aber denken Sie daran, was Sie gesagt haben, wenn ich zukünftige Verbesserungen Wenn es eine bessere Art und Weise zu tun, machen es.

EDIT

Mit was Sie gesagt haben, ich meine VBA zu einer DBANZAHL Methode geändert:

Dim j As Integer 
j = DCount("*", "qry_CurrentProjects", "FK_Project_Client_ID = Forms!Navigation!Navigationsubform.form!Client_ID") 
Form_frm_Clients.ClientTabs.Pages("Current Projects").Caption = "Current Projects (" & j & ")" 

Das bedeutet, mein Bericht Registerkarten werden jetzt auch gerade arbeiten, wie ich

Ich wollte wurde mit dem Kriterium/Filter in einen Durcheinander geraten, hense den Schnitt.

Wenn Recordset eine alte Methode ist, nehme ich an, dass es am besten wäre, meinen anderen Code durch die Dcount-Methode zu ersetzen?

Thanks again, KAL

Weitere EDIT

Danach tun könnte ich das jedes Mal sehen, die Form ein leichtes Flackern gab es geändert wurde. Nicht schlecht, aber man konnte sehen, dass dort viel berechnet wurde. Daher habe ich meine Methode auf die folgenden geändert und hier für jeden in der Zukunft veröffentlicht.

Im Formularfuß eine Textbox mit COUNT ([project_id])

In meiner Funktion

Dim j As Integer 
j = Form_frm_Clients!rpt_CurrentProjects.Report!txt_CurrentProjectsCount.Value 
Form_frm_Clients.ClientTabs.Pages("Current Projects").Caption = "Current Projects (" & j & ")" 

Jetzt kann ich sehen, es funktioniert schneller ohne Flimmern.