投稿

12月, 2021の投稿を表示しています

12月24日(金)1、2コマ目

イメージ
今日は進捗調整のため、C#はまったくやらずにデータベースをやりました。 データベース「ビュー作成おさらい演習2」の解説 ビュー名:ジャンル別売上金額 これはとくになんてことはないかと。 [正解例] create or replace view ジャンル別売上金額(ジャンル名, 売上金額) as  select ジャンル名, sum(定価*数量)  from ジャンルマスタ, 商品マスタ, 売上詳細データ where ジャンルマスタ.ID=商品マスタ.ジャンルID  AND 商品マスタ.ID=売上詳細データ.商品ID group by ジャンル名; ビュー名:売上一覧 売上毎なので、売上IDでグループ化すればOKですが、氏名、売上日も出力する必要があります。 そのため、group by句に売上IDに氏名、売上日も追加する必要があります。 1件の売上で顧客、売上日が複数になることはないため、group by 売上ID, 氏名, 売上日でも問題はありません。 [正解例] create or replace view 売上一覧(顧客名, 売上日, 売上金額, 商品数) as select 氏名, 売上日, sum(定価*数量), sum(数量) from 商品マスタ, 顧客マスタ, 売上データ, 売上詳細データ where 商品マスタ.ID=売上詳細データ.商品ID and 顧客マスタ.ID=売上データ.顧客ID and 売上データ.id=売上詳細データ.売上id group by 売上データ.ID, 氏名, 売上日 order by 売上日, sum(定価*数量); ビュー名:最高売上数商品データ 副問い合わせの副問い合わせになります。 まず、商品ごとの売上数を求めます。  select sum(数量) AS 売上数量   from 売上詳細データ   group by 商品ID つぎに、この結果から売上数量列の最大値を取得します。  select max(売上数量)   from (    select sum(数量) AS 売上数量    from 売上詳細データ    group by 商品ID   ) 図 商品ごとの売上数量から最大値を取得 最後に、商品ごとの売上数量...

12月23日(木)4コマ目

イメージ
今日、やったこと HTMLのstyle属性と<style>タグ 今日のホワイトボード フォントの色や大きさを変えるには タグにstyle属性を追加して設定します。 図 フォントの色や大きさを変える 設定フォーマットは以下のとおりです。   設定項目名:設定値;  設定項目名はいろいろあるため、結局はネット情報に頼ることになります。 一部分だけ変更したい タグ全体ではなく、一部分だけを変更したい場合、 変更箇所を<span>タグで領域を作って設定します 。 <span>タグは見た目には一切影響のないタグで、領域を作るためだけに利用します。 図 <span>タグで領域を作って設定する タグはネスト可能 ネスト構造にする場合、図のように閉じていないタグ同士がクロスオーバーするのはNGです。 図 タグはネスト可能 練習問題 下から2行目のヒント 図 設定もネストされる 解答例をあげておきます。 <style>タグ <span>タグなら必ず文字色を赤色で表示する場合、各<span>タグでstyle属性を使って指定するのは効率が悪いです。 特定のタグのデザイン(文字色、サイズ)をまとめて指定することもできます。 まとめて指定するには以下のように<style>タグにて   タグ名 {   設定項目名:設定値;  } のように設定します。

12月17日(金)1、2コマ目

イメージ
今日、やったこと SQL(検索系)のおさらい HTMLの基礎 今日のホワイトボード 検索系SQLのおさらいをやりました。 検索系はSQLというより、 テーブル1行はなんのデータ? テーブル間の関係 をまず確認することがポイントです。結局はデータをまず確認しろということです。 DB2ビュー作成課題その1 テーブル間の関係およびテーブル1行のデータは下図のとおりです。 図 DB2ビュー作成課題その1 授業で解説しながら作成したファイルです。 sum(販売価格*数量)について 以下のSQLですが、 SELECT 商品名,・・, sum(販売価格*数量) ・・ GROUP BY 商品名; これは ①各行の販売価格*数量を計算 ②商品名が同じ行でグループ化 ③各グループ内の販売価格*数量の総和を計算 の順に処理されます。 図 sum(販売価格*数量) DB2ビュー作成課題おさらい1 テーブル間の関係およびテーブル1行のデータは下図のとおりです。 図 ビュー作成課題おさらい1 授業で解説しながら作成したファイルです。 C#練習問題「従業員シリーズ」 テーブルのデータおよびテーブル間の関係です。 これはSQL的にはそんなに難しくはないと思います。 日付データの取り扱いがポイントでしょうか。 HTML 簡単なHTMLを作りました。 HTMLにはいろいろな役割別のタグが用意されており、  HTMLファイル作成=データに応じたタグを指定する ことになります。 今日使ったタグは以下のとおりです。 <H1></H1> 見出しタグ。 なお、見出しタグには<h1>から<h6>...

12月10日(金)1、2コマ目

イメージ
今日、やったこと (前々回からのつづき)練習問題(DB_16 - DB_27) 今日のホワイトボード C#で文字列を日付型へ 日時を表す文字列(string型)をDateTime型に変換するにはDateTime.Parse()を使います。 図 文字列(string型)をDateTime型へ変換 なお、Parse()の引数はどんな文字列でもDateTime型に変換できるわけではありません。 定時前に出勤 2021年11月2日に定時前に出勤した人を検索する場合です。 実行するSQLは 要は出勤日時列が2021年11月2日 00:00:00以降 かつ 2021年11月2日 08:30:00より前の人を検索すればOKです。 出勤日時列が2021年11月2日 08:30:00より前だけでは2021年11月1日の出勤データも含められてしまいます。 図 2021年11月2日の定時(8:30)前に出勤した人を検索する C#のプログラムでは 日付のパラメーターマーカーにセットする値はDateTime型。 日付と時刻の文字列を結合した文字列をDateTime.Parse()でDateTime型へ変換します。 図 パラメーターマーカーをセットする値 練習問題について 前回はDB_16からDB_20までの解答例をあげておきました。 今回は残りの解答例をあげておきます。 プロジェクト名:DB_21 Summary.cs Program.cs プロジェクト名:DB_22 Program.cs プロジェクト名:DB_23 Program.cs プロジェクト名:DB_24 Program.cs プロジェクト名:DB_25 Program.cs プロジェクト名:DB_26 Program.cs プロジェクト名:DB_27 Summary.cs Program.cs

12月9日(木)1コマ目

イメージ
今日、やったこと 練習問題 今日のホワイトボード 日付型の扱い方 前回も同じモノを書いてました。 図 ODP.NETでの日付型の扱い方 訂正 DB_23が間違っていました。すいません。 図 訂正(DB_23) 前提条件 はじめに話しておくべきでした。 日付をまたいで勤務することはありません。 朝(定時は8:30)出勤して、夜(定時は17:30)に退勤します。 有給休暇制度もあるため、8:30より後に出勤することや17:30より前に退勤することもあります。 出勤時間が前日になることはありません。 退勤時間が23:59を超えることはありません。 ヒント 定時前に出勤 例えば、2021年11月2日の場合。 定時前に出勤した人を検索するには、以下の検索条件になる。 WHERE  出勤日時>2021-11-02 00:00:00 AND 出勤日時<2021-11-02 08:30:00 検索対象となる日付2021-11-02はstring型の引数(date)として渡されるので、文字列結合を使って検索条件の2つの日時を作成すればいい。 2021-11-02 00:00:00 => date + " 00:00:00" 2021-11-02 08:30:00 => date + " 08:30:00" 文字列結合で作成した日時データはDateTime.Parse()でDateTime型へ変換できる。

12月3日(金)1、2コマ目

イメージ
日付型について C#では DateTime型 があります。 DateTimeはクラスではなく、構造体です。よって、DateTime型変数にnullを代入することはできません。 DateTime型変数に日時を代入する 現在日時は  DateTime.Now  で取得できます。 例)変数dtに現在日時が代入される。 DateTime dt = DateTime.Now; 日付の文字列をDateTime型へ変換する DateTime.Parse(string str) を使います。 例)文字列"2021-12-03 08:30:00"をDateTime型に変換、代入 DateTime dt = DateTime.Parse("2021-12-03 08:30:00"); 変換対象の文字列は日時がわかるフォーマットならOK。 〇 2021/12/03 08:30:00 日時は/でもOK 〇 2021/12/3 8:30:0 03 => 3、08=>8でもOK × 2021 12 03 08:30:00  Oracleでは いくつか型が用意されていますが、今回は Date型 を使います。 Date型では年、月、日、時、分、秒まで扱うことができます。 ODP.NETでは OracleのDate型の列の値をパラメータマーカーで置き換える場合、OracleParameterクラスのインスタンス生成では  new OracleParameter(パラメータ名, OracleDbType.Date ) のように、OracleDbType.Date型を指定してください。 また、 パラメータマーカーにセットする値はC#のDateTime型 です。 図 日付型 今日、やったこと 練習問題(DB_16~DB_24) 今日の練習問題 検索から更新まで一通りできるようになったので、慣れるための課題をやってもらいました。 途中まで正解例をあげておきます。 [提供済み]Deptクラス 部署情報を扱うためのクラス。 [...

12月2日(木)1コマ目

イメージ
前回のテスト(ODP.NET確認テスト1)解答例 解答例をあげておきます。 C#+ODP.NET確認テスト1 解答例 採点して SQLで間違っている人が多い です。 ID列が部署マスタ、従業員マスタの両方にあります。 そのため、問1のSELECT句には   〇  SELECT  従業員マスタ.ID , 氏名, 部署名   ×  SELECT  ID , 氏名, 部署名 と、 テーブル名.列名 で指定する必要があります。 ”ID”だけではどちらのテーブルのID列かわかりません。 今日、やったこと Listクラスを使う 今日のホワイトボード 前回より検索結果をListクラスのインスタンスに格納して戻り値として返すようにしました。 前回のおさらい(プロジェクト名:DB_15) CS_商品マスタを全件検索し検索結果(ID列、商品名列、価格列)1件ごとにItemクラスのインスタンスを生成する。生成したItemクラスのインスタンスはListクラスのインスタンスに格納して返す。 グループ名も含める CS_商品マスタ、CS_グループマスタを結合し、全件検索する。 取得する列は商品ID(CS_商品マスタのID列)、商品名、価格、グループ名。 ItemクラスのGroupプロパティ Itemクラスにその商品が属するグループ情報を格納するGroupプロパティをつくる。 GroupプロパティはGroupクラス型。よって、GroupプロパティにはGroupクラスのインスタンスが代入される。 ItemクラスとGroupクラスのインスタンスは下図のような関係になる。 図 ItemクラスのGroupプロパティ Groupクラス Itemクラス 検索結果をListクラスのインスタンスに追加する このListクラスのインスタンスにはItemクラスのインスタンスのみ格納可能。 Itemクラスのインスタンスを生成する際、Groupクラスのインスタンスも生成して、Groupプロパティに代入する。 検索結果を表示する グ...