20190611

 SQLのことはまだ何も触ってないから相変わらずわからないけど、いくつか思い違いをしていた点は解決した?気がした。まず無理にパネルに全部載せしなくても良さそうだということ。フォームを生成して、消して同時に生成する感じでいいっぽい。ちゃんとオブジェクト指向で分けてクラスとか作れよって感じ。だいたいにおいて全部ガーッと作ってからクラスを切り出したりメソッドにバラしたりしてたけど、よくない気がする。あとコメントが舐めプすぎたのでちゃんと人に見られることを意識して書きます。すみません。

 IDとパスのテーブルを作って、IDと名前とその他情報のテーブルとをくっつける形でいいのか?IDとパスでログイン通ったら、そのIDを持って情報テーブルに検索かけて、情報テーブルから任意の情報を取り出すって感じか?

 まずはどこかにあるデータベースと接続しないといけない。本当はその前にどこかにデータベースをちゃんと作って置かないといけないけど。接続はこういうのやんな。

string str = @"Data Source=192.168.0.1;Initial Catalog=(Database名);Connect Timeout=60;Persist Security Info=True;
SqlConnection con = new SqlConnection(str);
con.Open();

最初の方は何となくわかってきたけど、これ以降のコマンドとか戻り値が何なのかよくわからない。SqlDataReaderとか使えばいいのか。あー?

 具体的に、ログイン情報データベースとの接続を確立して、入力された文字列とデータベースの文字列を比較。比較するためにデータベースの文字をforeachみたいな形で取り出し続けて、もしログインIDと一致したらパスを取得して比較。パスも一致してたら画面遷移する。

"select id,pass from tablename"が実行文で

SqlDataReader sdr = cmd.ExecuteReader();

while(sdr.Read())
{

    //ここで入力文字列とパスを比較して...
}

この一連の命令自体は、何か入力されて明らかに偽の条件(入力文が空とか、IDの長さが決まっていたらその範囲に一致しないものとか)であれば弾いて、そのあと回せばいい?多分クリックされたら始まる、で。

 であれば、datagridviewは据え置きではなく、つど生成してしまった方が楽なのか。

 ログインしたら、さっきのようにExecuteReader()回して、IDと一致した行の個人情報をどんどん作ってListにでもためておく。で、その行を元にdatagridviewを作る。

 

 ちなみに出勤退勤何だけど今のまま行くと、一度作ったデータを消去できるコマンドがない。出勤も退勤も編集可能になるはずなので、どちらも空にされた場合はその行を削除するようにすればいいかな。更新処理後、出勤と退勤のセルがnullな列は削除。10日出勤の12日退勤のパターンは退勤登録時に一番最近の出勤のみ登録されている行に登録する。そして、出勤日と退勤日が異なる場合、退勤日の0時から退勤登録時間で一行作って、退勤日時をその前の日の24時(23:59か?)にする、また異なるかチェックする。異なればその日の時からで作って退勤日時をという形。出勤日時と退勤日時が一致すれば終わり。何でIDと出勤した日の二つをキーとして出勤退勤テーブルになるのか?あと休憩時間も登録してるので休憩時間も。これ、元の入力はnullにしておいて、1.データベースから読み込んできて、2.出勤時と退勤時の時差から勤務時間を計算して、その結果から休憩時間を引く、3.データベースの勤務時間にnullからその時差を上書きする。これが出勤退勤の時間の変更と更新反映だと、入力した時間が1.出勤時より後か(退勤時より前か)という点をクリアする、2.あーこれってセルが変更されたものなのかって知れるの?まあいいや。入力した時間から再度計算。出勤か退勤時間を一つだけいじった場合は、別段問題ない。同時に出勤退勤いじった場合も多分そんなに変わらない。ただ、休憩時間が長すぎて勤務時間がマイナスになるのは発生しえるな。勤務時間がマイナスになったら警告出して変更させない。

 あとは勤務日が変更されるのも面倒。12-22時の出勤を12-26時みたいにしたい時、26時は入力させたくないと思う。多分そういうのありにしたら144時とかもありなのか?何でその場合はどうする?

 加えて、出勤したら出勤が登録されてしまうのでその日に100回出勤押したら100回出勤してることになる。これは退勤が押されてるかは関係なく。なので退勤なしで同日の出勤を押すのはダメよするか、押されても無視。修正で同日に揃えてくるとかのキ印してきたらどうしよ。その前に、退勤して同日出勤は本当に同日出勤ぽいので再度登録して、退勤を待つ。退勤が登録された時に、さっきの日またぎを勘案して処理していくんだから、その処理の中で、同日の出勤が二つあれば、二つの出勤のうち早い方を出勤時間にして遅い方を退勤時間にする。最初の退勤時間からあとの出勤時間までを休憩時間に加算する。んで出勤退勤時間をnullにすればさっきので片一方の行は消えるはず。これで処理としてはいい感じかな?

 ただ修正された時がめんどくさそう。修正して同日に揃えられたら9-19と12-20が合体して9-20の休憩時間が、マイナス?になるとかあり得る。それをどう弾くか。重なっている時間がないかをチェックすればいいのか。出勤記録aと出勤記録bが同日にさせられた。というか勤務した日を変更するってどういう事態何だよ。まあ。そしたら出勤時間を比較するaの方が早かった、であればaの退勤時間よりbの出勤時間の方が遅いか?であれば一応操作は可能とする。かな?

 日にちの修正は面倒なので一旦無視。

 DaraGridViewの操作もわかってないし何もわからん。何もわからん

 

 野々原茜さんのアナザー衣装を手に入れたので嬉しい。1000位以内だったけど100位の得点とか見てるとまともに生活しながらではないだろうと思う。