PDA

Vollständige Version anzeigen : Findfirst


Maurice333
18.02.2003, 15:34
Hallo,

ich habe Probleme mit der Findfirst Methode. Basis ist W2K & A2K. Hier erstmal der Code:

Sub zuordnen()
Dim strkunde As String
Dim straktion As String
Dim strleitung As String
Dim lngvnr As Long
Dim strvnr As String
Dim dbe As DAO.DBEngine
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim rst2 As DAO.Recordset
Dim rst3 As DAO.Recordset

Set dbe = DBEngine
Set db = CurrentDb
Set rst = db.OpenRecordset("tbl_tempB", dbOpenDynaset)
Set rst2 = db.OpenRecordset("tbl_leitungen_IP", dbOpenDynaset)
Set rst3 = db.OpenRecordset("tbl_aktionen_leitung", dbOpenDynaset)

rst.MoveFirst
Do While rst.Fields("VorgangsNr").Value <> ""
lngvnr = rst.Fields("VorgangsNr").Value
If rst.Fields("Debitor").Value <> "" Then
Exit Sub
Else
Do While lngvnr = rst.Fields("VorgangsNr").Value
straktion = rst.Fields("AKTION").Value
rst3.FindFirst straktion
If Not rst3.NoMatch Then
strleitung = rst.Fields("VON_STANDORT").Value
rst2.FindFirst strleitung
If rst2.NoMatch Then
MsgBox "Fehler Kunde nicht gefunden", vbOKOnly, "Fehler"
Else
strkunde = rst2.Fields("Debitor").Value
strvnr = str(lngvnr)
rst.FindFirst strvnr
While rst.Fields("VorgangsNr").Value = lngvnr
rst.Fields("Debitor").Value = strkunde
rst.MoveNext
Wend
strvnr = ""
End If
Else
rst.MoveNext
End If
Loop
End If
Loop
End Sub


Ich bekomme in der Zeile mit dem ersten Findfirst den Fehler 3070 "Das Microsoft Jet-Datenbankmodul erkennt 'XXX' nicht als gültigen Feldnamen oder -ausdruck".
Vorher hatte ich die Recorsets nicht als Dynaset geöffnet, sonder ohne jegliche Typ-Angabe, das brachte mir den Fehler 3251 "Operation wird für diesen Objekttyp nicht unterstützt"
Mit Recordsets vom Typ Table sah es genau so aus (3251).

Die Verweise habe ich schon gecheckt und auch schon mal hier im Forum gestöbert, komme aber nicht weiter, was nun?

Gruss Maurice

SNowack
18.02.2003, 15:42
Hallo,

Du musst den Suchstring anders aufbauen:


straktion = "[DeinZuDurchsuchendesFeld] = '" & rst.Fields("AKTION").Value & "'"
rst3.FindFirst straktion


HTH

erwin
18.02.2003, 15:48
wie sollen <b>wir</b> wissen, was jetzt in

rst.Fields("AKTION").Value

steht. Auf jeden Fall muss das - damit es prinzipiell funktioniert - ein gültiger SQL-WHERE Ausdruck sein zB. (sinngemäß):

[blöder Tabfeldname] = 'irgendwas'

oder

besserer_Tabzahlenfeldname = 4711

btw. erscheint mir dein Konstrukt
Do While rst.Fields("VorgangsNr").Value <> ""
lngvnr = rst.Fields("VorgangsNr").Value
If rst.Fields("Debitor").Value <> "" Then

bzgl. der Datentypenverwendung sehr "originell"
idR. prüft man nicht gesetzte Tab.Felder auf NULL und nicht auf "" (Leerstring), wobei ein Long-Datentyp als Inhalt niemals einen Leerstring haben kann !

Also:
Do While isnull(rst!VorgangsNr)

so long Erwin...

Maurice333
18.02.2003, 15:58
Hallo,

vielen Dank für die schnellen Antworten, besonders an Stefan, habe deinen Rat befolgt und es funktioniert jetzt.

CU Maurice