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

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

ただいまの
回答率

88.93%

VB.Net INSERTできるレコード数制限

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 2,340

LATE

score 13

前提・実現したいこと

新規登録時にDelFlgが0のデータを10件まで登録可能という上限設定がわかりません。
一件ずつデータを入れていきます
10件までは登録できて、11件は登録しないような動作をしたいです

【状態】
DelFlg =0 削除されていない
DelFlg =1 削除されている

【できていること】

・新規追加時にテキストに入力されている値をデータベースへ追加
・採番可能
・削除を実行するとDelFlgが0から1に変更になる
データが行ごと削除されるわけではない

【新規追加時】
UserID UserName DelFlg
1      A    0
2      B    0
【削除時】
UserID UserName DelFlg
1      A    1     ← UPDATEでDelFlgが0から1へ変更
2      B    0
画面このような画面です
↓関係ないと思いますが…

###一覧表示処理コード DelFlgが0のものしか表示しない
Private Sub 一覧表示_Click(sender As System.Object, e As System.EventArgs) Handles 一覧表示.Click
        Dim strSQL As String
        Dim SQLDA As SqlClient.SqlDataAdapter
        Dim SQLDS As New DataSet()
        'SQL文
        strSQL = "SELECT * FROM テーブル名 WHERE DelFlg = 0 "

        SQLDA = New SqlClient.SqlDataAdapter(strSQL, strConnectSQL)

        'データセットに格納
        SQLDA.Fill(SQLDS, "TEST")

        Me.DataGridView1.DataSource = SQLDS.Tables("TEST")
    End Sub
###新規追加時 一部抜粋

   'SQL文
    strSQL2 = "SELECT MAX(UserCd) AS UserCdMax FROM M_User_Mizutani "
~~~省略~~~~
Dim ID As Integer = 0
            If dtRow("UserCdMax") Is DBNull.Value Then
                ' NULL
                ID = 0
            Else
                ' NOT NULL
                ID = CInt(dtRow("UserCdMax"))
            End If
 strSQL = "INSERT INTO テーブル名 VALUES " & _
                       "  (" & ID + 1 & ", " & _
                      " '" & Text名前.Text & "' ,  '" & Textカナ.Text & "', " & _
                      " '" & Text郵便.Text & "',   '" & Text住所1.Text & "', " & _
                      " '" & Text住所2.Text & "', '" & Text住所3.Text & "', " & _
                      " '" & Text住所1カナ.Text & "', '" & Text住所2カナ.Text & "', " & _
                      " '" & Text住所3カナ.Text & "', " & Text電話番号.Text & ", " & _
                      " " & TextFAX番号.Text & ", " & _
                      " '" & Textメールアドレス.Text & "', " & _
                      " '" & Text誕生日.Text & "', " & _
                      " '**ここにDelFlgの値が入ります 初期値0**','" & dtNow.ToString() & "', " & _
                      "'' )"
コード

試したこと

DelFlgが0のものを数えればいいと考えましたがどのように書けばいいのかわかりませんでした。
COUNT関数

補足情報(言語/FW/ツール等のバージョンなど)

言語   VB.NET
ツール Visual Studio 2010
SQLServer

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • akabee

    2017/04/26 16:20

    「新規登録時にDelFlgが0のデータを10件まで」というのは、何か画面があり、そこで新規登録という作業ができるということですか?そのとき、一気に11件やろうとしたときにエラーにしたいということですか?その場合、10件までは登録できて、1件は登録しないような動作ですか?また、「新規追加時 一部抜粋」で挙げて頂いているInsert文に、DelFlgと思われる列が見当たらないのですがdtNow.ToString()がDelFlgですか?

    キャンセル

  • LATE

    2017/04/26 16:40

    情報を修正しました わかりにくい説明で申し訳ございませんでした。よろしくお願いいたします

    キャンセル

回答 2

+1

修正拝見しました。
色々なやり方があるかと思うのですが、このケースで一番シンプルなのは、住所録画面の初期表示時に新規追加した回数を格納する変数を用意し、「新規登録」ボタンがクリックされるたびにカウントアップしていき、10件になったら「新規登録」ボタンクリック時に「これ以上は追加できません。一度画面を閉じて下さい」というようなメッセージボックスを表示するような方法でしょうか。
(一度画面を閉じたらまた新規登録できるという理解で良いのでしょうか?)

COUNT関数というキーワードが出てきているあたり、データベースのデータを見て判断したいと考えていらっしゃるかもしれないのですがそこに何か理由はありますか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/26 17:19 編集

    承知しました。その場合、当初の案(初期化時に登録した回数をカウントする変数を作る)だと問題があるのでしょうか?
    問題があるなら、改善案を考えてみます。(私は問題点が分かっていません)

    もし新入社員が100人いたら、10件までしか登録できなければどうするのだろうと思っています。
    もしかして、「1人につき」住所が10件までしか登録できないというような制御をかけたいということですか?

    キャンセル

  • 2017/04/26 17:24 編集

    何度も申し訳ございません
    初期化時に登録した回数をカウントする変数を作る
    という案で問題ありません。
    学習のために作成しているので100人いたらというのは全く考えておりません
    とりあえずは、10件まで登録できるようにしたいという感じです。

    キャンセル

  • 2017/04/26 17:38

    そういうことですか、了解しました。
    がんばってみてください!

    キャンセル

check解決した方法

0

これで解決しました。
一部抜粋

'```

sql作る         strSQL = "SELECT COUNT(DelFlg) as cntDelflg FROM テーブル名 WHERE DelFlg = 0 "

        'SQL実行(Selectする)         SQLDA = New SqlClient.SqlDataAdapter(strSQL, strConnectSQL)         'datatableへセット         SQLDA.Fill(dtSet1, "DelFlg")

        Datb = dtSet1.Tables("DelFlg")

        dtRow1 = Datb.Rows(0)

        If dtRow1("cntDelflg") >= 10 Then

            MsgBox("これ以上追加できません。") ```

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 88.93%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る