.refresh / .requery

BitMan

Erfahrenes Mitglied
Hi Leute,

folgendes Konstrukt wird von mir eingesetzt um in einem Form eine Information aus zu tauschen (geht leider ned anders!).
Code:
Private Sub doSelectItem()
    DoCmd.SetWarnings (False)
    DoCmd.OpenQuery "qry_AuftragsAdresseTauschen", acViewNormal, acEdit
    Forms!frm_AuftragsBuch.Requery
    DoCmd.Close acForm, Me.Name, acSavePrompt
    DoCmd.SetWarnings (True)
End Sub

Das Query ist eine Aktualisierungsanfrage, welche auf Basis von mehrere Formularen einen Datensatz wählt.

Leider stehe ich nach jedem Ausführen wieder auf dem ersten Datensatz. gibt es ausser .Requery noch eine andere Eigenschaft, welche dann den geänderten Datensatz einliest? Oder muss ich nun noch im VBA den vorherigen Datensatz wieder anspringen?

cu s00n BitMan
 
Fragen zu VBA gehören eher in die Office-Automatiesierung. Hier ghets um Tabellen, Index und SQL.

zu deiner Frage.
Es geht wohl um MS Access Version Irgendwas.

Aktualisierungsabfragen lässt man besser mit 'DoCmd.RunSQL' laufen anstatt sie zu öffnen.

Wozu kommtes drauf an auf welchem Datensatz du stehst? Du schliesst ja das Formular.
 
ok, werde das dann beim nächsten Mal im andere Forum posten.
Nein ich öffne aus Form #11 ein Form #2 in dem ich Daten änder. Beim schließen von Form #2 werden umfangreiche Aktualisierungen vorgenommen und danach geschlossen. Dann hätte ich in Form 1 gerne wieder den Datensatz den ich vorher drin hatte. Den Primary Key kann ich raussuchen, aber ich find nicht heraus wie ich nach einem requery wieder den Datensatz mit diesem primary key anzeige. ich bin dann immer auf dem Datensatz Nr 1
 
Eine Möglichkeit ist indem du im zugrundeliegenden Recordset suchst. Das Formular sollte dann automatisch auf den springen

Visual Basic:
Dim myID As Long
myID = Me!id
'//TODO dein restlicher Code
Call Me.Recordset.FindFirst("id = " & myID)
 
OK, das klingt plausibel, geht sicher auch anstatt mit ME auch mit FORMS!frm_name!recordset.... gleich mal ausprobieren...
 
geht, ... zumindest im Hauptformular.

ist zwischen Deiner Schreibweise
Code:
Forms("formname").Recordset.FindFirst()
und meiner Schreibweise
Code:
Forms!frm_form.Recordset.FindFirst()
noch ein Unterschied ausser das Deine Schreibweise angenehmer zu lesen ist?


Warum steigt der hier in der 3. Zeile aus. Die Objektnamen sind alle richtig.
Code:
Private Sub doSelectItem()
    Dim xAufId As Long
    xAufId = Forms!frm_auftragsbuch.auf_id
    xDetId = Forms!frm_auftragsbuch!frm_AuftragsBuch_uDetails.audet_id
    DoCmd.SetWarnings (False)
    DoCmd.OpenQuery "qry_ProduktZuAuftragAddieren", acViewNormal, acAdd
    DoCmd.Close acForm, "frm_ProduktAuswahl", acSavePrompt
    Forms!frm_auftragsbuch.Requery
    Forms!frm_auftragsbuch.Recordset.FindFirst ("auf_id = " & xAufId)
    Forms!frm_AuftragsBuch_uDetails.Recordset.FindFirst ("audet_id = " & xDetId)
    DoCmd.SetWarnings (True)
End Sub
Kann es sein das ich den recordset im UnterFormular nicht platzieren kann?
 
Zuletzt bearbeitet:
Wenn du auf das Recordset des Unterformulares zugeifen willst, musst du pingelig genau die Reihenfolge beachten

[Formularauflistung] -> [Haubtformular] -> [Control auf dem Unterformular] -> [Unterformular] -> [Eigenschaft (Feld, Recordset etc)]

Das sieht dann etwa so aus
Visual Basic:
Forms("auftragsbuch").frm_AuftragsBuch_uDetails.Form.audet_id

Du hast also die Zuweisung 'Form' in deinem Pfad vergessen

Ich persönlich ziehe den Zugriff über die Forms-Liste vor. Obs VOr- oder Nachteile hat weiss ich nicht. Einzig kann man bei der Liste (also die Klammer-Variante) den Formularnamen auch als Variabel übergeben:
Forms(variableMitFormularname).XY
 
iiieh ist das widerlich, wie soll man denn da drauf kommen *fg*
merci, das löst einen haufen Probleme die ich mit Access habe.

btw: eigentlich mach ich alles in C# aber kleine Projekte will ich in Zkunft mit Access, Excel und VBA lösen.

merci!
 
iiieh ist das widerlich, wie soll man denn da drauf kommen *fg*

- Fragen
- Suchen
- Pröbeln -> VBA ist freundlich. Im Code hinter dem Formular kann man mal mit 'Me.' starten und dann mal schauen was es da alles so gibt. Dann kommt man auf 'Me.MeinCotrol.' und sieht wass es da so gibt etc.
Des weiteren die Variable 'Me' einmal beim Debuggen genauer untersuchen.....
 

Neue Beiträge

Zurück