Fehler 3001, Argument vom falschen Typ bei LIKE mit führendem *

27/01/2010 - 16:23 von Klaus Trapp | Report spam
Hallo,

zu Fehler 3001 habe ich mittlerweile sehr viel im Netz gefunden aber,
das meiste zu Access mit ODBC; beides ist hier nicht gegeben.
Meine Situation ist folgende:

In einem VB6-Programm soll nach einer 14-stelligen Auftrags-Nr. gesucht
werden. Die Nummer wird in einer Textbox eingegeben.

Ich habe ein ADO-Recordset mit einem Feld AuftragsNr.
Das Recordset enthàlt Daten aus einer DB eines SQL Servers 2000
und wurde 'adOpenStatic' und 'adLockOptimistic' erstellt.

Die Suche selbst erfolgt auf einem Clone des Recordsets
und zwar so
rsClone.MoveFirst
rsClone.Find "AuftragsNr LIKE '<Suchbegriff>'"

wobei <Suchbegriff> der eingegeben Begriff ist.
Das làuft auch in den meisten Fàllen richtig ab.
Lediglich bei eine Suche mit führendem * tritt Fehler 3001 auf,
also bei Suche nach
*34a35 Fehler 3001
7834a* korrekt
*34a3* korrekt

Kann mir das einer erklàren?

Gruß aus Köln am Rhein
Klaus

www.trappdata.de
 

Lesen sie die antworten

#1 Peter Götz
28/01/2010 - 09:46 | Warnen spam
Hallo Klaus,

zu Fehler 3001 habe ich mittlerweile sehr viel im Netz gefunden aber, das
meiste zu Access mit ODBC; beides ist hier nicht gegeben.
Meine Situation ist folgende:

In einem VB6-Programm soll nach einer 14-stelligen Auftrags-Nr. gesucht
werden. Die Nummer wird in einer Textbox eingegeben.

Ich habe ein ADO-Recordset mit einem Feld AuftragsNr.
Das Recordset enthàlt Daten aus einer DB eines SQL Servers 2000 und wurde
'adOpenStatic' und 'adLockOptimistic' erstellt.

Die Suche selbst erfolgt auf einem Clone des Recordsets
und zwar so
rsClone.MoveFirst
rsClone.Find "AuftragsNr LIKE '<Suchbegriff>'"

wobei <Suchbegriff> der eingegeben Begriff ist.
Das làuft auch in den meisten Fàllen richtig ab.
Lediglich bei eine Suche mit führendem * tritt Fehler 3001 auf, also bei
Suche nach
*34a35 Fehler 3001
7834a* korrekt
*34a3* korrekt

Kann mir das einer erklàren?



Ja, die Hilfe zur Recordset.Find-Methode.
Dort steht u.a.:
If the comparison operator is "like", the string value may
contain an asterisk (*) to find one or more occurrences
of any character or substring. For example, "state like 'M*'"
matches Maine and Massachusetts. You can also use
leading and trailing asterisks to find a substring contained
within the values. For example, "state like '*as*'" matches
Alaska, Arkansas, and Massachusetts.

und weiter ist dort zu lesen:
Asterisks can be used only at the end of a criteria
string, or together at both the beginning and end of
a criteria string, as shown above. You cannot use
the asterisk as a leading wildcard ('*str'), or
embedded wildcard ('s*r'). This will cause an error.

Platzhalter (*) können nur am Ende eines Suchbegriffes, oder
zusammen "am Beginn UND am Ende" stehen
Der Platzhalter darf demnach nicht als einziger
am Anfang des Suchbegriffes stehen. Dein Suchbegriff
*34a35 löst also zurecht einen Fehler 3001 aus.
Wogegen 7834a* und *34a3* laut Hilfe zulàssig
sind.

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen