Question

bentensama on Thu, 19 Feb 2015 01:00:03


    Private Sub fmGoods_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim sql As String = "SELECT * FROM T分類マスタ"
        Dim dt As New DataTable
        Dim db As New DBBox(cnstr)
        If Not db.getdatafromdb(dt, sql) Then
            Exit Sub
        End If
        With ComboBox1
            .DataSource = dt
            .ValueMember = "分類ID"
            .DisplayMember = "分類Tマスタ"
        End With
    End Sub

この様にコードを記入したのですが、実行をクリックしてもconbobox1にはなにも表示されないのですが、どのような原因がありますか?。


sqlを使う場合、comboboxにはsql文がないとテーブルがあってもDisplayMemberに文字が表示されないのでしょうか?。

Sponsored



Replies

Hongliang on Thu, 19 Feb 2015 01:04:20


まずブレークポイントをメソッド先頭にでも設定してからデバッグ実行し、1行ずつステップ実行してみてください。

どこかで例外が出るなどしてメソッドの最後まで実行されていないということはありませんか?

aviator__ on Thu, 19 Feb 2015 01:14:14


        If Not db.getdatafromdb(dt, sql) Then
            Exit Sub
        End If

Exit Sub してるのではと思います。

Tak1wa on Thu, 19 Feb 2015 01:16:24


こんにちは。

私が知らないだけだったら大変申し訳ないのですが、
DBBoxというのは何かをラップしたクラスでしょうか。(SQLServer用に用意されている?)

まずはブレークポイントを作成しデバッグ実行で以下を確認してみては如何でしょう。

  • 変数dtにレコードが存在しているか。
  • 変数dtに「分類ID」と「分類Tマスタ」のカラムが存在するか

bentensama on Tue, 24 Feb 2015 19:47:30


ラップという意味があまりよくわからないのですが、コードは以下になっています。

Imports System.Data.SqlClient
Public Class DBBox
    Private _connectionstring As String
    Sub New(ByVal connectionstring As String)
        _connectionstring = connectionstring
    End Sub

お分かりになることがあればお願いします。

カラムはあります。

Tak1wa on Tue, 24 Feb 2015 21:01:45


こんにちは。

getdatafromdbの実装も掲載頂けたほうが回答が得やすいでしょう。

基本的に以下の可能性があります。

  1. データ取得時にdb.getdatafromdbのReturn値がFalseになっており、呼び元でExit Subされてしまう。
  2. db.getdatafromdbのメソッド内で引数dtをNewしており、かつByRefではなくByValで引数定義されている。
  3. 「.DataSource = dt」時点でdtに「分類ID」と「分類Tマスタ」というColumnが存在しない

2と3については実行時に例外が発生しそうな気もするので、
aviatorさんがおっしゃっているようにおそらく1でしょうか。

trapemiya on Wed, 25 Feb 2015 07:38:32


自分の思い通りに動かない場合、1つ1つのコードが思い通りに動いているかを確認することが基本です。ご質問内容は、実現の仕方がわからないというより、思った通りに動かないといった内容ですので、まずご自分でコードの動作を確認してみて下さい。このコードの動作の確認をデバッグと言います。
Hongliangさんが書かれているように、まずはデバッグ実行してみて下さい。その上で、わからないところがあれば再度ご質問下さい。そうすれば、回答者もより的確に回答を導けるようになります。残念ながら、現在ご提供いただいている情報だけでは、どこに問題があるのかわかりません。極端な話、T分類マスタが空かもしません。よって、具体的な回答が付きにくい状況です。
以上、ご理解のほど、よろしくお願いいたします。

bentensama on Wed, 25 Feb 2015 20:30:27


 Public Function getdatafromDB(ByVal DataTable As DataTable, ByVal strSQL As String) As Boolean
        Dim da As New SqlDataAdapter(strSQL, _connectionstring)
        Try
            da.Fill(DataTable)
            Return True
        Catch ex As Exception
            Return False
        End Try
    End Function

getdatafromdbの実装とは上記のものでしょうか?。

bentensama on Thu, 26 Feb 2015 05:59:50


デバッグをすると、特に問題はないのですが、combobox1にリストが表示されません。sqlには初心者でほとんどわからずやっております。添付した画像から何かわかりますか?。

trapemiya on Thu, 26 Feb 2015 06:25:09


ComboBox1のDataSourceに渡しているdtに、きちんと値が入っていることをデバッグで確認されてみましたでしょうか?
何も表示されないのであれば、まず疑うのはDataSourceに渡しているもの(オブジェクト)です。

 With ComboBox1
            .DataSource = dt

おそらく、dtは空なんだと思います。空になる理由は複数ありますが、今回のケースはプログラミングの知識がないと難しいかもしれません。とりあえず、以下を読んでみて下さい。

ByVal と ByRef
http://homepage1.nifty.com/CavalierLab/lab/vb/byvalbyref.html

bentensama on Sun, 01 Mar 2015 05:43:02


今回の失敗は、どうも文字が一つ多かったことに起因していたようでした。デバッグでは問題はなかったようですが、とりあえず結果が出たので良しとしたいと思います。