Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
SQLServer2008とVB2010でログイン画面を作りたい
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=15554#CommentId41876
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
an
 (社会人)
投稿日時
2014/3/17 17:21:43
> 名前が変わってますが複数条件検索のプログラムについて質問した名無しと同一人物です。
> 久しぶりにこのサイトに来たので名前を忘れていました。
やはりそうでしたか。
その旨一言最初にあればなお良かったのですが^^;
できればユニークになる名前に変えた方が望ましいですね。
> 現状はこうなっていまして、Textboxの内容をSQLserverにどう参照させるかが分かりません。
これについては前回の複数条件検索のプログラムが理解できていれば基本的にはできるはずです。
ただ一部毛色が異なるのでそこだけ解説します。
基本的に前回も今回もデータの照会・照合なのでSQLのSELECT文を使用します。
前回のは条件(Where句)が入力内容によって変動しますが、
今回は条件(Where句)の中の対象項目は変動せず、入力値の部分だけ変わるので
そこは簡素化された形になると思います。
また取得内容として前回のは一覧形式だったので
SQL文→SqlDataAdapter→DataTableと変換させて最終的にDataGridに表示させていたと思いますが、
今回は単純に対象のレコードがあるか(1件か0件か)を判断すれば良いわけです。
条件に入力された値をセットし、レコードが取得できるかと判定しても良いですし、
SQLの集計関数のCount(*)を使用しても良いと思います。
Count(*)を使う場合のサンプル
http://code.msdn.microsoft.com/windowsdesktop/DataAccess-howto-7ad051b1
※個人的にはログインした後にログインしたユーザーの情報により
その後の処理・設定を変えるという事が想像できるので、
レコードを取得した方が良いとは思いますが・・・。
> サンプル集を見ましたが、現時点で自分が欲しい情報が見つかりませんでした。
基本的にはプログラマが使用したい情報が100%に載っている事はないと考えた方が良いでしょう。
そのまま使えるというケースもありますが、基本的にはそのまま使う事は色々な意味で個人的にはありえません。
・アルゴリズムは要件と一致しているが、コーディングルール(命名規則等)が違う。
・そのまま使う=理解をしていない=今後何か問題が発生した時に応用が利かない。
・著作権的なものはそのまま使っても問題ないか?
・etc
とりあえず先ほどお伝えした
http://homepage1.nifty.com/rucio/main/dotnet/Samples/Sample033ConnectSQLServer.htm
にある程度の情報はあるはずです。
上記Count(*)のサンプルとも類似していますが、理解して改造すれば使えるはずです。
今回最低でも改造する部分としては
・SQL文
・取得した後の処理(MsgBoxではなく条件文(If))
・etc
まずはSystem.Data.SqlClient.SqlCommandクラスとそのクラスのExecuteScalarメソッドあたりについて
勉強してみてはいかがでしょうか?
> 今回のデータベースプログラムとは何かとありましたが、最初に触れましたが複数条件検索プログラムにも応用したいと思っています。
> 今は、全てのTextboxにClearを使っていますが約20個以上もClear指定するよりも手っ取り早いと考え尋ねています。
そういう意味でしたか。
やり方は色々ありますが、.NET側が用意している共通処理として自分は知りません。
また初期化と言ってもクリア(=テキストが空)のケースもあれば、既定の文字(「0」等)が入る場合もありますので。
その用件に合わせて最適なものを作るのがプログラマの腕な気がします。
とりあえずクリア(=テキストが空)しかないというのであれば以下のような形かと思います。
(1)クリア用メソッドを作ってそこで全てのテキストボックスをClearメソッドを呼び、
画面ロード時やクリアボタン押下時等必要に応じてに呼び出す。
(2)フォーム上の全てのコントロールをMe.Controlsより取得し、
対象がテキストボックスならClearメソッドを呼ぶ。
※Me.ControlsではGroupBoxコントロール等のコンテナコントロールの上に乗っているコントロールは
取得でいないので考慮が必要。
※クリアしたくないコントロールもクリアされる可能性があるので考慮が必要
(3)基本的には(2)の派生した考え方になるが、
対象のコントロールをMe.Controlsを使用せずに、List(of T)等に事前(フォームコンストラクタ等)に設定し、
それをループで回してClearメソッドを呼ぶする。
それぞれ一長一短だと思いますが、個人的にはご自身が理解できるレベルで行うのが一番だと思います。
基礎的なものが理解できたら、一つ上の・・・という感じで。
コレクション、ForEach、再帰処理、ジェネリックコレクション等が理解できている様であれば、
(2)または(3)で、理解できていないようであれば(1)が良いと思います。
また、その時々ではありますが、自分が作る時も(1)でやるケースが多いと思います。
とりあえずは文章のみでコードは書きませんでしたが、
全体像を理解した上で細かな点が分からないようであれば、
必要に応じてコードにて説明しようと思います。
ちなみに質問が複数ある場合は別々にした方が良いですね。
質問する側も回答する側も今後似たような問題が発生して参照する側も
分かりやすくなると思いますので。