Hallo,
Ich habe folgendes Problem. Ich rufe über ein Formular ein neues Formular auf.
Der Inhalt des neuen Formulars wird mit Hilfe von VBA Code und einigen Abfragen
mit Parameter des ersten Formulars bestimmt. Auf dem Endformular wird unten in der
Leiste wo man zwischen den Datensätzen wechseln kann die falsche Anzahl angezeigt.
Aus dem Quellcode heraus soll nur ein einziger Datensatz auf dem Endformular erscheinen.
Private Sub GesprDatum_DblClick(Cancel As Integer)
Dim SQLAbfrageKontakt As String
' Kontaktdaten abfragen
SQLAbfrageKontakt = "SELECT K.kliName, K.kliVorname " & _
"FROM Kontakte AS K " & _
"WHERE K.KliID = " & Me.KliID & ";"
' Protokolldaten abfragen
SQLAbfrageProtokoll = "SELECT * " & _
"FROM Protokolle AS P " & _
"WHERE P.KliID = " & Me.KliID & " " & _
"AND CDbl(P.GesprDatum) = " & CDbl(Me![GesprDatum]) & ";"
MsgBox (SQLAbfrageKontakt)
DoCmd.OpenForm "Protokolle"
' Menue: Extras -> Verweise Microsoft DAO 3.xx Object Library muss aktiv sein!
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb ' Datenbank definieren
' Kontaktdaten
Set rs = db.OpenRecordset(SQLAbfrageKontakt) ' Recordset öffnen
Forms!Protokolle!txtNameProtokoll = rs!kliName
Forms!Protokolle!txtVornameProtokoll = rs!kliVorname
' Protokolldaten
Set rs = db.OpenRecordset(SQLAbfrageProtokoll)
Forms!Protokolle!txtSitzDatumProtokoll = rs!GesprDatum
Forms!Protokolle!txtSitzHonorar = rs!Honorar
Forms!Protokolle!cbDauerSitzung = rs!Problemdauer ' Sitzungsdauer
Forms!Protokolle!txtGesprWer = rs!GesprWer
rs.Close
Set rs = Nothing
Set db = Nothing
End Sub
Danke sehr,
Gruß,
AllenWalker
Hallo,
ist das "Endlos-Formular" das erste oder das zweite Formular??
Was ist eine "falsche Anzahl " ??
Wenn es das "Zweite" (Endlos)-Form ist, das mittels Zuweisungen "gefüllt" wird, dann gibt es für dieses Formular keine "Anzahl" (von Datensätzen).
Bitte beschreibe die Situation(en) immer eindeutig, sonst stochert man im Nebel herum.
Ich stelle die Frage nochmal, auch wenn es (Dich) nervt: WARUM benutzt Du nicht die Standard-Funktionalitäten von Access?? (Gebunden Formulare, über die Schlüsselfelder verknüpfte Unterformulare, an Tabellenfelder gebundene Steuerelemente , etc...) .
Mit diesen "Sachen" liesse sich die Aufgabenstellung in Null Komma Nix und (fast) ohne eine Zeile VBA-Code erledigen.
Ich habe ein Formular, wo die relevanten Kundendaten angezeigt werden. In einem Unterformular werden zu dem Kunden seine Gesprächstermine aufgelistet.
Das Unterformular wird über eine SQL-Abfrage mit Daten gefüllt. Wenn ich auf ein Datum eines gewissen Termins klicke wird ein Formular geöffnet welches zu eine
detaillierte Ansicht zu dem ausgewählten Termin gibt. Mittels VBA Code und der SQL Abfragen werden die Kundendaten und die Daten des Termins für das detaillierte
Formular bestimmt. Das Ergebnis für das Formular mit den detaillierten Termindaten soll nur ein Datensatz sein.
In der Leiste wo man zwischen den Datensätzen wechseln kann bekomme ich angezeigt x von Gesamtanzahl aller Datensätze wobei als Ergebnis aus den Abfragen im
VBA Code nur ein Datensatz kommen soll.
Hallo,
fassen wir mal zusammen:
Zitat
Ich habe ein Formular, wo die relevanten Kundendaten angezeigt werden. In einem Unterformular werden zu dem Kunden seine Gesprächstermine aufgelistet.
Ok, solange das Ufo-Steuerelement über seine Eigenschaften "Verknüpfen von/nach" mit dem Hauptform verbunden ist.
ZitatDas Unterformular wird über eine SQL-Abfrage mit Daten gefüllt.
Es reicht die Angabe des entspr. Tabellennamens, es sei denn, man möchte die Datensätze von vornherein nach einer gewissen Spalte sortieren.
ZitatWenn ich auf ein Datum eines gewissen Termins klicke wird ein Formular geöffnet welches zu eine
detaillierte Ansicht zu dem ausgewählten Termin gibt.
Ok.
ZitatMittels VBA Code und der SQL Abfragen werden die Kundendaten und die Daten des Termins für das detaillierte Formular bestimmt.
Hier kommt's: Warum mit VBA und den SQL-Abfragen?
Mach ein Formular, das alle die gewünschten Detail-Felder anzeigt und setze in seine Datenherkunft den Tabellennamen (vermutlich "Protokolle"). Mit der nachfolgenden Prozedur öffnet sich das Form und zeigt die Details des Gesprächs an:
Code im UFO:
Sub Gesprdatum_DblClick()
Docmd.Openform "frmProtokollDetails",,,"GesprDatum= " & Format(Me!GesprDatum,"\#yyyy-mm-dd\#")
End Sub
(Je nach Aufbau der Tabellen wäre hier der Einsatz des Primärschlüsselwertes zu empfehlen)
Voraussetzung ist, dass die Tabellen ordnungsgemäß (mit Primärschlüssel, normalisiert) aufgebaut sind und "GesprDatum" vom Datentyp "Datum/Uhrzeit ist und auch NUR das Datum und keine Uhrzeit enthält.
Wie gesagt, das ganze VBA-Getöns der Wertzuweisungen kannst Du den Hasen geben.....
Zitat
Code im UFO:
Sub Gesprdatum_DblClick()
Docmd.Openform "frmProtokollDetails",,,"GesprDatum= " & Format(Me!GesprDatum,"\#yyyy-mm-dd\#")
End Sub
(Je nach Aufbau der Tabellen wäre hier der Einsatz des Primärschlüsselwertes zu empfehlen)
Voraussetzung ist, dass die Tabellen ordnungsgemäß (mit Primärschlüssel, normalisiert) aufgebaut sind und "GesprDatum" vom Datentyp "Datum/Uhrzeit ist und auch NUR das Datum und keine Uhrzeit enthält.
Danke sehr,
Hab die Codezeile noch etwas angepasst mit dem Primärschlüssel. Eine Frage dazu hätte ich noch. Wie kann ich auf den Namen und Vornamen des Kunden aus der Kundentabelle zugreifen? Bisher werden nur die Protokolldaten angezeigt und der Fremdschlüssel, welcher mit dem Primärschlüssel aus der Kundentabelle verbunden ist.
Am Rande möchte ich gerne noch erwähnen, dass ich meine letzte Erfahrungen mit Access 2002 in der Schule erworben hatte und da hatten wir ähnliche Sachen mit VBA Code und SQL gelöst. Seit dem Schuljahr hatte ich bisher nichts mit Access mehr zu tun bis heute wo ich mich halt für eine Arbeit damit auseinandersetzen soll. So gesehen bin ich ein Wiedereinsteiger und kenne mich nicht mit allen Bordmitteln von Access 2010 aus.
Hallo,
3 (es gibt noch weitere) Möglichkeiten:
1) Mit Dlookup() im Steuerelementinhalt eines Textfeldes
2) Mit einem Kombifeld, das seine Daten aus der Kundentabelle bezieht.
3) In diesem Fall durchaus eine Abfrage für das Form, die über die benötigten Tabellen verknüpft. Dann kann man ein Textfeld an die gewünschten Tabellenfelder binden.
Am Rande: Es ist ja nichts Schlimmes, wenn die Erfahrungen vor längerer Zeit gemacht wurden.. Es wäre nur vorteilhafter, etwas empfänglicher mit den gegebenen Ratschlägen und Tipps umzugehen ..
Die "Bordmittel" hier sind nicht unterschiedlich zwischen den Access-Versionen. Man macht sich halt das Leben leichter, als wenn man Access neu erfinden will.
Habe Möglichkeit 3 umgesetzt. Habe es anhand eines Recordset umgesetzt.
Hier der Code dazu
Private Sub GesprDatum_DblClick(Cancel As Integer)
Dim Abfrage As String
Dim SQLAbfrageKontakt As String
Abfrage = "KliID = " & Me!KliID & "AND GesprDatum = " & Format(Me!GesprDatum, "\#yyyy-mm-dd\#")
DoCmd.OpenForm "Protokolle", , , Abfrage
' Kontaktdaten abfragen
SQLAbfrageKontakt = "SELECT K.kliName, K.kliVorname " & _
"FROM Kontakte AS K " & _
"WHERE K.KliID = " & Me.KliID & ";"
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
' Kontaktdaten
Set rs = db.OpenRecordset(SQLAbfrageKontakt) ' Recordset öffnen
Forms!Protokolle!txtNameProtokoll = rs!kliName
Forms!Protokolle!txtVornameProtokoll = rs!kliVorname
rs.Close
Set rs = Nothing
Set db = Nothing
End Sub
Oder geht es vielleicht noch kürzer?^^
Hallo,
Im Steuerelementinhalt eines Textfeldes , das den Nachnamen anzeigen soll:
=Domwert("kliName";"Kontakte";"KliID = [KliID])
Voraussetzung ist, dass [KliID] im Formular vorhanden ist.
Noch einfacher wird die Sache, wenn für das "DetailFormular" dieselbe(!) Formularkonstruktion wie für das Ausgangsform verwendet wird. Lediglich haben die daran beteiligten Formulare dann eben alle Tabellenfelder zur Anzeige.
Zitat von: DF6GL am August 12, 2013, 17:19:43
Hallo,
Im Steuerelementinhalt eines Textfeldes , das den Nachnamen anzeigen soll:
=Domwert("kliName";"Kontakte";"KliID = [KliID])
Voraussetzung ist, dass [KliID] im Formular vorhanden ist.
Noch einfacher wird die Sache, wenn für das "DetailFormular" dieselbe(!) Formularkonstruktion wie für das Ausgangsform verwendet wird. Lediglich haben die daran beteiligten Formulare dann eben alle Tabellenfelder zur Anzeige.
Habe die Zeile entsprechend dem Textfeld zugeordnet. Die kliID wird korrekt übernommen aus dem vorherigen Formular nur bekomme im "Detailformular" den falschen Namen zugewiesen.
Hallo,
nun, so meinte ich das nicht ganz...
Das "Detailformular" muss mit Docmd.Openform und Übergabe des passenden Primärschlüssels geöffnet werden.
Abfrage = "KliID = " & Me!KliID & "AND GesprDatum = " & Format(Me!GesprDatum, "\#yyyy-mm-dd\#")
Mit dieser Zeile öffne ich das "Detailformular" und die KliID wird korrekt übernommen.
=DomWert("kliName";"Kontakte";" KliID = [KliID]")
Diese Zeile habe ich bei dem Textfeld für den Nachnamen bei Steuerelementinhalt eingegeben.
Als Ergebnis bekomme ich zu der KliID den falschen Namen aus der Kontakttabelle.
Weiß keiner eine Antwort? Müsste auch noch weitere Felder (Textfelder, Combo Boxen und Check Boxen) auf die Art füllen. ???
Sonst verbleibe ich bei den Recordsets.
Hallo,
Zitat"Als Ergebnis bekomme ich zu der KliID den falschen Namen aus der Kontakttabelle."
das glaube ich nicht...
Welchen Datentyp hat das Tabellenfeld "KliID" ?
Welcher Wert steht im Form-Textfeld "KliID" ?
Und hier fehlt ein Leerzeichen vor "AND":
Abfrage = "KliID = " & Me!KliID & "AND GesprDatum = " & Format(Me!GesprDatum, "\#yyyy-mm-dd\#")
Zitat
Welchen Datentyp hat das Tabellenfeld "KliID" ?
In der Tabelle Kunde hat das Feld den Datentyp "Auto-Wert" und in der Tabelle Protokolle den Datentyp "Zahl"
Zitat
Welcher Wert steht im Form-Textfeld "KliID" ?
Nach dem Aufruf des detaillierten Protokollformulars steht im Textfeld die KliID des Kunden als Zahl.
Als Format ist "Allgemeine Zahl" angegeben.
Hallo,
dann sehe ich keinen Grund, warum der gelieferte Wert falsch sein sollte...
Ich habe es nochmal mit verschiedenen Datensätzen versucht. Zum Beispiel wird bei dem Kunden mit der KliID 5 oder 7 nachher im detaillierten Protokollformular der Name und Vorname des Kunden mit der KliID 1 angezeigt. Das geschieht bei jedem Kunden den ich auswähle.
=DomWert("kliName";"Kontakte";" KliID = [KliID]")
Habe diese Zeile per Hand und mit Hilfe des Editors erstellt. Beide Male mit dem gleichen Ergebnis.
Hallo,
existiert überhaupt im Form ein gebundenes Textfeld(!) mit Namen "KliID" ?
Versuch es auch mal so:
=DomWert("kliName";"Kontakte";" KliID =" & [KliID])
Um mein Wissen im Umgang mit Access 2010 zu vergrößern, möchte ich gerne mal nachfragen was das heißt "ein gebundenes Textfeld" und voran ich das erkennen kann.
Danke sehr
Hallo,
als gebundenes Textfeld wird ein Text-Steuerelement in einem Formular genannt, das an eine Spalte der Datenherkunft (Tabellen- oder Abfragespalte) gebunden ist.
Zu erkennen ist es daran, dass in den Eigenschaften - im Entwurfsmodus - des Steuerelements auf der Registerkarte Daten unter Steuerelementinhalt der Name eines Tabellen- oder Abfragefeldes zu lesen ist.
Das ist nicht nur bei Access 2010 so sondern bei allen Versionen.
HTH
Hallo,
wenn ein Formular eine Tabelle als Datenherkunft/Datenquelle hat, so ist das Formular an die Tabelle gebunden. Mit anderen Worten es ist ein gebundens Formular.
Wenn nun Felder über den Steuerelementinhalt ein solches Tabellenfeld eingetragen hat so ist dieses Feld gebunden mit anderen Worten Das Feld ist über den Steuerelementinhalt (=Tabellenfeld) an die Tabelle gebunden.
Der Feldinhalt (=die Daten) eines solchen Feldes landet ohne weiteres Zutun direkt in der Tabelle und kann auch direkt im Formular geändert werden.
Im Regelfall sind gebundene Formulare die zu bevorzugende Methode zum Auslesen, ggf, Ändern und ggf. Zurückschreiben der Daten. Dazu bedarf es absolut keiner Programmierung, das kann Access automatisch mit den Standardfunktionen.
Statt einer Tabelle kann auch eine Abfrage verwendet werden.
Danke sehr für die hilfreichen Posts.
Das Problem ist gelöst :D
Hallo,
und wo lag das Problem nun?
Zitat
=DomWert("kliName";"Kontakte";" KliID =" & [KliID])
Diese Zeile hat mir bei meinem Problem geholfen