お世話になります。
VB2005にて作成中です。
コンボボックスのリスト外入力時の内容を
テーブルに保存する方法をご指導下さい。
コンボボックスのリスト内容はDataSourceです。
データ事態はSQLサーバにあり、VB2005に接続しています。
希望する内容は、
コンボボックスでリストに無い場合に、
入力してテーブルに追加する(追加する際にダイアログを表示)
といった具合です。
リストがItemであれば、「Items.add」で追加できると思うのですが
リストがDataSourceの場合、どの様にコードを記入すれば良いか
ご指導下さい。
宜しくお願いします。
その入力されたデータがあるかどうか問い合せ(SQL)して無い場合、
Insert文を投げてあげればよいのでは?
こういう処理はしたことないのですが、やるならValidateかな?|=_=;
#自信なし
KG様
ご助言ありがとうございます。
一度、調べて確認したいと思います。
本やインターネットで調べたのですが、わかりませんでした。
dim dr as sampledataset.食べ物row
dr=sampledataset.食べ物.select("果物"=me.品名combo.text)
上記の様なコードを記入しても、
「メンバではありません。」というエラーがでます。
SQLのデータを検索するコードを具体的にご教授願えないでしょうか?
一番初めに記載した内容になるのであれば、
どの様な感じでも構いません。
宜しくお願いします。
コンボボックスのDataSourceにどのように設定していますか?
TableAdapterを利用しているのだと思うのですが・・・
うなまな様
何度もありがとうございます。
コンボボックスのDataSouurceは、
データセットの中にあるストアドのBindingSourceが設定されています。
これが、いけないのでしょうか?
具体的なコードはどうなっているんでしょうか?
ノンコーディングで行われている場合、自動で生成されたクラスなどが
どのような動きをしているかが、分からなければ、やりたい事を実装する
のは難しいかなと・・・
>dr=sampledataset.食べ物.select("果物"=me.品名combo.text)
は、selectメソッドは実装されていますか?
うなまな様
実は、先日ご指導頂いた「パラメータ付ストアドを実行するには」の
続きなのです。
パラメータ付ストアドをコンボボックスで表示させ選択する所まで
ご指導頂いたのですが、今回は
「このコンボボックスのリストに選択する内容が無い場合に
新しい内容を入力してリストに追加する」という事を行いたいのです。
下記に先日頂いたコードを記述します。
Using con As New SqlConnection("接続文字列")
Using da As New SqlDataAdapter("q生活_食べ物", con)
With da.SelectCommand
.CommandType = Data.CommandType.StoredProcedure
.Parameters.Add(New SqlParameter("@種類",Data.SqlDbType.VarChar)).Value = "果物"
End With
Using ds As New DataSet
da.Fill(ds, "生活_食べ物")
Me.コンボB.DataSource = ds.Tables("生活_食べ物").DefaultView
Me.コンボB.DisplayMember = "食べ物名称"
Me.コンボB.ValueMember = "食べ物コード"
End Using
End Using
End Using
dim dr as sampledataset.食べ物row ←ここに入れてしまいました。
dr=sampledataset.食べ物.select("果物"=Me.コンボB.Text)
selectメソッドは実装されていませんでした。
提示しなければならないコードが間違っていましたら申し訳ありません。
宜しくお願いします。
コンボボックスのDataSourceを利用しなければならない理由はありますか?
というのは、コンボボックスに「食べ物名称」だけを表示しておけばいいの
であれば、Me.コンボB.Items.Addでアイテムを追加しておき、Validating
イベントで、コンボボックスのTextがアイテム外の場合の処理を行えば
簡単かと・・・
うなまな様
DataSourceを利用しなければならない理由は特にありませんでした。
という事は、コンボボックスのプロパティにあるDataSourceは空白で良いのでしょうか?
Itemsに追加する場合は、先日ご指導頂いたコードで良いと思うのですが、
Validatingの使用方法がVBのヘルプや本に記載していないので、
申し訳ございませんがご指導お願い致します。
VBのヘルプにValidatingイベントがありました。
申し訳ございませんでした。
>Validatingの使用方法がVBのヘルプや本に記載していないので
http://msdn2.microsoft.com/ja-JP/library/system.windows.forms.control.validating.aspx
Validatingはイベントです。このイベントの発生タイミングで、
コンボボックスのアイテムをチェックして、アイテム外ならデータを追加する
処理を行えばいいでしょう。
アイテム外か否かは、SelectedIndexプロパティで判断できますね。
ありがとうございます。
頂いたご助言で一度挑戦したいと思います。
また、ご報告致します。
だいぶ遅くなりましたが、現在ご指導を元に作成しています。
色々調べて下記のコードを入力しました。
Private Sub 得意先名combobox_validating(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles 得意先名ComboBox.Validating
If ActiveControl.CausesValidation = False Then
Exit Sub
End If
If Not Me.得意先名ComboBox.SelectedItem Then
MsgBox("リスト外です。")
e.Cancel = True
End If
End Sub
リストにない文字を入力した場合、「リスト外です。」と表示されます。
ただ、リストにあるものを選択した場合に、
「stringから型longへの変換は無効です。」
とエラーが出てしまいます。
コードがおかしいと思うのですが、どこがおかしいかが解りません。
ご指導お願いします。
> コードがおかしいと思うのですが、どこがおかしいかが解りません。
デバッグすればエラーの発生行で止まると思いますが?
まずはどの行で発生しているか特定してください。
> stringから型longへの変換は無効です。
次にエラーメッセージより、文字列から数値型への型変換が
失敗している事が分かりますので、どこで型変換が起こっているか
調べてください。
# 暗黙の型変換を禁止した方がこういったエラーは少なくなります。
# Option Strict On をヘルプで調べて利用してみてください。
# ファイルごとにも設定できますし、プロジェクトのプロパティでも
# 設定できます。
ツイート | ![]() |