+49 7531 9060-10| service@combit.net

Syntax Filterausdruck

Hallo,
ich habe folgenden Filter erstellt:
bFilter = oRecordSet.SetFilter("""Companies"".""CustomerNo"" = 1844")
Mit der Konstante funktioniert der Auscdruck. Jetzt Habe ich versucht die Konstante mit einer Variablen zu ersetzen:

sCompanyID = oCurrentRecord.GetContentsByName("Kdnr")
....	
bFilter = oRecordSet.SetFilter("""Companies"".""CustomerNo"" =  "" & sCompanyID & """)

Leider bekomme ich kein Ergebnis obwohl sCompanyID den richtigen Wert enthält. Ich tippe auf einen Syntaxfehler.

Mit freundlichen Grüßen
Harald Radek

Hallo,

was mir sofort ins Auge sticht: Im Filter scheint das Feld "CustomerNo" zu heißen. ABER bei Ihrem Ausleseversuch über GetContentsByName übergeben Sie "Kdnr"! Ich kann aus dem Kontext jetzt nicht erkennen, ob Sie hier in der gleichen Ansicht sind, wie die, in der Sie filtern möchten, aber wenn ja, muss es auch dort oCurrentRecord.GetContentsByName("CustomerNo") heißen. Es müssen in Scripten immer die physikalischen Feldnamen genutzt werden.

Sie können ja einfach mal MsgBox sCompanyID ausgeben, dann sehen Sie, was Sie „kriegen“.

Bezogen auf Syntax Error: Wenn Sie cRM beenden und das Programm „Debwin4.exe“ aus dem Installationsverzeichnis (ich weiß gerade nicht auswendig ob wir bei der Installation dafür ein Programmicon erstellen) starten und dann den cRM, dann würden Sie einen SQL-Syntax-Fehler in rot im Debwin-Fenster auftauchen - inklusive der SQL-Abfrage, die Ihr Script jetzt wirklich „zusammengebaut“ hat. Sehr praktisch.

Alternativ können Sie auch mal den Wert von bFilter ausgeben. Ist der False, dann heißt das NICHT, dass es keine Treffer gab, sondern dass der Filter erst gar nicht angewendet werden konnte (eben ein Syntaxfehler zum Beispiel). Ob Sie wirklich Treffer haben (wenn bFilter True ist), das erfahren Sie, wenn das anschließende oRecordSet.MoveFirst den Wert True liefert.

Viel Erfolg! :four_leaf_clover:

Hallo Björn,
ich übergebe der Variablen cCompanyID dern Inhalt des Feldes Kdnr. Dies habe ich auch per MsgBox geprüft. Wie ich die Variable nenne ist ja egal.
Sicher ist es ein Syntaxfehler da der Suchausdruck mit der Konstanten ja funktioniert. Wie würden Sie die Abfrage zusammenbauen ?
Danke

Hallo Herr Radek,

ich hab mir Ihren Code nochmal genauer angesehen: der Inhalt eines festen Vergleichswertes als Zeichenkette muss bei SQL in einfache Anführungszeichen eingeschlossen werden, Sie benutzen doppelte.

So sollte das korrekt sein:
bFilter = oRecordSet.SetFilter("""Companies"".""CustomerNo"" = '" & sCompanyID & "'")

(Man sieht hier den Unterschied fast nicht, weil die einfachen ja direkt neben den doppelten, die die VBScript Zeichenkette einschließen, stehen.)

Alternativ kann ich für den konkreten Anwendungsfall auch die Methode
bFilter = oRecordSet.SetFilterByFieldName("CustomerNo", sCompanyID, 1, 0)
empfehlen (= exakte Suche im Feld „CustomerNo“ nach dem Wert, der in sCompanyID steht, wobei Großkleinschreibung ignoriert werden soll).

Ich hoffe, ich konnte helfen.

Danke jetzt funktioniert es. Es waren die einfachen Anführungszeichen.

© combit GmbH