PDA

Vollständige Version anzeigen : problem mit find first methode


wertkauf
14.05.2001, 08:03
Hallo, habe folgenden code mit fehlermeldung:

Dim rst As dao.Recordset
Dim db As dao.Database
Dim strLesezeichen As String
Dim strKriterium As String
Set db = CurrentDb()
Set rst = db.OpenRecordset("Products")

'Speichern des Lesezeichens
strLesezeichen = rst.Bookmark

'Gehe zu bisherigem Topangebot
strKriterium = " [shop] Like ´" & [Forms].[frm Men_Store].[Kombinationsfeld52] & _
"*´ AND [top_angebot]=´1´"
rst.FindFirst strKriterium

die zeile "str.kriterium..." wird als fehler markiert mit der meldung: Laufzeitfehler 438

Vielne Dank für Hilfe,

wertkauf

wertkauf
14.05.2001, 08:04
Hallo, habe noch vergessen, das ist unter access 2000.

also bis dann.

wertkauf

Kurt aus Kienitz
14.05.2001, 12:25
Hallo wertkauf,

Vorweg, ich benutze A97....

Mit fallen da zwei Dinge auf:
1. Die Deklaration von rst sollte Dim rst As Recordset lauten.
2. Die Referenz zum Kombinationsfeld sollte so aussehen: Forms![frm Men_Store].[Kombinationsfeld52]

Ist nicht viel, aber vieleicht hilft es ja.

Mike
14.05.2001, 13:01
setz doch mal einen Haltepunkt in Zeile

rst.FindFirst strKriterium

und sieh dir die Variable

strKriterium

im Direktfenster an.
Mike

wertkauf
14.05.2001, 13:14
Hallo, vielen Dank!

Jetzt hängt es leider in der nächsten Zeile mit der Fehlermeldung 3251, Operation wird für diesen Objekttyp nicht unterstützt.

Ich bange...

Gruß Wertkauf

Kurt aus Kienitz
14.05.2001, 13:46
Hallo wertkauf,

Was steht denn nun in strKriterium, wenn Du bei rst.FindFirst strKriterium einen Haltepunkt setzt ?

wertkauf
28.05.2001, 15:07
hallo,

sorry für den verspäteten dank, es kamen andere aufgaben dazwischen...

es steht da:
microsoft kann das in ihrem ausdruck angesprochene feld "|" nicht finden...

der code sieht so aus:

Private Sub Befehl89_Click()
DoCmd.GoToControl "Befehl67"
Befehl89.Visible = False

Dim rst As Recordset
Dim db As Database
Dim strLesezeichen As String
Dim strKriterium As String
Set db = CurrentDb()
Set rst = db.OpenRecordset("Products")

'Speichern des Lesezeichens
strLesezeichen = rst.Bookmark

'Gehe zu bisherigem Topangebot
strKriterium = " [shop] Like ´" & [me]![Kombinationsfeld52] & _
"*´ AND [top_angebot]=´1´"
rst.FindFirst strKriterium


'Ändern des Eintrages auf 0
With rst
If .Updatable Then
.Edit
!top_angebot = 0
.Update
End If
End With

'Gehe zu neuem Top-angebot
rst.Bookmark = strLesezeichen

'Ändern des Eintrags auf 1
With rst
If .Updatable Then
.Edit
!top_angebot = 1
.Update
End If
End With
rst.Bookmark = ""

End Sub

Vielen Dank für Hilfe
Wertkauf alias arne schulz

Judith
28.05.2001, 15:45
Hallo wertkauf,

Versuche einmal

strKriterium = " [shop] Like ´" & Forms![Formularname]![Kombinationsfeld52] & "*´ AND [top_angebot]=´1´"

statt

strKriterium = " [shop] Like ´" & [me]![Kombinationsfeld52] & "*´ AND [top_angebot]=´1´"

Denn ich glaube er mag das [me] nicht.

wertkauf
30.05.2001, 08:50
hallo,

danke für den tip,
bin jetzt auf folgendem stand:

Dim rst As Recordset
Dim db As Database
Dim strLesezeichen As String
Dim strKriterium As String
Set db = CurrentDb()
Set rst = db.OpenRecordset("Products")

'Speichern des Lesezeichens
strLesezeichen = rst.Bookmark

'Gehe zu bisherigem Topangebot
strKriterium = " [shop] Like '" & Forms![men_store]![Kombinationsfeld52] & _
"' AND [top_angebot] Like´1´"
rst.FindFirst strKriterium


'Ändern des Eintrages auf 0
With rst
If .Updatable Then
.Edit
!top_angebot = 0
.Update
End If
End With

'Gehe zu neuem Top-angebot
rst.Bookmark = strLesezeichen

'Ändern des Eintrags auf 1
With rst
If .Updatable Then
.Edit
!top_angebot = 1
.Update
End If
End With
rst.Bookmark = ""

End Sub

Bekomme die Fehlermeldung
"Fehlender Operator in Ausdruck" und die Zeile rst.FindFirst strKriterium wird unterlegt.

vielen dank für weitere tips,

wertkauf

Manuela Kulpa
30.05.2001, 17:22
<font face="Verdana" size="2">Hallo Arne!

So sollte es funktionieren:

<FONT SIZE=1 FACE=Courier New><FONT COLOR=#000080>Private</FONT> <FONT COLOR=#000080>Sub</FONT> Befehl89_Click()

DoCmd.GoToControl "Befehl67"

<FONT COLOR=#008000>'// Me davor ist immer besser</FONT>
Me!Befehl89.Visible = <FONT COLOR=#000080>False</FONT>

<FONT COLOR=#008000>'// Solltest du so belassen, da A2K</FONT>
<FONT COLOR=#000080>Dim</FONT> rst <FONT COLOR=#000080>As</FONT> DAO.Recordset
<FONT COLOR=#000080>Dim</FONT> db <FONT COLOR=#000080>As</FONT> DAO.Database

<FONT COLOR=#000080>Dim</FONT> strLesezeichen <FONT COLOR=#000080>As String</FONT>
<FONT COLOR=#000080>Dim</FONT> strKriterium <FONT COLOR=#000080>As String</FONT>

<FONT COLOR=#000080>Set</FONT> db = CurrentDb()
<FONT COLOR=#000080>Set</FONT> rst = db.OpenRecordset("Products", dbOpenDynaset)

<FONT COLOR=#008000>'Speichern des Lesezeichens</FONT>
strLesezeichen = rst.Bookmark

<FONT COLOR=#008000>'Gehe zu bisherigem Topangebot</FONT>
<FONT COLOR=#008000>'strKriterium = " [shop] Like ´" & [me]![Kombinationsfeld52] & "*´ AND [top_angebot]=´1´"</FONT>

<FONT COLOR=#008000>'// hier der veränderte Aufbau, da das Feld top_angebot ein Zahlfeld ist</FONT>
<FONT COLOR=#008000>'// und du dich bereits im aktuellen Formular befindest. Zudem hast du kein</FONT>
<FONT COLOR=#008000>'// richtiges Apostrophe-Zeichen ' gesetzt</FONT>

strKriterium = "[shop] Like '" & Me!Kombinationsfeld52 & "*' AND [top_angebot]=1"
rst.FindFirst strKriterium

<FONT COLOR=#008000>'// Du solltest auch überprüfen, ob überhaupt was gefunden</FONT>
<FONT COLOR=#008000>'// worden ist</FONT>
<FONT COLOR=#000080>If</FONT> <FONT COLOR=#000080>Not</FONT> rst.NoMatch <FONT COLOR=#000080>Then</FONT>
<FONT COLOR=#008000>'Ändern des Eintrages auf 0</FONT>
<FONT COLOR=#000080>With</FONT> rst
<FONT COLOR=#000080>If</FONT> .Updatable <FONT COLOR=#000080>Then</FONT>
.Edit
!top_angebot = 0
.Update
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>If</FONT>
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>With</FONT>

<FONT COLOR=#008000>'Gehe zu neuem Top-angebot</FONT>
rst.Bookmark = strLesezeichen

<FONT COLOR=#008000>'Ändern des Eintrags auf 1</FONT>
<FONT COLOR=#000080>With</FONT> rst
<FONT COLOR=#000080>If</FONT> .Updatable <FONT COLOR=#000080>Then</FONT>
.Edit
!top_angebot = 1
.Update
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>If</FONT>
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>With</FONT>

<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>If</FONT>
rst.Bookmark = ""

<FONT COLOR=#008000>'// Sollte man nie vergessen</FONT>
<FONT COLOR=#000080>If</FONT> <FONT COLOR=#000080>Not</FONT> rst <FONT COLOR=#000080>Is</FONT> <FONT COLOR=#000080>Nothing</FONT> <FONT COLOR=#000080>Then</FONT> rst.<FONT COLOR=#000080>Close</FONT>: <FONT COLOR=#000080>Set</FONT> rst = <FONT COLOR=#000080>Nothing</FONT>
<FONT COLOR=#000080>If</FONT> <FONT COLOR=#000080>Not</FONT> db <FONT COLOR=#000080>Is</FONT> <FONT COLOR=#000080>Nothing</FONT> <FONT COLOR=#000080>Then</FONT> db.<FONT COLOR=#000080>Close</FONT>: <FONT COLOR=#000080>Set</FONT> db = <FONT COLOR=#000080>Nothing</FONT>

<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>Sub</FONT></FONT>

Bei Fragen, melde dich!

Gruß</font>

Sascha Trowitzsch
30.05.2001, 22:55
Vielleicht noch eine kleine Erklärung zu Manualas Code:

FindFirst funktioniert nicht mit Recordsets vom Typ dbTable. Ein solches ist jedoch Default bei der einfachen Syntax

Set rst = db.OpenRecordset("Products")

Es ist deshalb

Set rst = db.OpenRecordset("Products",dbOpenDynaset)

unerlässlich

Ciao, Sascha

mazahn
01.06.2001, 17:15
Der Datentype für strLesezeichen sollte Variant sein, dann müsste es funktiionieren.

wertkauf
25.06.2001, 12:06
hallo, liebe leut,

vielen herzlichen dank für die vielen antworten,

werf mich jetzt sofort dran,

war im urlaub, deshalb die zeitliche verzögerung.

mit den besten grüßen aus dem hessischen,

wertkauf

wertkauf
27.06.2001, 10:54
vielen vielen dank,

läuft jetzt ohne fehlermeldung durch, habe aber offenbar ein problem mit der bookmark eigenschaft.

ich will ja, daß beim aktuell angezeigten datensatz ein bookmark gesetzt wird, zu dem später zurückgekehrt wird, um den wert "topangebot" auf -1 (nicht 1, war auch noch bisher ein von mir unbemerkter fehler)zu setzen. es wird aber egal, von welchem datensatz aus ich starte, immer der erste wert des recordsets bei der bookmark-sache aufgerufen und dann dort "topangebot" auf -1 gesetzt.

der code jetzt:

Private Sub Befehl89_Click()
DoCmd.GoToControl "Befehl67"
Me!Befehl89.Visible = False

Dim rst As DAO.Recordset
Dim db As DAO.Database
Dim strLesezeichen As String
Dim strKriterium As String
Set db = CurrentDb()
Set rst = db.OpenRecordset("Products", dbOpenDynaset)

'Speichern des Lesezeichens
strLesezeichen = rst.Bookmark

'Gehe zu bisherigem Topangebot
strKriterium = "[shop] Like '" & Me!Kombinationsfeld52 & "*' AND [top_angebot]=(-1)"
rst.FindFirst strKriterium

'Überprüfung auf Suchergebnisse
If Not rst.NoMatch Then

'Ändern des Eintrages auf 0
With rst
If .Updatable Then
.Edit
!top_angebot = 0
.Update
End If
End With


'Gehe zu neuem Top-angebot
rst.Bookmark = strLesezeichen

'Ändern des Eintrags auf -1
With rst
If .Updatable Then
.Edit
!top_angebot = (-1)
.Update
End If
End With
End If
rst.Bookmark = ""

If Not rst Is Nothing Then rst.Close: Set rst = Nothing
If Not db Is Nothing Then db.Close: Set db = Nothing

End Sub

Nochmal vielen dank für die hilfen bis jetzt.
Gruß wertkauf