[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/09/12(Mon) 11:32
投稿者名:まさ
URL :
タイトル:
レコードの取得・表示
VB6を使ってORACLE8iで作ったデータベースのレコードを取得、そしてスプレッドシートVer.3.0に検索した
レコードを表示するプログラムを作っています。
oo4oで接続するところまではできたのですが、全く知識が無いため、ここからが先に進めません。
今やろうとしていることは、入力した顧客コード(KOKYAKUNO)をキーに顧客マスタから顧客情報を取得するとい
う点です。ネットでいろいろと調べてみたのですが、未だに方法がつかめないので投稿することにしました。

テーブルは次のようになっています。(載せる必要があるかわかりませんが、載せてみます)

<顧客マスタ>

KOKYAKUNO   KOKYAKUNAME    ADDR                 TEL                  
---------   -------------- -------------------- --------------------
3           斉藤模型店     A県B市                090-0003-2345                            
4           マクロハード   A県C市              090-0002-2345        
5           株)ランヌ   A県D市             090-0001-2345      

どうか、ご教授をおねがいします。
  

投稿時間:2005/09/12(Mon) 13:48
投稿者名:いな
Eメール:
URL :
タイトル:
Re: レコードの取得・表示
>oo4oで接続するところまではできたのですが、全く知識が無いため、ここからが先に進めません

[VBでデータベース]
hhttp://homepage2.nifty.com/inform/vbdb/

[プログラミング言語資料 - SAK Streets]
hhttp://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/sak3doc.htm#as_a

全くやりたいことが記述されて無い為、これ以上回答が出来ません。
上記サイトを読んでも分からないときには、何を教授すればよいのか教えてください。

投稿時間:2005/09/12(Mon) 14:30
投稿者名:まさ
URL :
タイトル:
Re^2: レコードの取得・表示
質問事項が明確でなく、わかりづらくて本当にすみませんでした。
2つのサイト確認してみました。この2つは、掲示板に投稿する前に見たのですが、よくわかりませんでした。

私が今、悩んでいるのはこのような記述の仕方です。

@VBのフォームに「顧客コード」を入力するテキストボックスがあり、そこにコード(数値2桁)を入力後、ボタンを押下。
A入力した顧客コード2桁と一致する顧客コードを持つレコード行を顧客マスタから抽出する。
B抽出した結果を、スプレッドシートに表示する。

このような抽出ができる方法を知りたいです。
質問は明確になっているでしょうか。

投稿時間:2005/09/12(Mon) 15:08
投稿者名:つぼちゃん
Eメール:
URL :
タイトル:
Re^3: レコードの取得・表示
> @VBのフォームに「顧客コード」を入力するテキストボックスがあり、そこにコード(数値2桁)

入力後、ボタンを押下。
> A入力した顧客コード2桁と一致する顧客コードを持つレコード行を顧客マスタから抽出する。
> B抽出した結果を、スプレッドシートに表示する。

もちろんできますよ。
AのSQL文はわかりますか?(Oracle的知識)
SQLがわかればVBでテーブルからの取得方法は
いなさんが提示してくれたページや他にもさがせば
いくらでもあると思いますよ。
Bですが、Oracleデータに限らず、適当な値を
スプレッドシートに表示させることはできますか?
それができないならまずはそれを調べてできるようにしましょう。

投稿時間:2005/09/13(Tue) 14:47
投稿者名:まさ
URL :
タイトル:
Re^4: レコードの取得・表示
つぼちゃんさん、いなさん、アドバイスありがとうございました。

Bに関しては表示の仕方はわかりました!
あとAのSQLがうまくいきません。number.Textというテキストボックスの入力したものと一致するレコードを
抽出しようとしたとき、どう記述したらいいのでしょうか??

select T_URIAGEH.KOKYAKUCD, T_URIAGEH.DENNO,
M_KOKYAKU.KOKYAKUNAME,M_KOKYAKU.ADDR, M_KOKYAKU.TEL from T_URIAGEH, M_KOKYAKU
where DENNO = AA, 0&)
        ↑この部分をnumber.Textで入力したものという感じにしたいのですが・・・。

投稿時間:2005/09/13(Tue) 16:42
投稿者名:いな
Eメール:
URL :
タイトル:
Re^5: レコードの取得・表示
> select T_URIAGEH.KOKYAKUCD, T_URIAGEH.DENNO,
> M_KOKYAKU.KOKYAKUNAME,M_KOKYAKU.ADDR, M_KOKYAKU.TEL from T_URIAGEH, M_KOKYAKU
> where DENNO = AA, 0&)
>         ↑この部分をnumber.Textで入力したものという感じにしたいのですが・・・。

strSQL = "select T_URIAGEH.KOKYAKUCD, T_URIAGEH.DENNO,"
strSQL = strSQL & "M_KOKYAKU.KOKYAKUNAME,M_KOKYAKU.ADDR, "
strSQL = strSQL & "M_KOKYAKU.TEL from T_URIAGEH, M_KOKYAKU "
strSQL = strSQL & "where DENNO = " & CInt(number.Text)

というような形でいいと思います。

投稿時間:2005/09/13(Tue) 19:39
投稿者名:まさ
URL :
タイトル:
Re^6: レコードの取得・表示
いなさん、ありがとうございました。無事解決しました。
このあとのレコード抽出の記述をいろいろ参考に記述してみました。
うまくnumber.textで入力した番号に該当するレコードだけを表示したいのですが
このDo...Loop文では最後のレコードの表示になってしまいます。
本当に基本中の基本な質問で申し訳ないんですが、何かご教授いただけないでしょうか。

Set OraDS = OraDB.CreateDynaset(strSQL, 0&)
    If Not IsExist(number.Text) Then
        MsgBox "該当レコードがありません。新規登録を行ってください。"
        Exit Sub
    Else
         Do Until OraDS.EOF
             Kname.Text = OraDS.Fields(2)
             add.Text = OraDS.Fields(3)
             tel.Text = OraDS.Fields(4)
            OraDS.dbmovenext
         Loop
  

投稿時間:2005/09/13(Tue) 19:40
投稿者名:まさ
URL :
タイトル:
Re^6: レコードの取得・表示
いなさん、ありがとうございました。無事解決しました。
このあとのレコード抽出の記述をいろいろ参考に記述してみました。
number.textで入力した番号に該当するレコードだけを表示したいのですが
このDo...Loop文では最後のレコードの表示になってしまいます。
本当に基本中の基本な質問で申し訳ないんですが、何かご教授いただけないでしょうか。

Set OraDS = OraDB.CreateDynaset(strSQL, 0&)
    If Not IsExist(number.Text) Then
        MsgBox "該当レコードがありません。新規登録を行ってください。"
        Exit Sub
    Else
         Do Until OraDS.EOF
             Kname.Text = OraDS.Fields(2)
             add.Text = OraDS.Fields(3)
             tel.Text = OraDS.Fields(4)
            OraDS.dbmovenext
         Loop
  
*すいません、手違いで2度送信してしまいました。

投稿時間:2005/09/13(Tue) 19:53
投稿者名:いな
Eメール:
URL :
タイトル:
Re^7: レコードの取得・表示
> number.textで入力した番号に該当するレコードだけを表示したいのですが

SQLの条件句(Where)で絞り込まれている為、
該当しないレコードは検索(Hit)しないはずです。
もしくは、検索条件が甘いため、レコードが複数件数該当するのでは?

これはSQLをSQL*Plusなどで実行して結果を確認してください。

Loopの中で、
>              Kname.Text = OraDS.Fields(2)
>              add.Text = OraDS.Fields(3)
>              tel.Text = OraDS.Fields(4)
これはテキストボックスに出力しているだけで、スプレッドシートVer.3.0では無いです。
スプレッドシートVer.3.0の基本的な使い方は、ベンダのホームページにサンプルがあります。

投稿時間:2005/09/13(Tue) 23:45
投稿者名:まさ
URL :
タイトル:
Re^8: レコードの取得・表示
説明不足ですいません。今作ってるプログラムの1部は、スプレッドシートではなく、テキストボック
スに表示する箇所があって、この3箇所はテキストボックスに表示するところだったので。

スプレッドシートの使い方と、SQL*PLUSでSELECT文の確認してみます!

投稿時間:2005/09/14(Wed) 02:25
投稿者名:いな
Eメール:
URL :
タイトル:
Re^9: レコードの取得・表示
> 説明不足ですいません。今作ってるプログラムの1部は、スプレッドシートではなく、テキストボ
ック
> スに表示する箇所があって、この3箇所はテキストボックスに表示するところだったので。

あ、なるほど、
そうすると、テキストボックスに表示するためには、
1レコードだけを返すSQLを想定していることになるか、
もしくは、複数レコード結果を返しても、
値が同じため、スプレッドシートではなくテキストボックスという形で
画面表示しているのでは無いでしょうか?

> スプレッドシートの使い方と、SQL*PLUSでSELECT文の確認してみます!
実際に、発行するSQLの確認は意外と重要なことなので、
まずは、そこからですかね?

投稿時間:2005/09/14(Wed) 14:23
投稿者名:つぼちゃん
Eメール:
URL :
タイトル:
Re^7: レコードの取得・表示
number.textで入力した番号に該当するレコードだけを表示したいとありますが、
いなさんの書いてくれたSQLを実行すればnumber.textで入力した番号に該当するレコードだけを
とってこれてるのではないですか?
もしそのデータが複数データあるのなら、上記のDo 〜 Loop の処理でテキストボックスに
1行目のデータから順に上書きしているので、結果として最後のデータが
テキストボックスに表示されているのです。

投稿時間:2005/10/04(Tue) 17:26
投稿者名:まさ
URL :
タイトル:
Re^8: レコードの取得・表示
PCの調子が悪くなって、書き込みがおそくなってしまいました!
いなさん、つぼちゃんさん、適切なご教授と指摘ありがとうございます。
SQL文とデータ読込みは無事上手く行きました!
ただ、いろいろ調べたんですが、スプレッドシート(Spread3.0を使っているのですが・・・)への書き込みが
出来ないんです。。。
こんな感じで書いてみました。

AstrSQL = "select t_uriageh.denno, t_uriageh.kokyakucd, t_uriaged.gyono,t_uriaged.syohincd,  
      m_syohin.syohinname,"
AstrSQL = AstrSQL & " m_syohin.hantan, t_uriaged.suryo from t_uriageh, t_uriaged, m_syohin"
AstrSQL = AstrSQL & " where t_uriageh.denno = t_uriaged.denno and t_uriaged.syohincd =    
      m_syohin.syohincd"
AstrSQL = AstrSQL & " and t_uriageh.kokyakucd = " & CStr(code.Text)
    
Set OraDS = OraDB.CreateDynaset(AstrSQL, 0&)

    
    Do Until OraDS.EOF
    
       If OraDS.Fields(2) = 1 Then
            vaSpread1.SetText 1, 1, OraDS.Fields(2)
            vaSpread1.SetText 1, 2, OraDS.Fields(3)
            vaSpread1.SetText 1, 3, OraDS.Fields(4)
            vaSpread1.SetText 1, 4, OraDS.Fields(5)
            
            Else
            If OraDS.Fields(2) = 2 Then
                vaSpread1.SetText 1, 1, OraDS.Fields(2)
                vaSpread1.SetText 1, 2, OraDS.Fields(3)
                vaSpread1.SetText 1, 3, OraDS.Fields(4)
                vaSpread1.SetText 1, 4, OraDS.Fields(5)
             End If
        End If
    OraDS.MoveNext
    Loop

指摘、ご教授お願いします!