- 締切済み
検索絞り込み方法について
またまた行き詰まってお世話になります。 Access2000+VB.Net2003環境です。 データベースの中のデータを条件を指定して、合致するデータだけを表示させることをやっています。 下記のコードは、フォームを開いたときに一旦全件読み込んでデータグリッドに表示させ、フォームにおいてある条件を入力するテキストボックスから条件を入力して、検索ボタンを押したら該当データだけが表示されることをねらっています。試しに日付で開始と終了を指定して絞り込みに行くと再表示させたいところでエラーが起こります。(初期化まではうまくいっているように見えます)Fillメソッドの書き方が悪いのでしょうか? 最初は問題なく全件表示してくれるのですが、絞り込んだ後にうまくデータセットを更新するにはどうしたらいいのでしょうか?どうぞよろしくお願いいたします。 Private Sub MainDataDisp_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load OleDbDataAdapter1.Fill(objDsMainDisp, "T_メイン") End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim sdate As Date '検索開始年月日 Dim edate As Date '検索終了年月日 '検索SQLの定義 OleDbDataAdapter1.SelectCommand.CommandText = "SELECT * FROM T_メイン WHERE (T_メイン.日付 > sdate AND T_メイン.日付 < edate)" 'データセットを初期化して、データアダプタからデータを読み込む objDsMainDisp.Clear() OleDbDataAdapter1.Fill(objDsMainDisp, "T_メイン") End Sub
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- O_cyan
- ベストアンサー率59% (745/1260)
Bindingするとどうでしょうか OleDbDataAdapter1.Fill(objDsMainDisp, "T_メイン") DataGrid1.SetDataBinding(objDsMainDisp, "T_メイン") か Dim oCommand As New OleDbCommand() oCommand.CommandText = "SELECT * FROM T_メイン WHERE (T_メイン.日付 > sdate AND T_メイン.日付 < edate)" OleDbDataAdapter1.SelectCommand = oCommand objDsMainDisp.Clear() OleDbDataAdapter1.Fill(objDsMainDisp, "T_メイン") DataGrid1.SetDataBinding(objDsMainDisp, "T_メイン")
お礼
お礼の欄を使って経過の補足です。 VBのツールボックスの中に、OleDbCommand というのがありましたので使ってみたところ、先ほどご教示いただいた後半の分が実現できました。(メモリ変数にSQLが格納できました) ただそこまでで、やはりデータセットの再読込はうまくいかず、元の(最初に読み込まれた)データが表示されます。 条件(WHERE項)はどこに行ったのでしょうね? どうすれば絞り込めるのでしょうか。 ごく単純なこととタカをくくっていたのですが・・・。
補足
早速ありがとうございます。 まずBindを試してみましたが、その行へ行く前、すなわち当初質問のFillが記載されている行でやはり下記のメッセージが出て進めません。 'System.Data.OleDb.OleDbException' のハンドルされていない例外が system.data.dll で発生しました。' 従ってBindは結果的に試されておりません。 次にSQL分を変数に格納してやる方法ですが、「oledbcommand()」というセンテンスを受け付けてくれません。 後ろの()は書いてもすぐに消えますし、「oledbCommandは型ではありません」と表示されています。 どうすればよいでしょうか? 引き続きよろしくお願いします。