2016-10-07 5 views
0

私は回避できない問題を解決しています。私は1つのテキストボックス値の基準に対して複数の列をチェックしているAccessクエリを持っています。すべてが最初の3つの列でうまくいきます。彼らはすべて弦です。私は4番目の列を追加するとアクセス文字列の条件としてテキストボックスを使用するクエリ

SELECT Req.Ctrl, Vend.VendNick, Req.CSCReq, Req.PO, Req.Status, Line.Quote 
FROM Line INNER JOIN (Vend INNER JOIN Req ON Vend.[VendID] = Req.[Vend]) 
ON Line.Ctrl = Req.Ctrl 
WHERE (((Req.CSCReq)=[Forms]![Index]![Box2])) OR 
(((Req.PO)=[Forms]![Index]![Box2])) OR 
(((Line.Quote)=[Forms]![Index]![Box2])); 

は、私はこれを仮定してい

SELECT Req.Ctrl, Vend.VendNick, Req.CSCReq, Req.PO, Req.Status, Line.Quote 
FROM Line INNER JOIN (Vend INNER JOIN Req ON Vend.[VendID] = Req.[Vend]) 
ON Line.Ctrl = Req.Ctrl 
WHERE (((Req.CSCReq)=[Forms]![Index]![Box2])) OR 
(((Req.PO)=[Forms]![Index]![Box2])) OR 
(((Line.Quote)=[Forms]![Index]![Box2])) OR 
(((Req.Ctrl)=[Forms]![Index]![Box2])); 

「...表現が間違って入力され、またはそれが複雑すぎる」エラーを取得する第四ためであります列はintであり、この特定の列のテキストボックスの値のパラメータは正しく定義されていません。最初の3つの文字列がまだ文字列として表示されるように、クエリの列レベルまたはSQLでこの問題に対処する方法はありますか?ただし、4番目の値はintと見なされますか?さておき、私はMS Accessとブラケットのその乱用を嫌いとあなたを変換する代わりに...

答えて

-1

は、STR()関数を使用しますテーブル内のすべての行の文字列を文字列値と比較するには、逆の操作をCIntで行います。それは方法より効率的になります。

(((Req.Ctrl)=CInt([Forms]![Index]![Box2]))); 
+0

すべてのReq.Ctrlを文字列に変換してtexboxと比較するのは非常に高価になります。入力値を常に変換する方が良いです。 – Ted

1

str(Req.Ctrl)=[Forms]![Index]![Box2] 

:助けを

おかげ

0

私は私が行くようにしようとしていたところ、私が得るのを助けるためにあなたの答えと少しグーグルの両方を組み合わせました。迅速な対応に感謝します。テッドの答えは第4列の仕事をしましたが、他の3人は同じエラーで失敗し始めました。 JohnHCのも同じでした。以下は最終的に働いたものです。

何らかの理由で、CVarがすべての処理を開始しました。なぜか分かりませんが、動作します。

+0

もう1つ見てください。@ Tedの答えです。つまり、列の型に合わせてパラメータを整数にキャストします(特に答えが分からない理由が特にあります)。 – onedaywhen

関連する問題