- ベストアンサー
VB.NETでSQLを作る時のカンマの対処
こんにちは。 タイトルの通りなのですが、VB.NETでSQL文を作りたいのですが、カンマの対処について分からなかったので質問させて頂きました。 例えば、下記のようなテーブルとwindowsアプリケーションフォームがあったとします。 itemテーブル フォーム(□はチェックボックスだと思ってください。) item_id item_cd item_name □ りんご --------------------------------- □ ばなな 0001 0001 りんご □ みかん 0002 0002 ばなな □ めろん 0003 0003 みかん 0004 0004 めろん このフォームで、チェックボックスに印が付いているものを、SQL文の条件に加えたいと思っていますが、なかなか上手く書けません。 現在のソース sql="SELECT item_id,item_cd,item_name " _ & "FROM item " _ & "WHERE item_name IN (" If apple.checked = True Then sql &= "'" & label1.text & "'," End If If banana.checked = True Then sql &= "'" & label2.text & "'," End If ・ ・ ・ このやり方だと、sql文の最後にカンマが残ってしまいます。 ですが、前カンマをやったところで構文的におかしくなってしまいます。 このようなとき、どのように対処すればよいのでしょうか? よろしければ、教えてください。
- spiral1111
- お礼率37% (18/48)
- Visual Basic
- 回答数5
- ありがとう数5
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
dim needComma as boolean = false If apple.checked = True Then if needComma then sql &= "," end if sql &= "'" & label1.text & "'" needComma = true End If If banana.checked = True Then if needComma then sql &= "," end if sql &= "'" & label2.text & "'" needComma = true End If 泥臭く作るとこんな具合ですかね。
その他の回答 (4)
- K-Sogacchi
- ベストアンサー率53% (50/93)
既にいろいろ書かれてますが、他にも例えば… Dim tmpIN As String = "" If apple.Checked Then tmpIN &= IIf(tmpIN = "", "", ",").ToString & label1.Text End If If banana.Checked Then tmpIN &= IIf(tmpIN = "", "", ",").ToString & label2.Text End If : : sql = sql & tmpIN & ")" とか。 わざわざToStringを使ってるのは、Option Strict Onだと、IIf関数の 戻り値がObject型(のはず)なのでエラーになるからです。 関数とか使って綺麗に組めば、もうちょっとスッキリさせられるかもですが、 とりあえず、この程度で。 余談: もしかして、CheckBox右の文字を表示するために、わざわざLabel使ってたりします? CheckBox.Textで十分だと思うのですが…
お礼
皆様、大変参考になる意見ありがとうございました。 自分では結構考えたつもりだったのに、こんなにたくさんの対処法があることにビックリしました。 もっと勉強したいと思います。
- KG_
- ベストアンサー率62% (34/54)
redfox63さんと提案内容は同じですが、VB2005で同じようなことを 自分がやっていますので一例としてどうぞ。 List(Of T)クラスを使った手法です。 ------------------------------------------------- Dim whereList as New List(Of String) Dim sql As String sql = "select name from members " whereList.Add("group_name='" & label1.Text & "'") whereList.Add("class_name='" & label2.Text & "'") sql &= "where " & String.Join(",",List.ToArray) Debug.Print(sql) --------------------------------------------------
お礼
皆様、大変参考になる意見ありがとうございました。 自分では結構考えたつもりだったのに、こんなにたくさんの対処法があることにビックリしました。 もっと勉強したいと思います。
- redfox63
- ベストアンサー率71% (1325/1856)
ArrayListと String.Jonをつかって簡素化してみてはいかがでしょう dim ar as New ArrayList() dim ss as string ar = AddRange(New String() {"りんご", "ばなな", "みかん", "めろん"}) ' フォームのControlsコレクションを検査 for each ctl as Contol in Controls if typeof ctl is CheckBox then ' CheckBoxでチェックが無い場合 if CType(ctl,CheckBox).Checked=False then dim n as Integer = ar.IndexOf( ctl.Text ) ' arにアイテムが登録されているならば削除 if n > -1 then ar.RemoveAt(n) end if end if next if ar.Length > 0 then ' アイテムが残っているなら ',' でアイテム同士をつなぐ ss = String.Format( " WHERE IN ( '{0}' )", _ String.Join( "','", ar.ToArray( GetType( String ) ) ) ) end if といった具合です
お礼
皆様、大変参考になる意見ありがとうございました。 自分では結構考えたつもりだったのに、こんなにたくさんの対処法があることにビックリしました。 もっと勉強したいと思います。
- kokorone
- ベストアンサー率38% (417/1093)
SQL文の前で、ローカル変数で、IN句に含まれる文字列を つくり込んでおき、SQL文では、ローカル変数を参照するように すれば、いかがですか? もちろん、ローカル変数の最後のカンマは、削除しておくこと。 dim kwd as string 'kwd設定処理 kwd=left(kwd,len(kwd)-1) '最後のカンマを削除 こんなふうにね。
お礼
皆様、大変参考になる意見ありがとうございました。 自分では結構考えたつもりだったのに、こんなにたくさんの対処法があることにビックリしました。 もっと勉強したいと思います。
関連するQ&A
- VB.Netのテキストボックスのコントロール
VB2010を使用しています。チェックボックスのon/offでテキストボックスの入力を制限しようとしています。 If Check1.Checked = True Then For Each Cont As Control In Me.Groupko顧客数.Controls If Cont.Name Like "Text*" Then ここの記述ですが 『Cont.ReadOnly = True』と書いても構文が違うのか認識しません?? End If Next Else 逆のコードの予定 End If 大量のテキストボックスがあるので一つ一つコードを書くのは面倒なので ご教授お願いします。
- ベストアンサー
- Visual Basic
- 行数をカウントするSQLにつきまして
行数をカウントするSQLにつきまして いつもお世話になっております。 下記の売上テーブルから りんご=3(行) みかん=2(行) メロン=1(行) というようなデータを抽出するSQLはどのように記述したら良いのでしょうか? ・・・・売上テーブル・・・ 売上番号 品名 単価 1 りんご 100 2 りんご 100 3 りんご 100 4 みかん 150 5 みかん 150 6 メロン 250
- ベストアンサー
- その他(データベース)
- 表をtxtで書き出して行内に任意の文字を入れたい
Excelで以下のような空セルに記入を求めるシートを作成し、 入力後、txtで書き出すと下段のように任意の文字を挿入してくれるシートを作りたいのですが、 この場合、Excelの"フォーム"等という箇所を勉強すれば良いのでしょうか。 ラベル1はなんですか | (空セル) | (空セル) ラベル2はなんですか | (空セル) | (空セル) ↓入力 ラベル1はなんですか | りんご | メロン ラベル2はなんですか | イチゴ | みかん ↓txtで書き出すと・・・ label01,りんご,メロン,label01end label01,イチゴ,みかん,label02end
- ベストアンサー
- オフィス系ソフト
- if文からcase文への置き換え
ピクチャボックスをクリックしたら、チェック ボックスがチェックされるメソッドを作りたいと 思っています。 Private Sub PictureBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click,PictureBox2.Click 'ここから If sender Is PictureBox1 Then If Me.CheckBox1.Checked = False Then Me.CheckBox1.Checked = True Else Me.CheckBox1.Checked = False End If ElseIf sender Is PictureBox2 Then If Me.CheckBox2.Checked = False Then Me.CheckBox2.Checked = True Else Me.CheckBox2.Checked = False End If End If 'ここまで End Sub 上記のif文をCase文に置き換えたくて、 'ここから Select Case sender Case PictureBox1 If Me.CheckBox1.Checked = False Then Me.CheckBox1.Checked = True Else Me.CheckBox1.Checked = False End If Case PictureBox2 If Me.CheckBox2.Checked = False Then Me.CheckBox2.Checked = True Else Me.CheckBox2.Checked = False End If End Select 'ここまで 上記のように書き換えたのですが、エラーが出てしまいます(ビルドは通るのですが)。 Case文の使い方が間違っているんだとは思いますが、どこがどう 間違っているのがよくわかりません。 ご教授いただけないでしょうか?
- ベストアンサー
- Visual Basic
- 行数をカウントするSQLにつきまして
行数をカウントするSQLにつきまして いつもお世話になっております。 下記の売上テーブルから みかん=3(行目) というようなデータを抽出するSQLはどのように記述したら良いのでしょうか? ・・・・売上テーブル・・・ 売上番号 品名 単価 101 りんご 100 102 りんご 100 103 みかん 150 104 りんご 100 105 みかん 150 106 メロン 250 postgre8.3のためrow_numberが使えません
- 締切済み
- PostgreSQL
- PHP SQL 問合せについて
SQLについて質問いたします。SQL 全般でも結構です。 No,name 1,ばなな 2,りんご 3,ばなな 4,みかん 5,ばなな 6,りんご 上記テーブルで 1,ばなな 3,ばなな 5,ばなな 2,りんご 6,りんご 4,みかん の結果を得るSQLはどのように記述すればよいでしょうか?
- ベストアンサー
- その他(データベース)
- 条件判断について教えて下さい。
VB2008を使用している初心者です。 現在、RichTextBoxとCheckBoxとそれに対応したTextBoxを準備し、CheckBoxがTrueのTextBox.TextをRichTextBoxに代入するプログラムを作成しています。RichTextBoxにはCheckBoxをTrueにした分だけ複数のTextBox.Textを代入させています。ここまでのプログラムは下記コードで問題なく作動しています。 Button1を押す。 RichTextBox1.Clear() If Me.CheckBox1.Checked = True Then RichTextBox1.Text = TextBox1.Text End If If Me.CheckBox2.Checked = True Then If RichTextBox1.Text <> "" Then RichTextBox1.Text = RichTextBox1.Text & "・" End If RichTextBox1.Text = RichTextBox1.Text & TextBox2.Text End If ・ ・ ・ If Me.CheckBox20.Checked = True Then If RichTextBox1.Text <> "" Then RichTextBox1.Text = RichTextBox1.Text & "・" End If RichTextBox1.Text = RichTextBox1.Text & TextBox20.Text End If ここで問題なのですが、RichTextBox1への代入完了後、FalseにしたCheckBoxを再度True(代入時に選択したもののみ)にするコードをButton2に作成したいのですが上手くいきません。例えば下記のコードですと、RichTextBoxに1つだけTextBoxが入っている場合しかCheckBoxのTrueが戻りません。 If Me.CheckBox1.Checked = False Then If RichTextBox1.Text = TextBox1.Text Then Me.CheckBox1.Checked = True End If End If ・ ・ ・ If Me.CheckBox20.Checked = False Then If RichTextBox1.Text = TextBox20.Text Then Me.CheckBox2.Checked = True End If End If これはIf RichTextBox1.Text = TextBox1.Text Thenにしてしまっているためだと思いますが、これをどう修正したら良いかわかりません。もしお時間がある方みえましたらご教授お願いいたします。
- ベストアンサー
- Visual Basic
- チェックボックス/ラジオボタン
CGIを勉強中です。 まだ無料で配布されているCGIをカスタムするくらいしかできないレベルです。 今度やりたいのが、チェックボックス/ラジオボタンどじらでもいいのですが、 こちらに送られてくるメールフォームで選択されているものは仮に「Y」 選択されていないものは「N」という形で受け取りたい場合はどのように したらできるのでしょうか? よろしくお願いします。 <input type="checkbox" name="みかん" value="みかん" />みかん <input type="checkbox" name="りんご" value="りんご" />りんご <input type="checkbox" name="メロン" value="メロン" />メロン <input type="radio" name="みかん" value="みかん">みかん <input type="radio" name="りんご" value="りんご">りんご
- ベストアンサー
- CGI
- VBでSQL
SQLでテーブル1に該当レコードがなければインサート あればアップデートをする処理をしたいのです IF ??? THEN UPDATE テーブル1 SET SELECT * FROM テーブル2 WHERE 条件 ELSE INSERT INTO テーブル1(SELECT * FROM テーブル2) END IF ???はプライマリキーで判定をしようと考えています こんな感じでやろうとしたところ うまくいきませんでした VB上で実行しよううとしているからなのでしょうか? ADOでSQLサーバに接続しています 条件分岐もどういう条件(VBでの書き方)がわからないです。 よろしくお願いします。
- 締切済み
- Visual Basic
- VBでの質問です
VBでの質問です 5分を計るタイマーを作っていて5分たつと止まるプログラムを作っていて、コンマ以下のケタが長くて、しかも止まらない( Label1.Text = n5.Subtract(Now).ToStringをLabel1.Text = n5.Subtract(Now).TotalMinutesにしてIf Label1.Text = "00:00:00" ThenをIf Label1.Text = "0" Thenにした時は止まりました)ので止まるようにするにはどこを変えればいいですか? 教えてください 以下コードです Public Class Form1 Dim n5 As DatePrivate Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load n5 = Now.AddMinutes(5) Timer1.Interval = 1000 Timer1.Start() End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Label1.Text = n5.Subtract(Now).ToString If Label1.Text = "00:00:00" Then MsgBox("時間になりました。") Timer1.Stop() End If End Sub 長文ですいません
- ベストアンサー
- Visual Basic
お礼
皆様、大変参考になる意見ありがとうございました。 自分では結構考えたつもりだったのに、こんなにたくさんの対処法があることにビックリしました。 もっと勉強したいと思います。