質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

3回答

3370閲覧

TableAdapterのSELECT文を参照したい

_ali

総合スコア14

Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2018/12/11 06:36

編集2018/12/11 07:04

DataGridViewを用いてデータベースの中身を参照する画面を作成しています。
textboxに入力された値で検索項目に絞り込みをかけようと思っています。
tableadapterのSELECT文を参照した後にwhere句を連結させればいいと考えたのですがうまく行きません。 
実行した時、dataAdapterのselect文を代入している箇所で、
nullを参照しているとエラーが出てしまいます。参照している場所が悪いのでしょうか。

よろしくお願いします。

vb

1''' <summary> 2 ''' 検索ボタンをクリックしたら 3 ''' </summary> 4 Private Sub btnKENSAKU_Click(sender As Object, e As EventArgs) Handles btnKENSAKU.Click 5 6 'DataAdapterのselect文を参照 7 Dim strSql As String = M0010TableAdapter.Adapter.SelectCommand.CommandText 8 Dim strHncd As String = Me.txtHMNO.Text '品目コードtxtboxの中身 9 10 If strHncd <> "" Then 11 12 strSql = strSql + "WHERE " + strHncd 13 14 End If 15 16 17 18 '連結した文字列をSELECT文に返す 19 Me.M0010TableAdapter.Adapter.SelectCommand.CommandText = strSql 20 21 'TODO: このコード行はデータを 'KOBAISET.M0010' テーブルに読み込みます。必要に応じて移動、または削除をしてください。 22 Me.M0010TableAdapter.Fill(Me.KOBAISET.M0010) 23 24 End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/12/11 07:12 編集

根本的に考え方が間違っているように思えるのですが。既に Fill 済みの DataSet/DataTable のインスタンスが存在するのでしょうか? であれば、それから絞り混んだ方が良いと思います。
guest

回答3

0

ベストアンサー

上の私の質問、

既に Fill 済みの DataSet/DataTable のインスタンスが存在するのでしょうか?

に対する返事がないですが、たぶんその通りで、以下のような全レコード表示まではできていて、

イメージ説明

後は、TextBox に絞り込み条件を入力して、Button クリックで絞り込み結果を以下のように表示したいということであれば、

イメージ説明

以下のようなコードで可能です。コードは C# ですが読めなければ変換サービスを使ってください。

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form3 : Form { public Form3() { InitializeComponent(); } private void productsBindingNavigatorSaveItem_Click(object sender, EventArgs e) { this.Validate(); this.productsBindingSource.EndEdit(); this.tableAdapterManager.UpdateAll(this.northwindDataSet); } private void Form3_Load(object sender, EventArgs e) { this.productsTableAdapter.Fill(this.northwindDataSet.Products); } private void button1_Click(object sender, EventArgs e) { if (!String.IsNullOrEmpty(this.textBox1.Text)) { NorthwindDataSet.ProductsDataTable table = this.northwindDataSet.Products; // 以下のように DataView を取得して、その RowFilter プロパティに設定するのが正解。 table.DefaultView.RowFilter = "ProductName LIKE '%" + this.textBox1.Text + "%'"; this.productsBindingSource.DataSource = this.northwindDataSet.Products; } else { // 最初の全レコード表示に戻す場合 NorthwindDataSet.ProductsDataTable table = this.northwindDataSet.Products; table.DefaultView.RowFilter = ""; } } } }

投稿2018/12/11 08:31

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

_ali

2018/12/11 09:53

返答が遅くなり、申し訳ありません。 少し別のことをやっていました。 おっしゃる通り、fill済みのインスタンスがなかったことが原因のようでした。 参考にさせて頂きます。ありがとうございました。
guest

0

まず、デザイナでFillが自動で作成されたと思いますが、Fillを実行するまではM0010TableAdapter.Adapter.SelectCommandはNothingとなっています。
Fillを実行すると、M0010TableAdapterのプライベートメンバーである_commandCollection(0)に格納されているSqlCommandがM0010TableAdapter.Adapter.SelectCommandにセットされます。

このような動作のため、M0010TableAdapter.Adapter.SelectCommandを変更したとしても、内部で_commandCollection(0)に変わりますので意味がありません。

条件を追加したい場合は、デザイナで新たにクエリの追加を行ってください。

投稿2018/12/11 07:35

YAmaGNZ

総合スコア10469

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

参照したM0010TableAdapter.Adapter.SelectCommand.CommandTextの内容によるんじゃないでしょうか。
from テーブルなどで終わっていればいいですけど、where条件などがあると文法エラーになりませんか?
from テーブルで終わっているなら、

VB

1 strSql = strSql + " WHERE " + strHncd

のように、whereの前に空白や改行がないと、これも文法エラーです。

追記

Fill実行しないとCommandTextには値は入らないようです
以下が参考にならないでしょうか
TableAdapterのクエリを変更する

投稿2018/12/11 06:52

編集2018/12/11 07:17
sazi

総合スコア25300

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

_ali

2018/12/11 07:01

回答ありがとうございます。 エラーが出て止まる箇所は Dim strSql As String = M0010TableAdapter.Adapter.SelectCommand.CommandText 上記の部分です。NullReferenceExceptionはハンドルされませんでした。とエラーが出ます。テーブルアダプターを確認するとしっかりセレクト文が入っているのですが、この部分をウォッチするとNothingになっています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問