PDA

Vollständige Version anzeigen : datensatzsuche im unterformular (vom unterformular aus)


Jabroni
10.05.2004, 15:08
hallo zusammen,

ich habe folgendes problem:

zwei tabellen bilden ein haupt- und ein unterformular.
im HF wird ein wareneingangsbuch geführt (eingabe des kunden, beleg, datum, ect.),
im UF werden artikel, menge, zustand der ware, ect. erfasst.

nun möchte eine schaltfläche im UF einfügen, um die suche nach artikelnummern zu ermöglichen.
erstelle ich nun im UF eine schaltfläche mit der suchfunktion durch den schaltflächenassi, so kann ich im UF keine datensätze suchen/ finden. die suche findet im HF statt.
im HF habe ich bereits eine suchschaltfläche erstellt (diese durchsucht das HF, z.b. nach kunden)


wie kann ich dieses phänomen im UF ändern??

danke für eure hilfe/ tips :)

gruss
KAI

SNowack
10.05.2004, 15:31
Hallo,

wie sieht denn der bisherige Code hinter dem Button aus?

Gruss Stefan

Jabroni
11.05.2004, 06:24
Original geschrieben von SNowack
Hallo,

wie sieht denn der bisherige Code hinter dem Button aus?

Gruss Stefan

Moin Stefan,

hier der Code (durch den Assistenten erstellt):

Private Sub artikelsuche_Click()
On Error GoTo Err_artikelsuche_Click


Screen.PreviousControl.SetFocus
DoCmd.DoMenuItem acFormBar, acEditMenu, 10, , acMenuVer70

Exit_artikelsuche_Click:
Exit Sub

Err_artikelsuche_Click:
MsgBox Err.Description
Resume Exit_artikelsuche_Click

End Sub

Wenn ich das HF öffne und den Button im UF klicke, wird die Suchmaske geöffnet, suche in Feld "Kundenname" (feld im HF), vergleichen: "Ganzes Feld", Aktuelles Feld (haken drin) ist aktiviert. Das "vergleichen" und das "aktuelle" Feld kann ich manuell ändern - kein Problem. Dennoch, wenn ich eine Artikelnummer (Feld im UF) eingebe, die bereits erfasst wurde, erscheint der Accesshinweis, dass das Durchsuchen beendet und kein Element gefunden wurde :(

Irgendwelche Ideen??

Gruss
KAI

SNowack
11.05.2004, 07:03
Hallo,

probier doch mal folgenden Code:

dim rsCl as object
dim SuchStr as string

suchstr=inputbox("Artikelnummer")
suchstr="[DeinTabellenFeldArtikelNummer]='" & suchstr & "'"

set rscl=me.recordset.clone
rscl.findfirst suchstr
if rscl.nomatch then
msgbox"Artikelnummer nicht gefunden"
else
me.bookmark=rscl.bookmark
end if

suchstr=""
set rscl=nothing


Gruss Stefan

Jabroni
11.05.2004, 07:53
Original geschrieben von SNowack
Hallo,

probier doch mal folgenden Code:

dim rsCl as object
dim SuchStr as string

suchstr=inputbox("Artikelnummer")
suchstr="[DeinTabellenFeldArtikelNummer]='" & suchstr & "'"

set rscl=me.recordset.clone
rscl.findfirst suchstr
if rscl.nomatch then
msgbox"Artikelnummer nicht gefunden"
else
me.bookmark=rscl.bookmark
end if

suchstr=""
set rscl=nothing


Gruss Stefan


Hi Stefan,

danke für den Code.

Habe diesen nun so eingefügt:

Dim rsCl As Object
Dim SuchStr As String

SuchStr = InputBox("Artikelnummer")
SuchStr = "[Artikelnummer]='" & SuchStr & "'"

Set rsCl = Me.Recordset.Clone
rsCl.FindFirst SuchStr
If rsCl.NoMatch Then
MsgBox "Artikelnummer nicht gefunden"
Else
Me.Bookmark = rsCl.Bookmark
End If

SuchStr = ""
Set rsCl = Nothing


Wenn ich nun klicke, kommt folgende Fehlermeldung:

"Fehler beim Kompilieren:
Methode oder Datenobjekt nicht gefunden"

".recordset" ist markiert.

:( Versteh ich nicht...

Gruss
KAI

SNowack
11.05.2004, 09:06
Hallo Kai,

welche Access-Version benutzt Du?

Gruss Stefan

Jabroni
11.05.2004, 10:40
hi,

XP und A97. Kann es daran scheitern??
Oder muss ich in dem "suchstr" das UF ansprechen, in dem sich das Feld "Artikelnummer" befindet??

Gruss
KAI

SNowack
11.05.2004, 11:13
unter 97 muss es, meine ich zumindest, "set rscl=me.recordsetclone" heißen. XP sollte Dir keinen Fehler bringen.

hast Du unter Extras/Verweise im VBA-Editor den Verweis auf MS DAO gesetzt?

Gruss Stefan

Jabroni
11.05.2004, 11:25
Ja,

Microsift DAO 3.51 Object Library ist angeklickt.
Ist die Version zu alt??

Gruss
KAI

SNowack
11.05.2004, 13:40
Hallo Kai,

probier mal:

Dim rsCl As Object
Dim SuchStr As String

SuchStr = InputBox("Artikelnummer")
SuchStr = "[Artikelnummer]='" & SuchStr & "'"

Set rsCl = Me.RecordsetClone
rsCl.FindFirst SuchStr
If rsCl.NoMatch Then
MsgBox "Artikelnummer nicht gefunden"
Else
Me.Bookmark = rsCl.Bookmark
End If

SuchStr = ""
Set rsCl = Nothing

Gruss Stefan

Jabroni
11.05.2004, 15:31
Hi Stefan,

danke für den Code.
Ein Schritt komme ich nun weiter - sprich: es öffnet sich die Inputbox. Dort gebe ich die Artikelnummer ein (auch in der Tabelle enthalten). Als Ergebnis erhalte ich nun den Vermerk "Keinen Eintrag gefunden".

Führe ich nun den Button nur im einzelnd geöffneten UF (nicht über das HF)durch, springt der Cursor zur ersten gefundenen Artikelnummer.

Hat das Problem evtl. mit der 1:n Beziehung der HF-Tabelle mit UF-Tabelle zusammen??

Gruss
KAI

SNowack
11.05.2004, 15:37
Hallo Kai,

wenn die Formulare miteinander über einen Schlüssel verknüpft sind, findet Access auch nur die Artikel die zu diesem Hauptsatz (HForm) hinterlegt wurden. Evtl. erläuterst Du noch einmal, wozu Du die Suche benötigst.

Gruss Stefan

Jabroni
12.05.2004, 06:32
Moin Stefan,

es handelt sich bei der DB um eine Rücksendungsbearbeitung von Waren. Im HF (Tabelle) wird der Absender mit Belegdaten erfasst, im UF (Tabelle) werden die zurückgesandten Artikel nebst Artikelzustand erfasst.

Ziel des Suchbuttons im UF ist es, nach erfassten Artikeln zu suchen.
z. B. wenn ein Kunde behauptet, er habe den Artikel 0815 zurückgesandt und im HF anhand des Kundennamens nichts gefunden werden kann (aufgrund von Schreibfehlern, ect.).

Kann man Access nicht irgendwie sagen, dass bevor er suchen soll, ein Feld im UF aktiviert wird (durch einen SetFocus-Befehl) und dann erst die Suchmaske geöffnet wird??

Gruss
KAI

SNowack
12.05.2004, 07:22
Guten Morgen Kai,

die Formulare werden Dich hierbei nicht weiterbringen. Du benötigst eine Suche nach allen erfassten Artikeln. Wird der Artikel gefunden, muss der dazugehörige Datensatz im HF + UF angezeigt werden.

1. Setze den Suchbutton in das Hauptformular
2. Bau Dir dafür eine Abfrage die Alle Datensätze aus Absender enthält und die dazugehörigen aus den Artikeln. Als Felder benötigst Du die Artikelnummer und den PrimärschlüsselBestellung
3. Hinterlege folgenden Code:

dim db as dao.database
dim rs as dao.recordset
Dim rsCl As Object
Dim SuchStr As String
dim SuchStr2 as string
dim PSBest as long
dim Antwort as integer

SuchStr = InputBox("Artikelnummer")
SuchStr = "[Artikelnummer]='" & SuchStr & "'"

set db=currentdb
set rs=db.openrecordset("DeineAbfrage",dbopendynaset)

if not rs.bof then
rs.movefirst
rs.findfirst suchstr
Do until rs.nomatch
psbest=rs!DeinBestellSchluessel
suchstr2="[DeinBestellschluessel]=" & psbest

Set rsCl = Me.RecordsetClone
rsCl.FindFirst SuchStr2
Me.Bookmark = rsCl.Bookmark
antwort=msgbox("Datensatz richtig?",vbyesno+vbquestion,"Suche richtig?")
if antwort=vbyes then
exit do
end if
rs.findnext suchstr
loop
end if

set db=nothing
set rs=nothing
psbest=0
SuchStr = ""
suchstr2=""
Set rsCl = Nothing
antwort=0


Gruss Stefan

Jabroni
12.05.2004, 15:09
Hi Stefan,

es hat funktioniert und die Suche läuft!!! Ich bin sprachlos.
Danke!!! :) :) :) :)

Gruss
KAI