C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[9]: コンボボックスで選択した値がDBに登録されない


(過去ログ 101 を表示中)

[トピック内 12 記事 (1 - 12 表示)]  << 0 >>

■60068 / inTopicNo.1)  コンボボックスで選択した値がDBに登録されない
  
□投稿者/ Rio (1回)-(2011/06/18(Sat) 00:57:48)

分類:[.NET 全般] 

こんばんわ。
色々調べたのですが、まったくわからなかったのでお知恵をお貸しください。

OS:XP
VB2005

DBに登録しているテーブルをコンボボックスのリストに表示し、
そこから任意の値を選択したものをボタン押下時にDBに登録したいんです。

デザインのイメージは、テキストボックスとコンボボックスが混在していて、
そこに値を入れ、新規登録ボタンを押すとDBのテーブルへデータが登録されます。

登録してみたのですが、テキストボックスに入れたデータはすべて登録されているのですが、
コンボボックスに設定した値はDBには「NULL」として登録されてしまいます。

コンボボックスに設定した値をDBへ登録するにはどのようにすればいいでしょうか?
アドバイスをよろしくお願いします!
以下がコードになります。

Option Strict On
Imports System.Data.SqlClient
Imports System.Text.RegularExpressions
Imports System.Data.OleDb

Public Class Insert

    Private Sub Insert_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load, MyBase.Activated
        'TODO: このコード行はデータを 'SRMDBDataSet.AaaTable' テーブルに読み込みます。必要に応じて移動、または削除をしてください。
        Me.AaaTableTableAdapter.Fill(Me.SRMDBDataSet.AaaTable)
        'TODO: このコード行はデータを 'SRMDBDataSet.BbbTable' テーブルに読み込みます。必要に応じて移動、または削除をしてください。
        Me.BbbTableTableAdapter.Fill(Me.SRMDBDataSet.BbbTable)
        'TODO: このコード行はデータを 'SRMDBDataSet.CccTable' テーブルに読み込みます。必要に応じて移動、または削除をしてください。
        Me.CccTableTableAdapter.Fill(Me.SRMDBDataSet.CccTable)
        'TODO: このコード行はデータを 'SRMDBDataSet.DddTable' テーブルに読み込みます。必要に応じて移動、または削除をしてください。
        Me.DddTableTableAdapter.Fill(Me.SRMDBDataSet.DddTable)

        Me.ActiveControl = Me.TextBox1
    End Sub

    Private Sub Button19_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button19.Click
        Try
            Dim con As New SqlConnection
            Dim com As New SqlClient.SqlCommand

             'Using con
            '---<< 接続文字列の設定>>---
            con.ConnectionString = _
            "Data Source=.\SQLEXPRESS;" & _
            "AttachDbFilename=" & _
            """G:\VB2008\Projects\AAA\BBB\DB.mdf"";" & _
            "Integrated Security=True;" & _
            "Connect Timeout=30;" & _
            "User Instance=True"

            'DBを開く
            con.Open()

            '---<< DBの接続状態を確認>>---
            MessageBox.Show("Open")

            com.Connection = con

            com.CommandText = "INSERT INTO dbo.EeeTable (Aaa, Bbb, Ccc, Ddd, Eee, Fff, Ggg, Hhh, Iii, Jjj, Kkk, Lll, Mmm, Nnn, AddDT) " & _
                "values(" & Q(TextBox1.Text) & ", " _
                & Q(ComboBox2.Text) & ", " _
                & Q(TextBox2.Text) & ", " _
                & Q(ComboBox3.Text) & ", " _
                & Q(TextBox3.Text) & ", " _
                & Q(TextBox4.Text) & ", " _
                & Q(TextBox5.Text) & ", " _
                & Q(ComboBox4.Text) & ", " _
                & Q(TextBox6.Text) & ", " _
                & Q(TextBox7.Text) & ", " _
                & Q(TextBox8.Text) & ", " _
                & Q(TextBox9.Text) & ", " _
                & Q(TextBox10.Text) & ", " _
                & Q(ComboBox5.Text) & ", " _
                & "GetDATE()" & ")"

            com.ExecuteNonQuery()

            con.Close()

            MessageBox.Show("データの追加に成功しました")

            TextBox1.Text = ""
            ComboBox2.Text = ""
            TextBox2.Text = ""
            ComboBox3.Text = ""
            TextBox3.Text = ""
            TextBox4.Text = ""
            TextBox5.Text = ""
            ComboBox4.Text = ""
            TextBox6.Text = ""
            TextBox7.Text = ""
            TextBox8.Text = ""
            TextBox9.Text = ""
            TextBox10.Text = ""
            ComboBox5.Text = ""

            Me.TextBox1.Focus()

            'End Using

        Catch ex As Exception
            MessageBox.Show(ex.ToString, "接続テストで【例外発生】")

        End Try

    End Sub

 
    Public Function Q(ByVal Text As String) As String
        If (Text = "") Or (Text = " ") Then
            Q = "NULL"
        Else
            Q = "'" & Replace(Text, "'", "''") & "'"
        End If
    End Function

 End Class

引用返信 編集キー/
■60069 / inTopicNo.2)  Re[1]: コンボボックスで選択した値がDBに登録されない
□投稿者/ επιστημη (2638回)-(2011/06/18(Sat) 04:12:18)
επιστημη さんの Web サイト
> 登録してみたのですが、テキストボックスに入れたデータはすべて登録されているのですが、
> コンボボックスに設定した値はDBには「NULL」として登録されてしまいます。

com.CommandText に与える文字列↓が正しい(該当箇所がNULLでない)ことは確認しましたか?

> com.CommandText = "INSERT INTO dbo.EeeTable (Aaa, Bbb, Ccc, Ddd, Eee, Fff, Ggg, Hhh, Iii, Jjj, Kkk, Lll, Mmm, Nnn, AddDT) " & _
> "values(" & Q(TextBox1.Text) & ", " _
> & Q(ComboBox2.Text) & ", " _
> & Q(TextBox2.Text) & ", " _
> & Q(ComboBox3.Text) & ", " _
> & Q(TextBox3.Text) & ", " _
> & Q(TextBox4.Text) & ", " _
> & Q(TextBox5.Text) & ", " _
> & Q(ComboBox4.Text) & ", " _
> & Q(TextBox6.Text) & ", " _
> & Q(TextBox7.Text) & ", " _
> & Q(TextBox8.Text) & ", " _
> & Q(TextBox9.Text) & ", " _
> & Q(TextBox10.Text) & ", " _
> & Q(ComboBox5.Text) & ", " _
> & "GetDATE()" & ")"

引用返信 編集キー/
■60071 / inTopicNo.3)  Re[2]: コンボボックスで選択した値がDBに登録されない
□投稿者/ Rio (2回)-(2011/06/18(Sat) 16:19:37)
メッセージありがとうございます!

Insert文の前の行にMsgBoxを表示させ、選択したComboBox2の値を表示させてみましたが、
何も取得できていなかったです。。。(ちなみに、ComboBox2のリストには、空白と0と1の3つのデータがあります)
3パターンとも選択してみましたがMsgBoxには何も表示されません。

プロパティの設定に不備があるのでしょうか?
ComboBox2のプロパティの設定については、
Datasourse:取得したいデータのテーブル名
DisplayMember:取得したい項目名
ValueMember:取得したい項目名
を設定しています。
引用返信 編集キー/
■60091 / inTopicNo.4)  Re[3]: コンボボックスで選択した値がDBに登録されない
□投稿者/ AtoZ (1回)-(2011/06/20(Mon) 12:56:36)
No60071 (Rio さん) に返信
> Insert文の前の行にMsgBoxを表示させ、選択したComboBox2の値を表示させてみましたが、
> 何も取得できていなかったです。。。(ちなみに、ComboBox2のリストには、空白と0と1の3つのデータがあります)

「選択したComboBox2の値を表示させてみました」とありますが、ComboBox2.Textのことですか?

> DisplayMember:取得したい項目名
> ValueMember:取得したい項目名

ということからすると、ComboBox2.SelectedValueの内容とコンボボックスの表示内容は同じだと思うので、
ComboBox2.SelectedValueでコンボボックスの値を取得してはいかがでしょうか?
引用返信 編集キー/
■60092 / inTopicNo.5)  Re[3]: コンボボックスで選択した値がDBに登録されない
□投稿者/ shu (792回)-(2011/06/20(Mon) 13:06:15)
No60071 (Rio さん) に返信

> ComboBox2のプロパティの設定については、
> Datasourse:取得したいデータのテーブル名
テーブル名を文字列で設定されているのでしょうか?
DatasetとかDataTableなどを設定しないと駄目ですよ?


引用返信 編集キー/
■60108 / inTopicNo.6)  Re[4]: コンボボックスで選択した値がDBに登録されない
□投稿者/ Rio (3回)-(2011/06/21(Tue) 01:31:23)
>AtoZ さん
アドバイスありがとうございます。
説明不足ですみません。
表示させてみたのは、ComboBox2.Textです。
ComboBox2.SelectedValueでも表示させてみたのですが、
promptは型Stringに変換できません
とエラーが出てしまいました。。。
調べてみます。


>shu さん
アドバイスありがとうございます。
Datasetは使用しております。
コンボボックスのプロパティの設定が足りないのかと思い、質問させて頂きました。
もっと調べてみます。
引用返信 編集キー/
■60111 / inTopicNo.7)  Re[5]: コンボボックスで選択した値がDBに登録されない
□投稿者/ shu (794回)-(2011/06/21(Tue) 08:08:43)
No60108 (Rio さん) に返信

もしかしてDataTableを直接設定してあとからデータを入れたのが反映されない
ということですか?

下記にて
button1->button3とした場合、追加が反映されず   (DataTable直)
button2->button3とした場合、追加が反映されます。   (BindingSource経由)


    Private m_tbl As DataTable = Nothing
    Private m_bind As BindingSource = Nothing

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        m_tbl = New DataTable
        With m_tbl.Columns
            .Add("aa", GetType(String))
            .Add("bb", GetType(String))
        End With
        ComboBox1.DataSource = m_tbl
        ComboBox1.ValueMember = "aa"
        ComboBox1.DisplayMember = "bb"
    End Sub

    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        m_tbl = New DataTable
        With m_tbl.Columns
            .Add("aa", GetType(String))
            .Add("bb", GetType(String))
        End With
        m_bind = New BindingSource()
        m_bind.DataSource = m_tbl
        ComboBox1.DataSource = m_bind
        ComboBox1.ValueMember = "aa"
        ComboBox1.DisplayMember = "bb"
    End Sub

    Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
        If m_tbl Is Nothing Then Exit Sub
        m_tbl.Rows.Add({"1", "a"})
        m_tbl.Rows.Add({"2", "b"})
        m_tbl.Rows.Add({"3", "c"})
        m_tbl.AcceptChanges()
    End Sub

引用返信 編集キー/
■60127 / inTopicNo.8)  Re[5]: コンボボックスで選択した値がDBに登録されない
□投稿者/ 無明 (1回)-(2011/06/21(Tue) 15:00:23)
> ComboBox2.SelectedValueでも表示させてみたのですが、
> promptは型Stringに変換できません

ComboBox2.SelectedValue->ToString()
引用返信 編集キー/
■60150 / inTopicNo.9)  Re[6]: コンボボックスで選択した値がDBに登録されない
□投稿者/ Rio (4回)-(2011/06/22(Wed) 00:34:15)
>shuさん

ありがとうございます。
>もしかしてDataTableを直接設定してあとからデータを入れたのが反映されない
>ということですか?
少し違うかもしれません。。。デザイン画面でデータソースで設定したテーブル(コンボで選択用)をコンボに設定しています。
コンボのドロップダウンを選択すると、想定するテーブルの値が一覧で表示されるのでこちらは問題ないです。
反映されないのは、新規登録ボタン押下時、コンボで選択した値がinsert用テーブルに反映されないということです。

insertする時にはコンボで選択した値は何か型変換のようなものがいるんですかね。。。


>無明さん
ありがとうございます。
    MsgBox(ComboBox2.SelectedValue.ToString)
として選択した値を表示させてみましたが、
System.Data.Row.View
と表示され、選択した値は表示されませんでした。。。
調べてみます。



引用返信 編集キー/
■60578 / inTopicNo.10)  Re[7]: コンボボックスで選択した値がDBに登録されない
□投稿者/ Rio (5回)-(2011/07/10(Sun) 23:18:53)
色々調べてみまして、
下のようにLoad時の処理を変更しましたところ、
コンボボックスにテーブルの値を読み込むことはできたのですが、
テーブルの値が2回表示されてしまいます。
(例えばテーブルに、
「スペース」
0
1
2
とありましたら、
コンボボックスのドロップダウンに
「スペース」
0
1
2
「スペース」
0
1
2
と表示されてしまい、1セット分余分に表示されている状態です。)
調べているのですが、調べ方が悪い為か原因まったくわからない状態です。
どうかアドバイスをよろしくお願い致します!


    Private Sub Insert_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load, MyBase.Activated

        Dim con As New SqlConnection
        Dim comS As New SqlClient.SqlCommand
        Dim comP As New SqlClient.SqlCommand
        Dim comH As New SqlClient.SqlCommand
        Dim comSu As New SqlClient.SqlCommand

        'Using con
        '---<< 接続文字列の設定>>---
        con.ConnectionString = _
        "Data Source=.\SQLEXPRESS;" & _
        "AttachDbFilename=" & _
        """C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\DB.mdf"";" & _
        "Integrated Security=True;" & _
        "Connect Timeout=30;" & _
        "User Instance=True"

        'DBを開く
        con.Open()

        comS = con.CreateCommand()
        comP = con.CreateCommand()
        comH = con.CreateCommand()
        comSu = con.CreateCommand()

        comS.CommandText = "select S from Table_AAA"
        comP.CommandText = "select P from Table_BBB"
        comH.CommandText = "select H from Table_CCC"
        comSu.CommandText = "select Su from Table_DDD"

        '[DataAdapter]
        Dim DAPROS As SqlDataAdapter
        DAPROS = New SqlDataAdapter(comS)

        Dim DAPROP As SqlDataAdapter
        DAPROP = New SqlDataAdapter(comP)

        Dim DAPROH As SqlDataAdapter
        DAPROH = New SqlDataAdapter(comH)

        Dim DAPROSu As SqlDataAdapter
        DAPROSu = New SqlDataAdapter(comSu)

        '[DataSet]
        Dim DS As DataSet
        DS = New DataSet

        '[DataAdapter]を[DataSet]に割当て
        DAPROS.Fill(DS, "Table_AAA")
        DAPROP.Fill(DS, "Table_BBB")
        DAPROH.Fill(DS, "Table_CCC")
        DAPROSu.Fill(DS, "Table_DDD")

        'ComboBoxに表示
        'DataTableの取り出し
        Dim tableS As DataTable = DS.Tables(0)
        Dim tableP As DataTable = DS.Tables(1)
        Dim tableH As DataTable = DS.Tables(2)
        Dim tableSu As DataTable = DS.Tables(3)

        'DataTableから1行ずつデータを取得し、
        'データをComboBoxに表示
        Dim rowS As DataRow
        For Each rowS In tableS.Rows
            ComboBox2.Items.Add(rowS("S"))
        Next

        Dim rowP As DataRow
        For Each rowP In tableP.Rows
            ComboBox3.Items.Add(rowP("P"))
        Next

        Dim rowH As DataRow
        For Each rowH In tableH.Rows
            ComboBox4.Items.Add(rowH("H"))
        Next

        Dim rowSu As DataRow
        For Each rowSu In tableSu.Rows
            ComboBox5.Items.Add(rowSu("Su"))
        Next

        con.Close()

        Me.ActiveControl = Me.TextBox1
    End Sub

引用返信 編集キー/
■60579 / inTopicNo.11)  Re[8]: コンボボックスで選択した値がDBに登録されない
□投稿者/ shu (838回)-(2011/07/11(Mon) 09:08:59)
No60578 (Rio さん) に返信

> Handles MyBase.Load, MyBase.Activated
2つのイベントで実行されているからだと思います。
引用返信 編集キー/
■60598 / inTopicNo.12)  Re[9]: コンボボックスで選択した値がDBに登録されない
□投稿者/ Rio (6回)-(2011/07/11(Mon) 22:57:11)
No60579 (shu さん) に返信

ありがとうございます!
全然気づきませんでした><
おかげ様で修正すると無事できました!
ありがとうございました(_ _)
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -