DataTableのレコードを検索して抽出するには

解決


おも  2007-11-27 00:54:50  No: 138202

お世話になっております。
メモリ上にあるデータテーブルなのですが、
任意の値の含まれるレコードを全て取得するにはどうしたらいいでしょうか。

具体的には、テキストボックスに入力された文字列でデータテーブルを検索し、その文字列を含む値が1つでもあるレコードを全て取得し、
別のデータテーブルに入れたいと思います。
データテーブル内のデータは全て文字列です。

Dim foundRows() As Data.DataRow
foundRows = DataSet1.Tables("Customers").Select("CompanyName Like 'A%'")

MSDNを見たところ、このようなサンプルがあったのですが、
("CompanyName Like 'A%'")
ここはどう書き直したらいいのでしょうか?
CompanyNameというのが列名を指しているのはわかるのですが、
列名を限定せずレコード全体で検索したいと思います。
また、"A%"というのが意味がわかりません。
TextBox1.textを使用して検索する方法を、何卒ご教授ください。

もうひとつ
http://msdn2.microsoft.com/ja-jp/library/det4aw50(VS.80).aspx
こちらのサンプルも試そうと思ったのですが、

Private Sub GetRowsByFilter()
    
    Dim table As DataTable = DataSet1.Tables("Orders")

    ' Presuming the DataTable has a column named Date.
    Dim expression As String
    expression = "Date > '1/1/00'"
    Dim foundRows() As DataRow

    ' Use the Select method to find all rows matching the filter.
    foundRows = table.Select(expression)

    Dim i As Integer
    ' Print column 0 of each returned row.
    For i = 0 to foundRows.GetUpperBound(0)
       Console.WriteLine(foundRows(i)(0))
    Next i
End Sub

expression = "Date > '1/1/00'
↑ここの意味がわかりません。

どうか、よろしくお願いいたします。


特攻隊長まるるう  2007-11-27 01:55:55  No: 138203

VB の文法じゃないんですよ。完全に文字列として処理されてるでしょ?
SQL 文というデータベースで使われている別の言語の、条件句が利用されて
います。
SQL について解説されたサイトはたくさんありますので、とりあえず
『SQL 入門』あたりのキーワードで WEB 検索してみてください。

>また、"A%"というのが意味がわかりません。
" Like 'A%' "
という文字列が『Aから始まる文字列』を意味します。
『SQL ワイルドカード』というキーワードで調べてください。データベースに
よってワイルドカードとして使える文字列は異なります。
foundRows = DataSet1.Tables(" 顧客 ").Select(" 会社名が Aから始まる ")
といったイメージ。完全に別の言語の文字列を、引数として渡せば、内部で解釈されて
結果が返ってきます。
>TextBox1.textを使用して検索する方法を、何卒ご教授ください。
文字列として編集してください。
[Visual Basic 中学校 > 入門講座 > 第6回 文字・数値・日付のあつかい]
http://homepage1.nifty.com/rucio/VBNyumon/BEGIN6.htm

>もうひとつ
>http://msdn2.microsoft.com/ja-jp/library/det4aw50(VS.80).aspx
>こちらのサンプルも試そうと思ったのですが、
>expression = "Date > '1/1/00'
>↑ここの意味がわかりません。
そのリンク先の[解説]から Expression のリンクが貼ってあって説明されてますよね?

expression = "Date > '1/1/00'
日付が2000/1/1より大きい(未来)だとは思いますが、2000/1/1になるか、1900/1/1になるか
100/1/1になるか、エラーになるか、は環境に依存します。
ローカルのデータテーブルだと、システムの短い日付に依存しそうですが。。。
自分でテストして確認してください。
[[VB] 日付リテラルにより日付を設定するときの注意]
http://support.microsoft.com/kb/413605/JA/
↑かなり古い情報ですが、いまだに同じような問題を含んでます。
関連情報にも目を通してください。


おも  2007-11-27 02:49:52  No: 138204

特攻隊長まるろう様

早速のアドバイスありがとうございます。
後々データを管理しやすくなるだろうと思いDataTableを使っておりましたが、
「DataGridViewにすぐに表示を反映してくれる多次元配列」
というだけの認識でここまで使っておりました。

「VisualBasic中学校」さんのところのデータベースに関しての講座を
はじめとして、いくつか参考書にも目を通してみたのですが、
「データベースに接続」という最初のところで意味がわからなくなってしまいます。

何を勉強したらいいかもわからないような状態でして、
恐れ入りますがアドバイス頂きたく思いますm(_ _)m

mdbファイルなどに保存してあるわけではなく、
メモリ上にDataTableを宣言して使っているのですが、
DataTableに手を出す順番を間違えてしまったでしょうか・・・?
Accessなどデータベースを扱うプログラムは使ったことがないのですが、
まずこちらでデータベースファイルを作ってから、
接続などの手順に従って勉強していったほうが理解しやすいでしょうか。

つかみどころの無い質問で済みませんが、
アドバイス頂きたく思います。

何卒よろしくお願いいたしますm(_ _)m


特攻隊長まるるう  2007-11-27 03:22:18  No: 138205

[DataTable クラス]
http://msdn2.microsoft.com/ja-jp/library/system.data.datatable(VS.80).aspx
>DataTable は ADO.NET ライブラリ内の中心的オブジェクトです。
[@IT ADO.NET基礎講座]
http://www.atmarkit.co.jp/fdotnet/basics/adonet_index/index.html

DataTable はデータベースを検索するのに特化したクラスです。
ですからデータベースに利用されている技術が流用されています。
そのまま使うなら必要な部分を勉強するしかないでしょう?

>「VisualBasic中学校」さんのところのデータベースに関しての講座を
>はじめとして、いくつか参考書にも目を通してみたのですが、
>「データベースに接続」という最初のところで意味がわからなくなってしまいます。
・・・『SQL 文』について調べていないようですが???なぜ?
アドバイスを受けてからは、教えてもらうばかりで自分で調べないということですか?

結局、VB の文法ではない文字列の意味が分からなかっただけでしょ?
『SQL 文』を勉強してきてください。特に条件句。

>Accessなどデータベースを扱うプログラムは使ったことがないのですが、
>まずこちらでデータベースファイルを作ってから、
>接続などの手順に従って勉強していったほうが理解しやすいでしょうか。
SQL 文がデータベース用の言語ですから、実際に動かしたほうがイメージが
つかめやすい可能性はあります。

でも、Select メソッドの引数に使われている文字列の意味が分かれば
いいのでしょう?データベースは勉強しなくてもいいですよ?

極論を言えば、Select メソッドを使わず、DataTable から1個1個データを
取り出して、正規表現とか…それも分からなければ、String.IndexOf メソッド
などで文字列検索しても実現できるわけですから、VB だけの知識でデータベース
の勉強を全くしなくても実現できます。

好きなようにすればいいと思います。


おも  2007-11-27 04:04:36  No: 138206

ご返信ありがとうございます。

SQL文について検索しては見たのですが、
構文の理解はできてもそれをVB内でどう扱えばよいのかがわからず、
最初から勉強が必要かなと感じました。
そこで、実際にVB内でSQL文を扱うサンプルやサイトなどを探したのですが、
まずデータベースに接続というところについて書いてあって、
なかなか理解できず躓いてしまいました・・・。

ただ、先ほどVisualBasic中学校さんのサイトで順を追って
勉強してみたところ、DataTableというものがどういう扱いなのかが
少しずつ理解できてきた気がします。

せっかくなので、腰を落ち着けて勉強してみたいと思います。
また躓いたときにご質問させていただくかと思いますが、
何卒よろしくお願いいたしますm(_ _)m
どうもありがとうございました。


おも  2007-11-27 08:20:44  No: 138207

たびたび恐れ入ります。

>・・・『SQL 文』について調べていないようですが???なぜ?

すみません、おっしゃった意味がやっとわかりました。
SQL文に関しては勉強してみたのですが、
文字列で囲まれていて、これらをどうやってVBの中で変数などをつかって
表記すればいいのかわかりませんでした。

SQL文になるように、普通に文字列操作したテキストを
SQL文を入れるところに入れればよかっただけなんですね!

なんか難しく考えすぎていたようです。
どうもありがとうございました!


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加