コンボボックスのアイテムを検索するには?

解決


スライム  2005-08-24 03:00:18  No: 124344

コンボボックスのアイテムを  SQLで検索するには  どうすればいいでしょうか?


いな  2005-08-24 04:46:15  No: 124345

まずは、
コンボボックスの中身は
データベースに登録できてますか?

登録されていないデータはSQLで検索できませんよ


  2005-08-24 05:14:08  No: 124346

というか質問が大雑把すぎ
何で作って、どこまで分かってるの?


スライム  2005-08-24 05:54:10  No: 124347

すいません^^;
VB6.0です。
オラクルデータベースで  テーブルが二つあります。テーブルAとBとします。
今Bにカラーコードフィールドと色フィールドがあり
(テーブルB)
カラーコード  色
100            青
110            赤
120            黒
Aにカラーコードフィールドとその他のフィールドがいくつかあります。
配列を使って  Bの色フィールドを色コンボボックスにセットし
ListIndexプロパティを使って  テーブルAに無い色フィールドを条件に
テーブルAを検索できるようにはできるのですが
テーブルAのカラーコードフィールド以外のフィールドを条件に  色フィールドを検索し
色コンボボックスに表示させたいのです。


  2005-08-24 06:05:37  No: 124348

>テーブルAのカラーコードフィールド以外のフィールドを条件に
>色フィールドを検索し色コンボボックスに表示させたいのです。

難解な文章ですね。
テーブルAのカラーコードフィールドに含まれないBのカラーコード
フィールドを検索結果として抽出するということですか?


  2005-08-24 06:09:50  No: 124349

こういうこと?

SELECT 色 FROM テーブルA
WHERE カラーコード NOT IN 
(SELECT カラーコード FROM テーブルB)


スライム  2005-08-24 06:19:47  No: 124350

(テーブルA)
商品コード  〜  〜  〜  カラーコード
10000                    120
11000                    100
12000                    110
13000                    100
14000                    100
テーブルAはこんな感じになっていて  商品コードを条件にして
カラーコードに対応する色フィールドを  表示させたいのです。


いな  2005-08-24 06:22:14  No: 124351

ん〜難解だけど、難しく考えすぎじゃないのかなぁ
ま、いいか・・・。SQLの問題なんだよね?
ん〜っと
SELECT A.* FROM A
WHERE NOT EXIST (SELECT NULL 
                 FROM B 
                 WHERE A.カラーコードフィールド = B.カラーコードフィールド)

これで、
Bのカラーコードフィールドと
Aのカラーコードフィールドが一致しない、Aのデータが取得できます。

つまり、あ さんの言った。
>テーブルAのカラーコードフィールドに含まれないBのカラーコード
>フィールドを検索結果として抽出する。

です。
>テーブルAのカラーコードフィールド以外のフィールドを条件
に何を絞り込むか?ですが、
Aのテーブルならば
SELECT A.* FROM A
WHERE NOT EXIST (SELECT NULL 
                 FROM B 
                 WHERE A.カラーコードフィールド = B.カラーコードフィールド)
AND カラーコードフィールド以外の条件
です。

上手い質問の仕方の1例として
何処の何(というフィールド)を、どうする。
という書き方をしないと伝わりにくいです。


いな  2005-08-24 06:24:00  No: 124352

あ〜、書き込んでいる間に、投稿があったみたいなので、再考

SELECT A.* FROM A
WHERE NOT EXIST (SELECT NULL 
                 FROM B 
                 WHERE A.カラーコードフィールド = B.カラーコードフィールド)
AND A.商品コード = '14000'

でFAかな?


スライム  2005-08-24 22:27:24  No: 124353

prStrSql = "SELECT * FROM SYOUHIN WHERE NOT EXIST (SELECT NULL FROM M_HINSYU WHERE SYOUHIN.N_HINSYU_ID = M_HINSYU.N_HINSYU_ID) AND N_SYOUHIN_CD = " & txtSyouhinCd.Text & ""

このようにしたのですが  これだと  「ORA-00936: missing expression」というエラーが出ます。
「NULL」を「*」にしても  同じエラーが出ますが  「NULL」は「*」では  いけないのでしょうか?


いな  2005-08-25 00:09:37  No: 124354

別にかまわないですけれども、
Oracleが列フィールドを解析しようとするので、
厳密に言うと、時間はかかりますよ?

エラー番号の件は、OTNのメッセージ検索機能を使って原因を
解析してください。


さるべーじ  2005-08-25 00:40:47  No: 124355

OracleのSQLエラーの場合は、エラーコードを明記して質問するのが
わりとセオリーになっています。

ので、今回のケースは「ORA-00936」をキーワードにしてググってみると
いろいろなエラーパターンとその対処がごっそりヒットしますよ。

# N_SYOUHIN_CDあたりがCharじゃないですか?と疑ってみたり。


スライム  2005-08-26 02:33:55  No: 124356

With prRsHinsyu

        '先頭レコードから最終レコードまで実行
        For prIntDatNoHinsyu = 0 To .RecordCount - 1
        
            '品種名称フィールドを品種名称コンボボックスに追加
            cboHinsyu.AddItem (.Fields("V_HINSYU_NM").Value)
                
            '品種IDフィールドを配列に格納
            prStrHinsyuId(prIntDatNoHinsyu) = .Fields("N_HINSYU_ID").Value
            
            '次のレコードへ移動
            .MoveNext
        
        Next

    End With

こんな感じで  Form Loadイベントプロシージャで  配列に格納しているのですが
ListIndexプロパティを使用して  品種IDと品種名称を結びつけることは  できないのでしょうか?

        cboHinsyu.Text = prStrHinsyuId(prIntDatNoHinsyu)
        
        cboHinsyu.ListIndex = prIntDatNoHinsyu
                
        cboHinsyu.Text = cboHinsyu.List(cboHinsyu.ListIndex)

こうしても  ListIndexプロパティの値は-1のままなので
アイテムリストから選択しないと  ListIndexプロパティは  使えないのかな?


いな  2005-08-26 03:35:26  No: 124357

>アイテムリストから選択しないと  ListIndexプロパティは  使えないのかな?

そうです。ヘルプにもあるように、
選択されていないときのリストインデックスの値は-1です。


スライム  2005-08-29 21:38:27  No: 124358

>prStrSql = "SELECT * FROM SYOUHIN WHERE NOT EXIST (SELECT NULL FROM M_HINSYU WHERE SYOUHIN.N_HINSYU_ID = M_HINSYU.N_HINSYU_ID) AND N_SYOUHIN_CD = " & txtSyouhinCd.Text & ""
これでうまくいかなかったので

        'SQLの指定
        prStrSql = "SELECT * FROM SYOUHIN LEFT JOIN M_HINSYU ON M_HINSYU.N_HINSYU_ID = SYOUHIN.N_HINSYU_ID LEFT JOIN M_COLOR ON M_COLOR.N_COLOR_ID = SYOUHIN.N_COLOR_ID LEFT JOIN M_SIZE ON M_SIZE.N_SIZE_ID = SYOUHIN.N_SIZE_ID WHERE N_SYOUHIN_CD = " & txtSyouhinCd.Text & ""
                
        '商品マスタレコードセットオブジェクトへ接続する
        prRsSyouhin.Open prStrSql, prCn, adOpenStatic, adLockOptimistic

        '品種コンボボックスにデータソースの指定
        Set cboHinsyu.DataSource = prRsSyouhin

        '品種コンボボックスへ表示
        cboHinsyu.DataField = "V_HINSYU_NM"・・・※

こんな感じで  テーブルの結合はうまくいったのですが  ※で
「フィールドまたはデータメンバに連結できません」とエラーが出ます・・・。


スライム  2005-08-29 21:44:58  No: 124359

もしかして  Form_Loadイベントプロシージャで

    'SQLのクリア
    prStrSql = ""
    
    'SQLの指定
    prStrSql = "SELECT * FROM M_HINSYU"

    '品種マスタレコードセットオブジェクトへ接続する
    prRsHinsyu.Open prStrSql, prCn, adOpenStatic, adLockOptimistic
        
    '品種コンボボックスにデータソースの指定
    Set cboHinsyu.DataSource = prRsHinsyu

こうしてるのでエラーが出るのでしょうか?
データソースを変更する場合には  いったん閉じないとまずいのでしょうか?


スライム  2005-08-30 00:55:13  No: 124360

'品種コンボボックスにデータソースの指定
        Set cboHinsyu.DataSource = prRsSyouhin

        '品種コンボボックスへ表示
        cboHinsyu.DataField = "N_HINSYU_ID"

        '品種マスタ先頭レコード移動
        prRsHinsyu.MoveFirst

        '文字列の定義
        Dim strHinsyuCriteria   As String

        '文字列への代入
        strHinsyuCriteria = "N_HINSYU_ID = '" & cboHinsyu.Text & "'"
        
        '品種マスタの特定の品種IDへレコード移動
        prRsHinsyu.Find strHinsyuCriteria, 0, adSearchForward

        '品種コンボボックスへ表示
        cboHinsyu.ListIndex = prRsHinsyu.AbsolutePosition - 1

これでできました。
ありがとうございました。


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

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






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