2016-08-09 136 views
1

zu ändern Ich arbeite an einer Datenbank, die Ressourcen für Mitarbeiter hält und anzeigt, jeder Mitarbeiter hat ein anderes Datum, an dem er oder sie zu tun hat bestimmter Kurs wieder. Ich habe ein paar Tabellen erstellt, die alle Informationen enthalten. Ich kann die Informationen in einem Formular anzeigen, dieses Formular enthält einige Schaltflächen, die es mir erlauben, zwischen verschiedenen Abfragen zu wählen. Alle Abfragen geben den gleichen Datentyp im selben Formular aus. Für eine einfache Referenz nenne ich dieses Formular FormA.VBA: Erlaube mir nicht, die RecordSource eines anderen Formulars in Microsoft Access

Das funktioniert alles gut, aber vor ein paar Stunden habe ich eine Schaltfläche hinzugefügt, die mir erlauben sollte, die Informationen eines bestimmten Datensatzes zu aktualisieren. Diese Aktualisierung geschieht in einer anderen Form, rufen Sie es FormB. In der alten Situation habe ich für jedes Training eine bestimmte Form verwendet, aber ich dachte, dass dies alles nicht effizient ist. Ich habe ein Formular erstellt, das die Informationen jeder Abfrage anzeigen kann. Das Problem, auf das ich stoße, ist die Tatsache, dass, wann immer ich die Taste drücke, um einen bestimmten Datensatz zu aktualisieren. Es zeigt immer die Informationen des obersten Datensatzes in der Abfrage/dem Formular an. Ich bin jetzt seit ein paar Stunden dran und ich kann es einfach nicht zur Arbeit bringen. Wenn ich die RecordSource von FormB manuell auf die richtige Abfrage einstelle, funktioniert alles wie es sollte. Aber das erfordert, dass ich viele der gleichen Formen mache.

Ich werde versuchen, alle Code zu verknüpfen, die ich für relevant halte. Wenn etwas anderes benötigt wird, sagen Sie es bitte.

den Code auf der Update-Button auf FormA platziert verwendet:

Private Sub btnUpdate_Click() 
Dim stDocName As String 


If Forms!FormA.RecordSource = "QryFG" Then 

    stDocName = "FormB" 

    ' we open first the form: 
    DoCmd.OpenForm stDocName, , , "peoplesoftnr = " & Me!PeopleSoftNr 

    ' we then set up it's RecordSource: 
    Forms!FormB.RecordSource = "QryFG" 

End If 

Diese if-Anweisung wiederholt fünfmal aller verschiedenen Trainings, sie sind alle gleich, damit ich sie gehören nicht in dieser Beitrag. Der Code füllt meine Textfelder in meinem FormB. Aber es nimmt immer den Spitzenrekord. Selbst wenn ich den Knopf drücke, der nicht in der gleichen Reihe ist (FormA). Wenn ich die folgende Zeile aus kommentieren:

' Forms!FormB.RecordSource = "QryFG": 

und manuell die QryFG als Datenherkunft von FormB gesetzt, tut es das, was zu tun sein angenommenes zu. Aber indem ich dies tue, muss ich viele gleiche Formen schaffen. Ich hoffe, es gibt einen besseren Weg, dies zu tun. Vielen Dank im Voraus für Ihre Zeit und Mühe. Meine Muttersprache ist nicht Englisch, also ignoriere bitte die Rechtschreib- und Grammatikfehler;).

Danke nochmal!

Joeri Rommers

Antwort

0

Durch die Form der Datenherkunft Einstellung, überschreiben Sie die Filter, die Sie vorher in DoCmd.OpenForm gesetzt, so zeigt es alle Datensätze von QryFG, beginnend mit dem ersten.

Es gibt mehrere Möglichkeiten, z.B.

' Open without filter 
DoCmd.OpenForm stDocName 
' Limit recordsource to current record 
Forms!FormB.RecordSource = "SELECT * FROM QryFG WHERE peoplesoftnr = " & Me!PeopleSoftNr 

oder die Filter nach dem Ändern der Datenherkunft gesetzt:

DoCmd.OpenForm stDocName 
With Forms(stDocName) 
    .RecordSource = "QryFG" 
    .Filter = "peoplesoftnr = " & Me!PeopleSoftNr 
    .FilterOn = True 
End With 

Wenn das Formular „flackert“, während das zu tun, können Sie es mit WindowMode:=acHidden öffnen können und es dann auf .Visible = True nach Datenherkunft/Filterwechsel .

+0

Beide Lösungen funktionieren gut! Vielen Dank, du hast mich gerettet! –