投稿者 an  (社会人) 投稿日時 2014/2/20 17:05:25
まずはじめに自分はほぼSQLServerは昔にちょっとしかやったことがないので、
SQLServerの詳細な挙動については
嘘があるかもしれませんので、ご了承ください。
(特に日付型などは方言があったような・・・?)




> と打ち込むと登録日時が2014/02/01~2014/02/20までのデータが表示され、自分が欲しい答えに一番近いコードとなっています。
> しかし、日付をTextBoxに置き換えるとビルドエラーが発生やプログラムの実行は出来るが肝心の検索結果が表示されない状況になっています。

TextBoxに置き換えたソースコードがないとなんとも言えませんが、話の流れから行くと、
下部6つ試したパターンの2つ目を指していますでしょうか?

とりあえず色々試したパターンでいくつかのエラーのパターンがあると思いますので、
軽く解説します。


5番目と6番目
>sql += " WHERE (登録日時 between " & 【>=】 TextBox14.Text.Trim & " and  " & <= TextBox15.Text.Trim & ")"
>            
> ▼エラー▼
> 式が必要です
>
> ======
>
> sql += " WHERE (登録日時 between " >= "#" & TextBox14.Text.Trim & "#" and " >= "【#" & textbox15.text.trim & "#")"】

> ▼エラー▼
> ステートメントの終わりを指定してください。

これについては、実行すらできないのでVBのコードに問題があります。
5番目は「&」と「>=」は連続して並ぶ事はありえないので、コンパイラが間違っている書き方だと注意しています。
6番目も似たようなものですが、よく見るとTextBox14とTextBox15で色が違ってませんでしょうか?
「"」の数が通常偶数個になるはずなのに奇数個になっているのが問題だと、コンパイラが注意しています。


1番目から4番目については、とりあえず実行できている様なので、
VBの構文としては(本当に正しいかは置いといて)許容範囲内ということです。
とりあえず、そこまで行っているのであれば、それが本当に正しいSQLかを確認してください。
どれかのパターンではSQL文に「TextBox14」とかって出ていませんか?

これは以前にも指摘しましたが、デバッグ作業です。
SQL文等のVB上ではただの文字列がDBにアクセスする際にDB側で解釈されるようなものについては、
その文字列が正しいかをMessageBoxでもなんでも良いので確認してください。
それが正しいと思ったら初めてDB側でSQL文を渡す処理を実行してください。
そうでないと、どこが間違っているかが分からないからです。

もし、正しいかよくわからないのであれば、
daive さんの 2014/2/8 20:09:21 の回答にある
SQL Server Management Studio等を使い、そのSQL文を実行してみてください。
そこでエラーが出たり、正常な結果が得られなければ、
まずは正常な結果が得られるまで、そこでSQL文を構築すべきです。

自分の場合は、まずSQL文だけを構築し、正常に動作ができることが確認できてから、
VB側にそのSQL文を組み込みます。



> sql += " WHERE (登録日時 between '2014/02/01' and '2014/02/20')"

> エラー無し、結果は表示される。イメージとしては一番近い。

近いというのはどう近いのでしょうか?
以前の話の流れを汲むと、'2014/02/20'のレコードが時分秒がオール0のものは取得できるが、
それ以外のレコードが取得できないというところが「近い」という事でしょうか?
であれば、このソースを元に進めていけば良いかと思います。

一旦テキストボックスは抜きにして、
これをどうすればほしいレコードが取れるかを考えてください。
HiDE-Adaさんの2014/2/15 17:52:46 の回答にヒントがあると思います。

そのうえで入力値(テキストボックス)と組み合わせてください。
HiDE-Adaさんの2014/2/20 16:09:39 の回答にもあるように「'」等に
注意しながら行ってください。





> anさん

> 先週のコード
> sql += " WHERE (生産者番号 between " & TextBox1.Text.Trim & " and " & TextBox2.Text.Trim & ")"

これについては、HiDE-Adaさんの回答と同じでしたので、省略します。