Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Problem beim Datensatzsuchen

Begonnen von swordi, August 16, 2011, 13:11:53

⏪ vorheriges - nächstes ⏩

swordi

Hallo ihr Lieben,

ich bin neu hier, und komm mit Access noch nicht ganz so gut klar, wie gewollt.

Im Moment ist mein Problem ein Kombinationsfeld, das ich als Suchfeld nutzen möchte (mit dem Assistenten hat alles wunderbar geklappt, ich will es aber ohne Assistent haben.)

Das Kombifeld ist ungebunden. Im Formular gibt es dann weitere Textfelder und sonstige Felder, die jeweils mit den zugehörigen Feldern der Datenbank verknüpft sind.

Im Kombifeld wird also meine Spalte zwei (Fallbezeichnungen) eingelesen, die habe ich alle im Kombifeld dann zur Auswahl.

Wenn ich jedoch eines dann auswähle und im Nach Aktualisierung des Kombifelds folgenden Code ausführen lasse:



Private Sub cob_suchfeld_AfterUpdate()
Me.Recordset.FindFirst "Schraubfallbezeichnung = '" & Me!cob_suchfeld & "'"

End Sub


Jedoch wird immer nur das Feld tb_Schraubfallbezeichnung auf meinem Formular befüllt.
Der Rest nicht.. was mach ich denn falsch ?!

Liebe Grüße

DF6GL

Hallo,

das ist so wegen Unkenntiss des Kontextes nicht zu sagen.


Wenn das Kombi seine Listendaten aus derselben Tabelle bezieht, die auch das Formular anzeigt, und in Spalte 0 (erste Spalte) der Wert des Tabellen-ID-Feldes , in Spalte 1 (zweite Spalte) die Werte aus der Tabellenspalte "tb_Fallbezeichnung" stehen, dann so:


Me.Recordset.FindFirst "[IDFeld] = " & Me!cob_suchfeld

oder


Me.Recordset.FindFirst "tb_Schraubfallbezeichnung = '" & Me!cob_suchfeld.Column(1) & "'"



Bezieht das Kombi seine Listendaten aus einer anderen Tabelle als das Formular anzeigt, dann etwa so:

Me.Recordset.FindFirst "SchraubfallbezeichnungID = " & Me!cob_suchfeld


wobei "SchraubfallbezeichnungID" das Fremdschlüsselfeld für den Primärschlüsselwert aus Tabelle "tbl_Schraubfallbezeichnungen" ist.

btw:  "Findfirst" findet nur den ersten passenden Datensatz in der Tabelle.

swordi

Hallo

danke erst mal.

Deine erste Beschreibung trifft zu. Es bezieht alles aus der gleichen Tabelle.

Wenn ich jedoch deinen Code:

Me.Recordset.FindFirst "[ID_Schraubfallbezeichnung] = " & Me!cob_suchfeld

benutze dann bekomme ich die Fehlermeldung:

3070
Das Microsoft Access Datenbankmodul erkennt 'eeee" nicht als gültigen Feldnamen oder Ausdruck.

Wobei "eeee" dann eben das war, was ich in meinem Kombifeld ausgewählt habe.

DF6GL

Hallo,


dann steht in der ersten Spalte des Kombis keine ID drin.....

Poste mal den SQl-String der Kombiabfrage  und die Kombi-Eigenschaften, sowie den Namen des Tabellen-ID-Feldes, bzw. den Namen des Tabellenfeldes, in welchem "eeeee" vorhanden sein soll.

swordi

Hallo,

Sql Abfrage des Kombifeldes: SELECT [Schraubfalldaten].[SchraubfallBezeichnung] FROM Schraubfalldaten;

Name des Tabellenfeldes in dem eeee vorhanden sein muss: SchraubfallBezeichnung.

Grüße

DF6GL

#5
Hallo,

dann sieht es so aus:

Me.Recordset.FindFirst "[Schraubfallbezeichnung] = '" & Me!cob_suchfeld & "'"

wobei ich keinen Unterschied zur Deinem anfänglichen Code sehen kann... Vermutlich stimmen Deine Beschreibungen nicht genau(!)

swordi

#6
Danke das funktioniert jetzt wunderbar.

Ich habe nur noch das Problem, dass ich einen Rahmen mit Optionsfeldern auf meinem Formular habe.
Die mit einer Spalte in der Datenbank verknüpft sind.
Je nachdem was in dieser Spalte steht (1, 2 , 3) soll der jeweilige Optionsbutton des zugehörigen Datensatzes aktiviert werden.

Der wird auch richtig markiert.

Aber bei Aktivierung (wirkliches reinklicken mit der Maus) eines Optionsfeldes, wird weiter unten ein Registerblatt eingeblendet.

Wenn dieses Optionsfeld jedoch automatisch durch das Suchfeld aktiviert wird (beim einlesen des Datensatzes sozusagen) klappt das mit der Registerkarte einblenden nicht.

DF6GL

Hallo,

das Einblenden des Registers muß auch noch zusätzlich beim Form_Current-Ereignis erfolgen.  Ruf dort einfach die Sub auf, die bei "Aktivierung" benutzt wird.

swordi

Hallo

Ok und welchen Code muss ich dann da eingeben ?!
da steh ich grad ein bisschen auf dem Schlauch.

swordi

#9
Ahhh sorry hat sich erledigt.

Ah super vielen lieben dank das klappt jetzt so.

Du warst meine Rettung. Dankeschön !!

Edit: etwas zu früh gefreut:

irgendwie hat das jetzt nur einmal geklappt, wenn ich nun einen datensatz suche klappt das mit dem Einblenden der Registerkarte nicht mehr :/

Ich bekomme immer den Fehler nach Auswahl im Suchfeld 3426: Diese Aktion wurde durch ein zugeordnetes Object abgebrochen.

Der Debugger steht auf der Zeile: Me.Recordset.FindFirst "[Schraubfallbezeichnung] = '" & Me!cob_suchfeld & "'"

DF6GL

Hallo,

habe keinen Überblick über Deinen Code.


Poste den mal im Gesamten....

swordi

Hallo

also wenn ich unten mit den Pfeilen vor, zurück zwischen den Datensätzen durchgehe klappt das mit dem einblenden der Registerkarten bei Auswahl der Optionsfelder - danke dafür.

Hier mein Code für das Suchfeld:

[code=vb]Private Sub cob_suchfeld_AfterUpdate()
'Nach Auswahl eines Eintrags des Suchfeldes wird das Formular mit dem Datensatz befüllt
Me.Recordset.FindFirst "[SchraubfallBezeichnung] = '" & Me!cob_suchfeld & "'"
End Sub
[/code]

Mehr hab ich bei der Suche nicht eingetragen jetzt.

Das hat ja mit der Suche auch funktioniert, bis ich eben das beim Current eingetragen habe:

Private Sub Form_Current()
If Me.rh_verschraubungsverfahren = 0 Then
    Me.lb_vorgaben_1.Visible = False
    Me.lb_vorgaben_2.Visible = False
    Me.lb_vorgaben_3.Visible = False
    Me.rg_schraubverfahren.Visible = False
       
ElseIf Me.rh_verschraubungsverfahren = 1 Then
    Me.lb_vorgaben_1.Visible = True
    Me.lb_vorgaben_2.Visible = False
    Me.lb_vorgaben_3.Visible = False
    Me.rg_schraubverfahren.Visible = True
    Me![rg_schraubverfahren].Pages(0).SetFocus
    Me.tb_da_druckhaltezeit.Value = "1"
    Me.tb_da_winkelgrad_min.Value = "0"
    Me.tb_da_winkelgrad_max.Value = "99"

ElseIf Me.rh_verschraubungsverfahren = 2 Then

    Me.lb_vorgaben_1.Visible = False
    Me.lb_vorgaben_2.Visible = True
    Me.lb_vorgaben_3.Visible = False
    Me.rg_schraubverfahren.Visible = True
    Me![rg_schraubverfahren].Pages(1).SetFocus
   
ElseIf Me.rh_verschraubungsverfahren = 3 Then

    Me.lb_vorgaben_1.Visible = False
    Me.lb_vorgaben_2.Visible = False
    Me.lb_vorgaben_3.Visible = True
    Me.rg_schraubverfahren.Visible = True
    Me![rg_schraubverfahren].Pages(2).SetFocus

End If
End Sub



Ich verstehs nicht... ich hab mir jetzt auch überlegt, dass es vlt doch besser wäre wenn ich als Suchfeld meine erste Spalte in der Datenbank nehme, die heisst ID_Schraubfalldaten und besteht aus Zahlen, automatisch hochgezählt.

Würde die Suche dann so lauten:

Me.Recordset.FindFirst "[ID_Schraubfalldaten] = " & Me!cob_suchfeld


Wobei ich in meinem Kombifeld trotzdem die SchraubfallBenennung auswählen würden wollte.

Grüße
Nicole

DF6GL

Hallo,

und wo ist der Code für den Optionsrahmen?

Du solltest auch nicht den Code in die Form_Current-Prozedur verschieben, sondern dort die Optrahmen-Prozedur aufrufen

swordi

Hallo

hier ist mein Code vom Rahmen

Private Sub rh_verschraubungsverfahren_AfterUpdate()

'Je nachdem, welches Verschraubungsverfahren gewählt ist, wird eine andere Registerkarte aktiviert
If Me.rh_verschraubungsverfahren = 1 Then
    Me.lb_vorgaben_1.Visible = True
    Me.lb_vorgaben_2.Visible = False
    Me.lb_vorgaben_3.Visible = False
    Me.rg_schraubverfahren.Visible = True
    Me![rg_schraubverfahren].Pages(0).SetFocus
    Me.tb_da_druckhaltezeit.Value = "1"
    Me.tb_da_winkelgrad_min.Value = "0"
    Me.tb_da_winkelgrad_max.Value = "99"

ElseIf Me.rh_verschraubungsverfahren = 2 Then

    Me.lb_vorgaben_1.Visible = False
    Me.lb_vorgaben_2.Visible = True
    Me.lb_vorgaben_3.Visible = False
    Me.rg_schraubverfahren.Visible = True
    Me![rg_schraubverfahren].Pages(1).SetFocus
   
ElseIf Me.rh_verschraubungsverfahren = 3 Then

    Me.lb_vorgaben_1.Visible = False
    Me.lb_vorgaben_2.Visible = False
    Me.lb_vorgaben_3.Visible = True
    Me.rg_schraubverfahren.Visible = True
    Me![rg_schraubverfahren].Pages(2).SetFocus

End If
End Sub



Verschoben habe ich den nicht, habe ihn nur in das Form_Current kopiert und um die 0 erweitert ?!

DF6GL

Hallo,


so meinte ich das :



Sub Form_Current()
rh_verschraubungsverfahren_AfterUpdate
End Sub


Zu FindFirst:

wenn Du nach der ID suchen willst, dann muss das Kombi in seiner ersten Spalte den ID-Wert und in der zweiten die Bezeichnung enthalten:

SELECT  Schraubfall_ID, SchraubfallBezeichnung FROM Schraubfalldaten

Die Spaltenanzahl muss auf 2 stehen und die Spaltenbreiten sollten 0cm;3cm sein.


Sodann dieser Code:

Private Sub cob_suchfeld_AfterUpdate()
Me.Recordset.FindFirst "[Schraubfall_ID] = " & Me!cob_suchfeld
End Sub



"Namen anpassen nicht vergessen!)