- PR -

VB.netでDataSet()について

1
投稿者投稿内容
uniqque
常連さん
会議室デビュー日: 2005/03/18
投稿数: 43
投稿日時: 2005-05-20 22:18
VB.netで、Access.mdbからデータを読み込むプログラムを作成しているのですが、
検索するプログラムがうまくいきません。

**********************************************************************
Private dataset As New DataSet()
Private olecn As New OleDb.OleDbConnection()
Private adapter As New OleDb.OleDbDataAdapter()

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
dataset.Tables("Table").Clear()

dataset=SearchSelectCommand("ID", Searchtext.text,"Table")

If dataset.Tables("Table").Rows.Count = 0 Then '見つからなかった場合の処理
msgbox("見つかりませんでした")
End If

End Sub

   Function SearchSelectCommand(ByVal str As String, ByVal searchWord As String, ByVal TableName As String) As DataSet
adapter.SelectCommand = New System.Data.OleDb.OleDbCommand("select * from [" & TableName & "] where " & str & " LIKE " & """*" & searchWord & "*""", olecn)
Dim dt As New DataSet()
dt.Tables.Add(New DataTable("Table"))

Try
adapter.Fill(dt.Tables(TableName))
Catch ex As Exception
MsgBox(ex.ToString)

End Try
   return dt
End Function

****************************************************************
AccessのクエリでSQL文を実行してみたところ、うまくいったので
問題はDataSetだと思うのですがよくわかりません・・・
どなたか教えていただけないでしょうか。
よろしくおねがいします。

[ メッセージ編集済み 編集者: delicho 編集日時 2005-05-20 22:18 ]
ほげた
ベテラン
会議室デビュー日: 2002/05/08
投稿数: 67
お住まい・勤務地: なごやん
投稿日時: 2005-05-21 00:41
どこで、どんなエラーが出るか書かないとなんとも・・・

引用:

delichoさんの書き込み (2005-05-20 22:18) より:

dataset.Tables("Table").Clear()


これ必要ですか?

[ メッセージ編集済み 編集者: ほげた 編集日時 2005-05-21 00:42 ]
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2005-05-21 08:39
引用:


Function SearchSelectCommand(ByVal str As String, ByVal searchWord As String, ByVal TableName As String) As DataSet
adapter.SelectCommand = New System.Data.OleDb.OleDbCommand("select * from [" & TableName & "] where " & str & " LIKE " & """*" & searchWord & "*""", olecn)
Dim dt As New DataSet()
dt.Tables.Add(New DataTable("Table"))

Try
adapter.Fill(dt.Tables(TableName))
Catch ex As Exception
MsgBox(ex.ToString)

End Try
   return dt
End Function


以下のように書き換えてみてください。

ADO.NETは、「*」の代わりに「%」を使用します。

コード:
adapter.SelectCommand = New System.Data.OleDb.OleDbCommand( _
 "select * from [" & TableName & "] where " & str & _
 " LIKE " & """*" & searchWord & "*""", olecn)
↓
adapter.SelectCommand = New System.Data.OleDb.OleDbCommand( _
 "select * from [" & TableName & "] where " & str & _
 " LIKE " & """%" & searchWord & "%""", olecn)


_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
uniqque
常連さん
会議室デビュー日: 2005/03/18
投稿数: 43
投稿日時: 2005-05-21 11:21
>>ほげたさん
>dataset.Tables("Table").Clear()
を入れないと検索ワードに何を入れても必ずtrueが返って来るんです。
>どこで、どんなエラーが出るか書かないとなんとも・・・
エラーはでないのですが検索が必ず失敗するんです。
Try
adapter.Fill(dt.Tables(TableName))
Catch ex As Exception
MsgBox(ex.ToString)

End Try
ここの下に MsgBox(dataset.Tables("Table").Rows(0).Item("ID"))
というコードを挿入すると、位置0に行がありません。という例外が投げられます・・・
コマンドウインドウで確認しましたが、たしかに要素はありませんでした。
検索が失敗してるかもしくはDataSetに原因があると思ったんです。
でもAccessのクエリでこのSQL文を実行するとちゃんと表示されるみたいなんです。

>>Accessさん
*を%に変えてみましたが同じ結果でした・・・
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-05-21 14:16
SQLの文字列はシングルクォーテーション。ダブルクォーテーションは列名。
_________________
uniqque
常連さん
会議室デビュー日: 2005/03/18
投稿数: 43
投稿日時: 2005-05-21 23:32
>>Jittaさん
'でやったら解決しました。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)