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

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

新規登録して質問してみよう
ただいま回答率
85.48%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

VB.NET

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

Q&A

解決済

2回答

3904閲覧

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

LATE

総合スコア13

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

VB.NET

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

0グッド

1クリップ

投稿2017/04/26 07:12

編集2017/04/26 07:39

###前提・実現したいこと
新規登録時に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

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

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

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

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

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

akabee

2017/04/26 07:20

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

2017/04/26 07:40

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

回答2

0

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

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

投稿2017/04/26 07:50

akabee

総合スコア1947

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

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

LATE

2017/04/26 07:56

回答ありがとうございます (一度画面を閉じたらまた新規登録できるという理解で良いのでしょうか?) →データベースにデータを追加するので一度登録したら画面を閉じてもデータベース上で情報が保持されているという感じです VBからSQLServerに接続しているのでデータベースが必要不可欠といいますか 初心者なのでうまく説明できているかわかりませんが、よろしくお願いいたします。
akabee

2017/04/26 08:03

>データベースにデータを追加するので一度登録したら画面を閉じてもデータベース上で情報が保持されているという感じです そこは理解できています。 何か噛み合っていないように感じています。 0.画面を開く 1.新規登録する(1回目) 2.新規登録する(2回目) ・・・ 10.新規登録する(10回目) 11.新規登録する → ここで、10件登録済みなのでエラーにする 12.この場合、さらに11件以降を登録したければ、1度画面を閉じる(画面を閉じても登録した10件はデータベースに登録されている) 13.画面を再度開く 14.新規登録する(11回目) ・・・ ということでLATEさんのやりたいことと私の認識は合っていますか?
LATE

2017/04/26 08:10

度々すいません。 10.新規登録する(10回目) 11.新規登録する → ここで、10件登録済みなのでエラーにする ここまでは自分がしたいことと同じです 12.更に登録したければ、10件あるデータを削除して件数を減らす 13.新規登録する って流れです。
akabee

2017/04/26 08:22 編集

承知しました。その場合、当初の案(初期化時に登録した回数をカウントする変数を作る)だと問題があるのでしょうか? 問題があるなら、改善案を考えてみます。(私は問題点が分かっていません) もし新入社員が100人いたら、10件までしか登録できなければどうするのだろうと思っています。 もしかして、「1人につき」住所が10件までしか登録できないというような制御をかけたいということですか?
LATE

2017/04/26 08:27 編集

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

2017/04/26 08:38

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

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("これ以上追加できません。")

投稿2017/04/27 07:41

LATE

総合スコア13

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問