Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Kombinationsfeld: neuer Datensatz, nächster Wert
zurück: Formular - neuen Datensatz erstellen weiter: Verschiedene Methoden der Druckerauswahl Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Feedback Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
boina
Einsteiger


Verfasst am:
30. Jan 2008, 17:45
Rufname: Ronald
Wohnort: Salzburg

Kombinationsfeld: neuer Datensatz, nächster Wert - Kombinationsfeld: neuer Datensatz, nächster Wert

Nach oben
       Version: Office 2003

Hallo,

ich möchte bei einem Kombinationsfeld in einem Unterformular, dass mir bei einem neuen Datensatz der nächste Wert markiert wird.

Im Kombinationsfeld ist immer der erste Wert (DS) einer Abfrage markiert, wenn die Liste sehr lang ist, ist es mühevoll und fehleranfällig wenn man immer zum gesuchten Wert scrollen muss. In meinem Anwendungsfall will man sehr oft den nächsten Wert, wie im vorhergehenden Datensatz auswählen oder einen Wert der noch weiter unten in der Liste ist.

Beispiel:
...
Zeile 50: 103
Zeile 51: 107
Zeile 52: 168
...

Wenn im letzten Datensatz der Wert aus der Zeile 50 gewählt wurde, hätte ich gerne, wenn im neuen Datensatz der Wert aus der Zeile 51 vorgewählt wäre und nicht der Wert aus der Zeile 1 (oder 0?)

Gibt es beim Kombinationsfeld bzw Abfrage soetwas wie eine Zeilennummer die man um eins erhöhen kann um den nächsten Wert zu markieren?

Gruss Ronald

PS:
Ich habe diese Frage in "Inhalt von Kobinationsfeld reduzieren" (allerdings als Nebenfrage) schon einmal gestellt und zur Antwort erhalten, ich soll dementsprechend sortieren. Erstens weiss ich nicht wie ich bei den Werten von z.B. 1-100 von 50 aufwärts sortieren soll, sodaß nach 100 1,2... kommt und zweitens will man nicht immer den nächsten Wert auch tatsächlich auswählen sondern vielleicht einen anderen und dann wäre diese Sortierung verwirrend.
JörgG
Access-Team


Verfasst am:
30. Jan 2008, 21:30
Rufname:
Wohnort: b. Dresden


AW: Kombinationsfeld: neuer Datensatz, nächster Wert - AW: Kombinationsfeld: neuer Datensatz, nächster Wert

Nach oben
       Version: Office 2003

Hallo,

ohne die Datensatzherkunft und den Datentyp des Kombis zu kennen, kann man natürlich nur raten. Was ist das für ein Kombi, un-/gebunden?

Du könntest zum Beispiel im Formular- oder Kombiereignis "nach Aktualisierung" den Standardwert setzen:
Code:
Private Sub Kombi_AfterUpdate()
'Menüleiste - Extras - Verweise - "Microsoft DAO3.6 Object Library"
'                               - Häkchen setzen
    Dim Rst As DAO.Recordset, strSQL As String
   
    If IsNull(Me!Kombi) Then Exit Sub
    strSQL = "SELECT DISTINCT Feld1 " & _
                        "FROM Tabelle " & _
                       "WHERE Feld1 Is Not Null " & _
                    "ORDER BY Feld1;"
    Set Rst = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
    Rst.FindFirst "Feld1 = " & Me!Kombi
    If Rst!Feld1 < DMax("Feld1", "Tabelle") Then Rst.MoveNext
    Me!Kombi.DefaultValue = Rst!Feld1
    Rst.Close: Set Rst = Nothing
End Sub

_________________
MfG, Jörg Very Happy

Bitte das Feedback nicht vergessen.
boina
Einsteiger


Verfasst am:
31. Jan 2008, 13:34
Rufname: Ronald
Wohnort: Salzburg

AW: Kombinationsfeld: neuer Datensatz, nächster Wert - AW: Kombinationsfeld: neuer Datensatz, nächster Wert

Nach oben
       Version: Office 2003

Hallo Jörg,

vielen Dank für deinen Tipp. Ich versuche seit in der Früh deinen Tipp umzusetzen. Leider funktioniert es bis jetzt nicht oder doch!?
Code:
Private Sub cboSymbol_AfterUpdate()
' letzten Datensatz ermitteln und den nächsten Datensatz
' als Standardwert vorgeben
    Dim con As Connection
    Dim rst As Recordset
    Dim strSQL As String
   
    ' ADO Routine
    Set con = CurrentProject.Connection
    Set rst = New Recordset
    strSQL = "SELECT S2.IDSymbol, [Anlagenbereich] & [Betriebseinheit] & " & _
                                 "[Item] AS Symbol, P.Projekt " & _
               "FROM (tblGruppe AS G " & _
                     "INNER JOIN tblSpezifikation AS S1 " & _
                     "ON G.IDGruppe = S1.fdGruppe) " & _
                    "INNER JOIN (tblProjekt AS P " & _
                        "INNER JOIN ((tblAnlagenbereich AS A " & _
                                "INNER JOIN tblBetriebseinheit AS B" & _
                                "ON A.IDAb = B.fdAb) " & _
                            "INNER JOIN tblSymbol AS S2 " & _
                            "ON B.IDBe = S2.fdBE) " & _
                        "ON P.IDProjekt = A.fdPrj) " & _
                    "ON S1.IDSpezifikation = S2.fdSpec " & _
              "WHERE P.Projekt = [Forms]![frmAnfrage]![txtProjekt] " & _
                 "OR [Forms]![frmAnfrage]![txtProjekt] Is Null " & _
           "ORDER BY [Anlagenbereich] & [Betriebseinheit] & [Item];"
    ' Abfrage öffnen
'    rst.Open "qrySymbolCbo", con, adOpenDynamic, adLockOptimistic, adCmdTable
    rst.Open strSQL, con, adOpenStatic, adLockOptimistic, adCmdText
    If IsNull(Me!cboSymbol) Then Exit Sub
    rst.Find "IDSymbol = " & Me!cboSymbol
    rst.MoveNext
    If rst.EOF Then rst.MoveLast
    Me!cboSymbol.DefaultValue = rst!IDSymbol
    rst.Close
    Set rst = Nothing
End Sub
Sobald ich das Kombinationsfeld ändere, kommt die Fehlermeldung:
Zitat:
Laufzeitfehler:
Für mindestens einen erforderlichen Parameter wurde kein Wert angegeben.
Das bezieht sich doch auf die "Where-Klausel", oder? Die gleiche Abfrage verwende ich aber für das Kombinationsfeld und dort hat es bis jetzt auch immer funktioniert.

Wenn ich die Where-Klausel weglasse kommt keine Fehlermeldung und es kommt auch der nächste Wert aus der Liste als Standardwert, genauso (oder sogar besser) wie gewünscht. Wenn ich den letzten Wert aus der Liste auswähle, so wird als Standardwert nichts angezeigt, auch genau so, wie ich es will. Also eigentlich alles in bester Ordnung. Als Standardwert erscheint jetzt im neuen Datensatz nicht der nächsthöhere Wert als im letzten Datensatz - wie als Thread-Thema angegeben, sondern der nächste Wert vom letzten aktualisierten Datensatz. Das ist mehr als ich im Threaderöffnungsposting wollte, aber genau das, was ich suchte. Surprised

Kann ich in meinem Fall die where-Klausel, im SQL-String, für das Ereignis "nach Aktualisierung" weglassen oder muss ich mit bösen Überraschungen rechnen?

Gruß Ronald
Nachtrag: boina am 31. Jan 2008 um 13:24 hat folgendes geschrieben:
Hallo,

meine aktuelle Abfrage für das Ereignis "nach Aktualisierung" sieht jetzt so aus:
Code:
SELECT   S.IDSymbol
FROM     tblProjekt AS P
         INNER JOIN ((tblAnlagenbereich AS A
                      INNER JOIN tblBetriebseinheit AS B
                      ON A.IDAb = B.fdAb)
                     INNER JOIN tblSymbol AS S
                     ON B.IDBe = S.fdBE)
         ON P.IDProjekt = A.fdPrj
ORDER BY P.Projekt, A.Anlagenbereich, B.Betriebseinheit, S.Item;

Gruß Ronald
Willi Wipp
Moderator


Verfasst am:
31. Jan 2008, 14:42
Rufname:
Wohnort: Raum Wiesbaden

Re: Kombinationsfeld: neuer Datensatz, nächster Wert - Re: Kombinationsfeld: neuer Datensatz, nächster Wert

Nach oben
       Version: Office 2003

Hi boina,

lass Dir den zusammengesetzten SQL-String im Direktbereich (Strg+G; Testfenster) ausgeben mit Debug.Print strSQL
Den kannst Du dann in einer Abfrage testen.

_________________
Eine kurze Rueckmeldung waere nett
SL Willi Wipp

(Anleitung fuer das Anhaengen von Dateien: Klicke links auf [www], Gaeste muessen sich dafuer anmelden)
boina
Einsteiger


Verfasst am:
31. Jan 2008, 16:05
Rufname: Ronald
Wohnort: Salzburg


AW: Kombinationsfeld: neuer Datensatz, nächster Wert - AW: Kombinationsfeld: neuer Datensatz, nächster Wert

Nach oben
       Version: Office 2003

Hallo Willi,

ich habe Deinen Vorschlag nicht ganz verstanden oder ich habe meine Bedenken nicht klar ausgedrückt.

Die Abfragen zwischen der Datensatzherkunft für das Kombinationsfeld und dem Ereignis "nach Aktualisierung" bringen durch das weglassen der where-Klausel (beim Ereignis) nicht das gleiche Ergebnis. Die Anzahl der Datensätze für die Abfrage des Ereignisses ist größer als die Liste des Kombinationsfeldes. Wenn ich den letzten Wert aus der Liste des Kombinationsfeldes auswähle erreicht die Abfrage nicht EOF und er geht zum nächsten Datensatz (der ist aber in der Liste nicht vorhanden) und zeigt als Standardwert nichts an. Ich bekomme keine Fehlermeldung und es sieht alles toll aus. Ich frage mich aber ob durch die unterschiedlichen Abfragen nicht doch ein Fehler entstehen kann, der halt nur derzeit nicht auftritt.

Gruß Ronald
JörgG
Access-Team


Verfasst am:
31. Jan 2008, 18:44
Rufname:
Wohnort: b. Dresden

AW: Kombinationsfeld: neuer Datensatz, nächster Wert - AW: Kombinationsfeld: neuer Datensatz, nächster Wert

Nach oben
       Version: Office 2003

Hallo,

Du sollst an dieser Stelle:
Code:
    ' Abfrage öffnen
Debug.Print strSQL  '<-- einfügen
Stop
'    rst.Open "qrySymbolCbo", con, adOpenDynamic, adLockOptimistic, adCmdTable
    rst.Open strSQL, con, adOpenStatic, adLockOptimistic, adCmdText

und mit <Strg+G> das Direktfenster einschalten. Hier wird jetzt der SQL-String angezeigt, prüfe ob die Syntax und die übergebenen Werte korrekt sind.

_________________
MfG, Jörg Very Happy

Bitte das Feedback nicht vergessen.
boina
Einsteiger


Verfasst am:
01. Feb 2008, 13:36
Rufname: Ronald
Wohnort: Salzburg

AW: Kombinationsfeld: neuer Datensatz, nächster Wert - AW: Kombinationsfeld: neuer Datensatz, nächster Wert

Nach oben
       Version: Office 2003

boina am 31. Jan 2008 um 18:35 hat folgendes geschrieben:
Hallo Jörg und Willi,

ich danke euch beiden für die Hilfe.

Ich habe leider übersehen, dass Willi im SQL-String die where-Klausel eingebaut hat. War von meiner Seite her ein Missverständnis. Ich werde das morgen ausprobieren.

Gruß Ronald

Hallo,

ich bin ratlos. Wenn ich die where-Klausel einfüge:
Code:
    strSQL = "SELECT S.IDSymbol " & _
               "FROM tblProjekt AS P " & _
                    "INNER JOIN ((tblAnlagenbereich AS A " & _
                                 "INNER JOIN tblBetriebseinheit AS B " & _
                                 "ON A.IDAb = B.fdAb) " & _
                                "INNER JOIN tblSymbol AS S " & _
                                "ON B.IDBe = S.fdBE) " & _
                    "ON P.IDProjekt = A.fdPrj " & _
              "WHERE P.IDProjekt = Forms![frmAnfrage]![IDProjekt] " & _
           "ORDER BY P.Projekt, A.Anlagenbereich, B.Betriebseinheit, " & _
                    "S.Item;"
             '"WHERE P.IDProjekt = Forms![frmAnfrage]![IDProjekt] " & _
    Debug.Print strSQL  '<-- einfügen
    Stop
    ' Abfrage öffnen
'    rst.Open "qrySymbolCboAktual", con, adOpenDynamic, adLockOptimistic, _
'             adCmdTable
    rst.Open strSQL, con, adOpenDynamic, adLockOptimistic, adCmdText
erhalte ich folgende Fehlermeldung:
Zitat:
Für mindestens einen erforderlichen Parameter wurde kein Wert angegeben.
Im Direktfenster wird mir, wenn ich mit dem Mauszeiger auf [Forms]... gehe, folgendes angezeigt:
Zitat:
Forms![frmAnfrage]![IDProjekt] = 1
Wenn ich die Where-Klausel ändere, indem ich direkt einen Wert angebe:
Code:
             "WHERE P.IDProjekt = 1 " & _
bekomme ich keine Fehlermeldung.
Code:
             "WHERE P.IDProjekt = Forms![frmAnfrage]![IDProjekt] " & _
Was ist an der oben gezeigten Zeile falsch? Question

Das Feld "Forms![frmAnfrage]![IDProjekt" ist ein Autowert und steht im Hauptformular. Die obige Abfrage wird beim Ereignis "nach Aktualisieren" von einem Kombinationsfeld im Unterformular durchgeführt.
Da der Name des Feldes nicht mit dem Steuerelementinhalt übereinstimmt, habe ich auch schon den Namen (txtIDProjekt) ausprobiert. Ich erhalte die gleiche Fehlermeldung und auch der Wert im Direktfenster wird gleich angezeigt:
Zitat:
Forms![frmAnfrage]![txtIDProjekt] = 1

Gruß Ronald
JörgG
Access-Team


Verfasst am:
02. Feb 2008, 00:17
Rufname:
Wohnort: b. Dresden

AW: Kombinationsfeld: neuer Datensatz, nächster Wert - AW: Kombinationsfeld: neuer Datensatz, nächster Wert

Nach oben
       Version: Office 2003

Hallo,

im Hfo und der Code läuft im Ufo? Dann probiere es so:
Code:
             "WHERE P.IDProjekt = " & Me.Parent!IDProjekt & " " & _

_________________
MfG, Jörg Very Happy

Bitte das Feedback nicht vergessen.
boina
Einsteiger


Verfasst am:
04. Feb 2008, 10:16
Rufname: Ronald
Wohnort: Salzburg

AW: Kombinationsfeld: neuer Datensatz, nächster Wert - AW: Kombinationsfeld: neuer Datensatz, nächster Wert

Nach oben
       Version: Office 2003

boina am 02. Feb 2008 um 16:57 hat folgendes geschrieben:
Hallo Jörg,

danke für den Tipp. Ich werde es aber erst am Montag ausprobieren können.

Gruß Ronald

Hallo Jörg,

die Änderung der where-Klausel brachte leider nicht den gewünschten Erfolg.
Sowohl "Forms![frmAnfrage]![IDProjekt]" als auch "Me.Parents!]![IDProjekt]" verhalten sich identisch: gleiche Fehlermeldung, gleiche Werte im Direktfenster.

Wenn ich die Abfrage direkt öffne, bekomme ich bei geöffneten Formular keine Fehlermeldung. Ist das Formular geschlossen werde ich nach dem Parameter gefragt. Die Meldungen sind also unterschiedlich.

Formular geöffnet, Ereignis "nach Aktualisieren":
Zitat:
Titel: Microsoft Office Access
Meldetext: Für mindestens einen erforderlichen Parameter wurde kein Wert angegeben.
Formular geschlossen, Abfrage direkt durchgeführt:
Zitat:
Titel: Parameterwert eingeben
Meldetext: Formulare!frmAnfrage!IDProjekt
Ich habe jetzt zwar festgestellt, dass die Meldungen unterschiedlich sind, das hilft mir leider aber nicht weiter. Vielleicht hast Du eine Idee?

Gruß Ronald
JörgG
Access-Team


Verfasst am:
04. Feb 2008, 18:41
Rufname:
Wohnort: b. Dresden

AW: Kombinationsfeld: neuer Datensatz, nächster Wert - AW: Kombinationsfeld: neuer Datensatz, nächster Wert

Nach oben
       Version: Office 2003

Hallo,

bei Formularverweisen muss das entsprechende Formular geöffnet sein! Somit ist klar wo die eine Meldung herkommt. Ist denn zum Zeitpunkt der Codeausführung ein gültiger DS im Hfo?
Einer ist noch, in einem globalen Modul (Datenbankfenster - Module - evtl Neu)
Code:
Option Compare Database
Option Explicit

Public lngID As Long

Public Function FktParameter() As Long
    FktParameter = lngID
End Function

im Kombiereignis:
Code:
Private Sub cboSymbol_AfterUpdate()
    lngID = Me.Parent!IDProjekt
'. . .
'die Funktion liefert den Parameter
             "WHERE P.IDProjekt = FktParameter() " & _
'. . .

_________________
MfG, Jörg Very Happy

Bitte das Feedback nicht vergessen.
boina
Einsteiger


Verfasst am:
05. Feb 2008, 09:59
Rufname: Ronald
Wohnort: Salzburg


AW: Kombinationsfeld: neuer Datensatz, nächster Wert - AW: Kombinationsfeld: neuer Datensatz, nächster Wert

Nach oben
       Version: Office 2003

boina am 04. Feb 2008 um 19:51 hat folgendes geschrieben:
Hallo Jörg,

wenn man nicht mehr weiter weiß, kommt man eben auch auf seltsame Ideen. Eine dieser Ideen war eben, zu sehen, was für eine Meldung kommt, wenn das Formular geschlossen ist. Im Regelfall ist das Formular natürlich geöffnet, wenn die Abfrage ausgeführt wird. Wollte nur sehen, ob die Meldungen identisch sind.

Im Hauptformular muss? ein gültiger Datensatz sein. Wenn ich zuerst die Abfrage direkt ausführe, erhalte ich keine Fehlermeldung. Führt das Ereignis vom Kombinationsfeld die Abfrage aus, kommt die Fehlermeldung.

Danke übrigens für Deinen Tipp. Ich werde ihn morgen umsetzen.

Gruß Ronald

Guten Morgen Jörg,

Dein letzter Tipp war genau richtig.

Es funktioniert jetzt alles wie ich es wollte, Smile danke für Deine Hilfe. Eine Frage habe ich aber noch zum Schluß. Was bewirkt der Umweg über die Funktion?

Gruß Ronald

P.S.
Es funktioniert auch, wenn ich den Wert vorher in eine Variable schreibe:
Code:
    Dim lngProjekt As Long
   
    ' ADO Routine
    Set con = CurrentProject.Connection
    Set rst = New Recordset
    lngProjekt = Me.Parent!IDProjekt
    strSql = "SELECT S.IDSymbol " & _
               "FROM tblProjekt AS P " & _
                    "INNER JOIN ((tblAnlagenbereich AS A " & _
                                 "INNER JOIN tblBetriebseinheit AS B " & _
                                 "ON A.IDAb = B.fdAb) " & _
                                "INNER JOIN tblSymbol AS S " & _
                                "ON B.IDBe = S.fdBE) " & _
                    "ON P.IDProjekt = A.fdPrj " & _
              "WHERE P.IDProjekt = " & lngProjekt & " " & _
           "ORDER BY P.Projekt, A.Anlagenbereich, B.Betriebseinheit, " & _
                    "S.Item;"
    rst.Open strSql, con, adOpenDynamic, adLockOptimistic, adCmdText
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Access Tabellen & Abfragen: Aus 1 Datensatz mit 10 Infos mache 10 Datensätze à 1 Info 2 Steve 914 14. Jan 2005, 00:43
Steve Aus 1 Datensatz mit 10 Infos mache 10 Datensätze à 1 Info
Keine neuen Beiträge Access Tabellen & Abfragen: Wenn Wert nicht vorhanden nimm den nächsten 2 Ogdo 788 29. Dez 2004, 12:40
Gast Wenn Wert nicht vorhanden nimm den nächsten
Keine neuen Beiträge Access Tabellen & Abfragen: Bei der Aktualisierung eines Tabellenwertes neuen Datensatz 6 zheng 810 07. Dez 2004, 22:35
zheng Bei der Aktualisierung eines Tabellenwertes neuen Datensatz
Keine neuen Beiträge Access Tabellen & Abfragen: Kombinationsfeld Datensatzherkunft VBA SQL 2 JensM 8920 17. Nov 2004, 19:57
JensM Kombinationsfeld Datensatzherkunft VBA SQL
Keine neuen Beiträge Access Tabellen & Abfragen: Abfrage mit sum, max Wert und verhätnis summe/max anzeigen? 1 IV 2531 04. Nov 2004, 18:14
Skogafoss Abfrage mit sum, max Wert und verhätnis summe/max anzeigen?
Keine neuen Beiträge Access Tabellen & Abfragen: Wert eines Feldes aus Formular in Tabelle speichern 18 kave78 13710 16. Okt 2004, 13:40
Ming Wert eines Feldes aus Formular in Tabelle speichern
Keine neuen Beiträge Access Tabellen & Abfragen: SQL - Abfrage ob ein Wert in der Tabelle enthalten ist 1 notausgang 1301 23. Sep 2004, 09:42
stpimi SQL - Abfrage ob ein Wert in der Tabelle enthalten ist
Keine neuen Beiträge Access Tabellen & Abfragen: Einen Wert per Abfrage in mehreren Tabellenspalten suchen 2 Danny G. 606 10. Sep 2004, 18:22
Danny G. Einen Wert per Abfrage in mehreren Tabellenspalten suchen
Keine neuen Beiträge Access Tabellen & Abfragen: CurrentUser() in neuen Datensatz eintragen 2 mafke 924 16. Aug 2004, 15:49
mafke CurrentUser() in neuen Datensatz eintragen
Keine neuen Beiträge Access Tabellen & Abfragen: kein Wert in der Tabelle, dann immer Null (0)?? 3 Michel_9 1005 26. Mai 2004, 14:28
Michel_9 kein Wert in der Tabelle, dann immer Null (0)??
Keine neuen Beiträge Access Tabellen & Abfragen: kriterium - datensatz nur in einer von zwei tabellen 3 budking82 1000 11. Mai 2004, 12:59
budking82 kriterium - datensatz nur in einer von zwei tabellen
Keine neuen Beiträge Access Tabellen & Abfragen: letzten datensatz bei access ermitteln 2 trommelkind 902 03. Mai 2004, 16:25
trommelkind letzten datensatz bei access ermitteln
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Macromedia Dreamweaver