2016-07-12 18 views
0

Ich habe eine MS-Abfrage, die ein Problem bei Laufzeitfehler # verursacht 3071 Die Nachricht lang ist, hier ist der Anfang:MS-Access 2007-Abfrage Laufzeitfehler

Der Ausdruck eingegeben wird falsch oder zu komplex, um ausgewertet zu werden.

Die Abfrage hat viele Spalten und Funktionen, und mit einigem Versuch und Irrtum habe ich der säumige Teil der Abfrage isoliert zu sein:

... 
And 
[Component.Serial])>=Val(([Forms]![frm_RptFilter_Components].[fldAutoSeq])) 
And 
([Component.Serial])<=Val(([Forms]![frm_RptFilter_Components].[fldAutoSeq2]))) 

den Name: frm_RptFilter_Components ist der richtige Name des Formulars woher die Eingabe kommt und der Name: fldAutoSeq, fldAutoSeq2 sind die Namen der Felder in diesem Formular.

Der Ausdruck Forms ... ist korrekt und wird in anderen Teilen der Abfrage verwendet. Also ist Rechtschreibung nicht das Problem.

Die Spalte in der Datenbank ist "Serial" und eine Ganzzahl. Es wird mit einem Formularfeld (Textfeld) verglichen.

SELECT * FROM Component 
WHERE ((
    [Component.Serial])>=Val(([Forms]![frm_RptFilter_Components].[fldAutoSeq])) 
    And 
    ([Component.Serial])<=Val(([Forms]![frm_RptFilter_Components].[fldAutoSeq2]))) 

Also, ich bin verwirrt:

Ich kann der säumige Teil von sich selbst wie in ausführen. Hätte der betreffende Teil Syntaxfehler enthalten, hätte SELECT oben nicht funktioniert. Wenn Sie diesen Teil jedoch entfernen, gibt die ursprüngliche große Abfrage einen Fehler aus.

Meine Schätzung ist, dass wenn die Abfrage vom Unterformular ausgeführt wird, die Felder nicht korrekt an die Abfrage übergeben werden und numerische Felder sind, verursacht dies das Problem.

Sehen Sie den Grund, warum ich die Nachricht bekomme?

Antwort

1

Versuchen Sie folgendes:

And 
[Component.Serial]>=[Forms]![frm_RptFilter_Components].[fldAutoSeq] 
And 
[Component.Serial]<=[Forms]![frm_RptFilter_Components].[fldAutoSeq2] 

und diese beiden Parameter als Long angeben:

[Forms]![frm_RptFilter_Components].[fldAutoSeq] 
[Forms]![frm_RptFilter_Components].[fldAutoSeq2] 
+0

Sehr clever. Es funktionierte! Ich bin nicht sehr versiert in MS-Access, aber es war nicht offensichtlich für mich! – NoChance

+0

Es ist ein alter Trick. Es funktioniert, indem die möglichen Optionen für die Eingabe von den Formularfeldern eingegrenzt werden. – Gustav