- PR -

頭文字で抽出。

投稿者投稿内容
NAOKO
会議室デビュー日: 2003/12/30
投稿数: 7
投稿日時: 2004-01-04 05:59
VS.NETを使用して、プログラムの勉強をしているのですが、
ドロップダウンリストにア〜ワという頭文字を入れて、それを元にテーブルからデータを抽出したいのですが、データアダプタの抽出条件に
= 'LIKE ?%'
と書いたら、うまくいきませんでした。
参考になるサイトや、抽出条件の指定をお分かりの方、よきアドバイスを宜しくお願いいたします。

[ メッセージ編集済み 編集者: NAOKO 編集日時 2004-01-04 07:34 ]
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-01-04 09:34
こんにちわ。諸農です。

引用:

NAOKOさんの書き込み (2004-01-04 05:59) より:

= 'LIKE ?%'


述語が文字列として認識されていませんか?

-編集補足-
抽出条件が変ですよね(^^;
頭文字が指定されていませんよね。

引用:

と書いたら、うまくいきませんでした。


どううまくいかなかったのでしょうか?
うまくいかなかった現象と、再現できる最小限のコードはどんなものでしょうか?

引用:

参考になるサイトや、抽出条件の指定をお分かりの方、よきアドバイスを宜しくお願いいたします。



簡単なSQLの書籍などから始めてみてはいかがでしょうか。

ではでは(^^)/


_________________
諸農和岳
Powered by Borland Delphi/C++Builder & Microsoft VS.NET

[ メッセージ編集済み 編集者: Jubei 編集日時 2004-01-04 09:40 ]
NAOKO
会議室デビュー日: 2003/12/30
投稿数: 7
投稿日時: 2004-01-04 17:50
da_kasiramoji.SelectCommand.Parameters["シメイ"].Value=kasira.Items.Tostring();
da_kasiramoji.Fill(ds_kasiramoji1,"会員名簿マスタ");
という形でコーディングしてあります。
kasira.Items.Tostring()には頭文字のア〜ワのうち指定したものが入ります。

エラー内容は以下のようなものです。
ParameterName 'シメイ' を持つ OleDbParameter は、この OleDbParameterCollection に含まれていません。

SQLを調べたところ、抽出条件を"シメイ LIKE '?*'"としたのですが、同上のエラーが発生してしまいました。



[ メッセージ編集済み 編集者: NAOKO 編集日時 2004-01-04 17:51 ]
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-01-04 18:47
こんにちわ。諸農です。

引用:

NAOKOさんの書き込み (2004-01-04 17:50) より:

エラー内容は以下のようなものです。
ParameterName 'シメイ' を持つ OleDbParameter は、この OleDbParameterCollection に含まれていません。


エラーの内容は調べられましたか?
エラーの意味はわかりますか?

エラー文を単純に解読すると、「'シメイ'」というパラメータが
「OleDbParameterCollection」に「存在していない」と言うことだと思いますが。


ご自分で書かれている、
コード:
da_kasiramoji.SelectCommand.Parameters["シメイ"].Value=kasira.Items.Tostring(); 


このコードの意味は、把握されていますか?


引用:

SQLを調べたところ、抽出条件を"シメイ LIKE '?*'"としたのですが、同上のエラーが発生してしまいました。



上記で発生しているエラーの内容だと、「SQLを調べる」というよりもSDKのドキュメントを良く見れば解決できそうですよね。

「OleDbDataAdapter.SelectCommand プロパティ [C#]」
ms-help://MS.NETFrameworkSDKv1.1.JA/cpref/html/frlrfSystemDataOleDbOleDbDataAdapterClassSelectCommandTopic.htm
に掲載されている「使用例」のコードをよく見てみることをお薦めします。


デバッグについて、過去ログには色々なコメントがアップされていますが、
「日経ソフトウェア」の縮刷版や、「dot NETマガジン」のバックナンバー(最近では
バックナンバーのPDFが収録されたCDが付録されています)など、コンピュータプ
ログラミングの基本部分を解説した雑誌などを参考にするのもいいかもしれません。

ではでは(^^)/
_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
NAOKO
会議室デビュー日: 2003/12/30
投稿数: 7
投稿日時: 2004-01-04 19:44
ご指摘ありがとうございます。
ヘルプの方を参照してみます。
もしでき次第、御報告させていただきます。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-01-05 09:34
 最初に全部一括してDataTableに持ってきておいて、
コード:
DataTable.Select(String.Format(
 "シメイ LIKE '{0}*'", kasira.SelectedItem.Text))


とか。


 また、OleDbということですが、ターゲットのDBMSは何でしょう?'*'をワイルドカードとして使用しようとしているということは、Microsoft系?


 「kasira」が頭文字を入れたドロップダウンリストだと思いますが、kasira.Items.ToString()としたら、どんな値がでるか、ご存じですか?少なくとも、「ア」とか「カ」とかではない値が返ってきますよ。

 ん?ドロップダウンリスト?Webアプリケーションですか?
NAOKO
会議室デビュー日: 2003/12/30
投稿数: 7
投稿日時: 2004-01-05 16:43
ご返信ありがとうございます。
ドロップダウンではなく、コンボボックスです・・・。すいません。
DBMSは御察しの通り、ACCESSです。

kasira.Items.ToString()→kasira.SelectedItem.toString()ですね・・・。

シメイ LIKE '{0}*の{0}というのは1文字目ということでしょうか?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-01-05 17:14
 Windowsアプリケーション、C#、Accessを使用して、コンボボックスで頭文字('ア'や'カ'など)を指定して、前方一致するデータを取得する方法、ですね。

 OleDbParameterを使うには、
コード:
OleDb.OleDbCommand cmd = new OleDb.OleDbCommand
// 接続文字列の設定をする
// コマンドテキストを設定する(ワイルドカード要注意)
cmd.CommandText = "SELECT * FROM テーブル名 WHERE シメイ LIKE '?%'"
cmd.Parameters.Add("頭文字", kasira.SelectedItem.ToString())


とします。OleDbCommandを、検索ごとに作り直すならこれでOk。1度だけ作り、パラメータ値を入れ替えて使うなら、適切な場所でダミー値空文字列でパラメータを作っておき、
コード:
cmd.Parameters["頭文字"].Value = kasira.SelectedItem.ToString()


とします。「2004-01-04 17:50」分のエラーメッセージは、この『ダミー値を入れてパラメータを作っておく』ことをしなかったためのものです。すでに定義してあるかどうかわからない場合は、Containsで確認することができます。
コード:
if (cmd.Parameters.Contains["頭文字"]) {
    // 含まれている
    cmd.Parameters["頭文字"].Value =  kasira.SelectedItem.ToString()
} else {
    // 含まれていない
    cmd.Parameters.Add("頭文字", kasira.SelectedItem.ToString())
}




>> シメイ LIKE '{0}*の{0}というのは1文字目ということでしょうか?

 これはString.Format(format string, argument array)で、「0番目の引数の値を入れる」です。詳しくはMSDNのトピック「書式設定の概要」と、そこで参照としてあげられているトピックを参照してください。

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