private void SearchButton_Click(object sender, EventArgs e) { string errMes = ""; //検索条件の取得 DateTime searchFormDate = Common.FormatDatetimeStart(FromDateTimePicker.Value); DateTime searchToDate = Common.FormatDatetimeEnd(ToDateTimePicker.Value); int searchStatusCode = Common.GetStatusCodeFromText(this.StatusComboBox.SelectedItem.ToString()); //ステータスのコード変換 //FromToの整合性チェック //検索処理 List <DaoAttendance> daoAttendanceList = new List <DaoAttendance>(); if (errMes == "") { errMes = DaoAttendance.SelectFromTo(ref daoAttendanceList, searchFormDate, searchToDate, searchStatusCode); } //検索結果処理 if (errMes == "") { //検索結果を使ってDataGridに値を反映させる SetDataTable(daoAttendanceList); } //エラーメッセージ if (errMes != "") { MessageBox.Show(errMes, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
/// <summary> /// 最終更新ラベルを更新する /// </summary> /// <param name="daoAttendance">記載したい情報の入ったDaoAttendanceオブジェクト</param> private void SetLastActionLabel(DaoAttendance daoAttendance) { string txt = "最終更新:"; txt += daoAttendance.recordDate.ToString(); txt += " | "; txt += GetRecordStatus(daoAttendance.toWork); LastActionLabel.Text = txt; }
/// <summary> /// DBの初期セットアップを行う /// </summary> private void DBSetup() { string errMes = ""; errMes = DaoAttendance.Setup(); if (errMes != "") { MessageBox.Show(errMes); } }
/// <summary> /// 日付範囲による検索 /// </summary> /// <param name="daoAttendanceList">検索結果格納用変数</param> /// <param name="fromDate">検索開始範囲</param> /// <param name="toDate">検索終了範囲</param> /// <param name="statusCode">ステータスコード</param> /// <returns>エラーメッセージ 正常終了の場合空文字</returns> public static string SelectFromTo(ref List <DaoAttendance> daoAttendanceList, DateTime fromDate, DateTime toDate, int statusCode) { string errMes = ""; try { using (SQLiteConnection con = new SQLiteConnection("Data Source=" + DB_FILE_NAME)) { con.Open(); using (SQLiteCommand cmd = con.CreateCommand()) { StringBuilder sql = new StringBuilder(); sql.AppendLine("SELECT"); sql.AppendLine(" *"); sql.AppendLine("FROM " + TABLE_NAME); sql.AppendLine("WHERE 1=1"); sql.AppendLine(" AND REPLACE([record_date],'/','-') >= @startDate"); sql.AppendLine(" AND REPLACE([record_date],'/','-') <= @endDate"); //MEMO:データの投入形式がyyyy/MM/ddとなっているため、REPLACEしないとWHERE文にマッチしない cmd.Parameters.Add(new SQLiteParameter("startDate", fromDate)); cmd.Parameters.Add(new SQLiteParameter("endDate", toDate)); //ステータス指定時のみ追加 if (statusCode == 1 || statusCode == 2) { sql.AppendLine(" AND [to_work] = @status"); cmd.Parameters.Add(new SQLiteParameter("status", statusCode)); } cmd.CommandText = sql.ToString(); SQLiteDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { DaoAttendance attendance = new DaoAttendance(); attendance.recordDate = reader.GetFieldValue <string>(reader.GetOrdinal("record_date")); attendance.toWork = reader.GetFieldValue <long> (reader.GetOrdinal("to_work")); daoAttendanceList.Add(attendance); } } } } catch (Exception e) { errMes = e.ToString(); } return(errMes); }
/// <summary> /// 勤怠記録テーブルへの書き込み処理を呼び出す /// </summary> /// <param name="recordDateTime">記録対象日時</param> /// <param name="status">出勤(1)/退勤(2)</param> private void RecordWorkTime(DateTime recordDateTime, int status) { string errMes = ""; DaoAttendance daoAttendance = new DaoAttendance(); daoAttendance.recordDate = recordDateTime.ToString("yyyy/MM/dd HH:mm:ss"); daoAttendance.toWork = status; errMes = daoAttendance.Insert(); if (errMes != "") { MessageBox.Show(errMes); } else { MessageLabel.Text = "登録を完了しました。 ( " + recordDateTime.ToLongTimeString() + " )"; GetLastedRecord(); } }
/// <summary> /// 記録日付の新しいデータを上限付きで取得 /// </summary> /// <param name="daoAttendanceList">結果受け取りリスト</param> /// <param name="limit">LIMIT句で指定する行数</param> /// <returns>エラーメッセージ 正常終了の場合空文字</returns> public static string SelectAll(ref List <DaoAttendance> daoAttendanceList, int limit) { string errMes = ""; try { using (SQLiteConnection con = new SQLiteConnection("Data Source=" + DB_FILE_NAME)) { con.Open(); using (SQLiteCommand cmd = con.CreateCommand()) { StringBuilder sql = new StringBuilder(); sql.AppendLine("SELECT"); sql.AppendLine(" *"); sql.AppendLine("FROM " + TABLE_NAME); sql.AppendLine("ORDER BY"); sql.AppendLine(" DATE(REPLACE(record_date,'/','-')) DESC,"); sql.AppendLine(" TIME(REPLACE(record_date,'/','-')) DESC"); //MEMO:データの投入形式がyyyy/MM/ddとなっているため、REPLACEしないとORDER BY文にマッチしない sql.AppendLine("LIMIT " + limit); cmd.CommandText = sql.ToString(); SQLiteDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { DaoAttendance attendance = new DaoAttendance(); attendance.recordDate = reader.GetFieldValue <string>(reader.GetOrdinal("record_date")); attendance.toWork = reader.GetFieldValue <long> (reader.GetOrdinal("to_work")); daoAttendanceList.Add(attendance); } } } } catch (Exception e) { errMes = e.ToString(); } return(errMes); }
/// <summary> /// 勤怠テーブルデータの最新20件を取得する /// </summary> private void GetLastedRecord() { string errMes = ""; List <DaoAttendance> daoAttendanceList = new List <DaoAttendance>(); errMes = DaoAttendance.SelectAll(ref daoAttendanceList, 20); if (errMes == "") { SetDataTable(daoAttendanceList); if (daoAttendanceList.Count > 0) { SetLastActionLabel(daoAttendanceList[0]); } else { LastActionLabel.Text = ""; } } else { MessageBox.Show(errMes); } }