コード例 #1
0
 private void InitClass() {
     this.DataSetName = "DatabaseSet";
     this.Prefix = "";
     this.Namespace = "http://tempuri.org/DatabaseSet.xsd";
     this.EnforceConstraints = true;
     this.SchemaSerializationMode = global::System.Data.SchemaSerializationMode.IncludeSchema;
     this.table工作單 = new 工作單DataTable();
     base.Tables.Add(this.table工作單);
     this.table工作單品號 = new 工作單品號DataTable();
     base.Tables.Add(this.table工作單品號);
     this.table工時 = new 工時DataTable();
     base.Tables.Add(this.table工時);
     this.table使用者 = new 使用者DataTable();
     base.Tables.Add(this.table使用者);
     this.table非生產 = new 非生產DataTable();
     base.Tables.Add(this.table非生產);
     this.table員工 = new 員工DataTable();
     base.Tables.Add(this.table員工);
     this.table產品系列 = new 產品系列DataTable();
     base.Tables.Add(this.table產品系列);
     this.table產品品號 = new 產品品號DataTable();
     base.Tables.Add(this.table產品品號);
     this.table產線 = new 產線DataTable();
     base.Tables.Add(this.table產線);
     this.table產品品號View = new 產品品號ViewDataTable();
     base.Tables.Add(this.table產品品號View);
     this.table假日 = new 假日DataTable();
     base.Tables.Add(this.table假日);
     this.table假日View = new 假日ViewDataTable();
     base.Tables.Add(this.table假日View);
     this.table品質原因 = new 品質原因DataTable();
     base.Tables.Add(this.table品質原因);
     this.table產品檢驗 = new 產品檢驗DataTable();
     base.Tables.Add(this.table產品檢驗);
     this.table待驗清單 = new 待驗清單DataTable();
     base.Tables.Add(this.table待驗清單);
     global::System.Data.ForeignKeyConstraint fkc;
     fkc = new global::System.Data.ForeignKeyConstraint("工作單工作單品號", new global::System.Data.DataColumn[] {
                 this.table工作單.單號Column}, new global::System.Data.DataColumn[] {
                 this.table工作單品號.單號Column});
     this.table工作單品號.Constraints.Add(fkc);
     fkc.AcceptRejectRule = global::System.Data.AcceptRejectRule.None;
     fkc.DeleteRule = global::System.Data.Rule.Cascade;
     fkc.UpdateRule = global::System.Data.Rule.Cascade;
     fkc = new global::System.Data.ForeignKeyConstraint("產線員工", new global::System.Data.DataColumn[] {
                 this.table產線.產線Column}, new global::System.Data.DataColumn[] {
                 this.table員工.產線Column});
     this.table員工.Constraints.Add(fkc);
     fkc.AcceptRejectRule = global::System.Data.AcceptRejectRule.None;
     fkc.DeleteRule = global::System.Data.Rule.Cascade;
     fkc.UpdateRule = global::System.Data.Rule.Cascade;
     fkc = new global::System.Data.ForeignKeyConstraint("產線產品品號", new global::System.Data.DataColumn[] {
                 this.table產線.產線Column}, new global::System.Data.DataColumn[] {
                 this.table產品品號View.產線Column});
     this.table產品品號View.Constraints.Add(fkc);
     fkc.AcceptRejectRule = global::System.Data.AcceptRejectRule.None;
     fkc.DeleteRule = global::System.Data.Rule.Cascade;
     fkc.UpdateRule = global::System.Data.Rule.Cascade;
     this.relation工作單工作單品號 = new global::System.Data.DataRelation("工作單工作單品號", new global::System.Data.DataColumn[] {
                 this.table工作單.單號Column}, new global::System.Data.DataColumn[] {
                 this.table工作單品號.單號Column}, false);
     this.Relations.Add(this.relation工作單工作單品號);
     this.relation產線員工 = new global::System.Data.DataRelation("產線員工", new global::System.Data.DataColumn[] {
                 this.table產線.產線Column}, new global::System.Data.DataColumn[] {
                 this.table員工.產線Column}, false);
     this.Relations.Add(this.relation產線員工);
     this.relation產線產品品號 = new global::System.Data.DataRelation("產線產品品號", new global::System.Data.DataColumn[] {
                 this.table產線.產線Column}, new global::System.Data.DataColumn[] {
                 this.table產品品號View.產線Column}, false);
     this.Relations.Add(this.relation產線產品品號);
     this.relation產品系列產品品號 = new global::System.Data.DataRelation("產品系列產品品號", new global::System.Data.DataColumn[] {
                 this.table產品系列.編號Column}, new global::System.Data.DataColumn[] {
                 this.table產品品號.系列編號Column}, false);
     this.Relations.Add(this.relation產品系列產品品號);
     this.relation產品系列產品品號1 = new global::System.Data.DataRelation("產品系列產品品號1", new global::System.Data.DataColumn[] {
                 this.table產品系列.編號Column}, new global::System.Data.DataColumn[] {
                 this.table產品品號View.系列編號Column}, false);
     this.Relations.Add(this.relation產品系列產品品號1);
     this.relation產線產品品號1 = new global::System.Data.DataRelation("產線產品品號1", new global::System.Data.DataColumn[] {
                 this.table產線.產線Column}, new global::System.Data.DataColumn[] {
                 this.table產品品號.產線Column}, false);
     this.Relations.Add(this.relation產線產品品號1);
     this.relation產品品號工作單品號 = new global::System.Data.DataRelation("產品品號工作單品號", new global::System.Data.DataColumn[] {
                 this.table產品品號.品號Column}, new global::System.Data.DataColumn[] {
                 this.table工作單品號.品號Column}, false);
     this.Relations.Add(this.relation產品品號工作單品號);
     this.relation工作單工時 = new global::System.Data.DataRelation("工作單工時", new global::System.Data.DataColumn[] {
                 this.table工作單.單號Column}, new global::System.Data.DataColumn[] {
                 this.table工時.工作單號Column}, false);
     this.Relations.Add(this.relation工作單工時);
     this.relation非生產工時 = new global::System.Data.DataRelation("非生產工時", new global::System.Data.DataColumn[] {
                 this.table非生產.編號Column}, new global::System.Data.DataColumn[] {
                 this.table工時.非生產編號Column}, false);
     this.Relations.Add(this.relation非生產工時);
     this.relation員工工時 = new global::System.Data.DataRelation("員工工時", new global::System.Data.DataColumn[] {
                 this.table員工.編號Column}, new global::System.Data.DataColumn[] {
                 this.table工時.員工編號Column}, false);
     this.Relations.Add(this.relation員工工時);
     this.relation產品品號工作單品號1 = new global::System.Data.DataRelation("產品品號工作單品號1", new global::System.Data.DataColumn[] {
                 this.table產品品號View.品號Column}, new global::System.Data.DataColumn[] {
                 this.table工作單品號.品號Column}, false);
     this.Relations.Add(this.relation產品品號工作單品號1);
     this.relation工時產品檢驗 = new global::System.Data.DataRelation("工時產品檢驗", new global::System.Data.DataColumn[] {
                 this.table工時.編號Column}, new global::System.Data.DataColumn[] {
                 this.table產品檢驗.工時資料編號Column}, false);
     this.Relations.Add(this.relation工時產品檢驗);
     this.relation工作單品號工時1 = new global::System.Data.DataRelation("工作單品號工時1", new global::System.Data.DataColumn[] {
                 this.table工作單品號.單號Column,
                 this.table工作單品號.編號Column}, new global::System.Data.DataColumn[] {
                 this.table工時.工作單號Column,
                 this.table工時.工品編號Column}, false);
     this.Relations.Add(this.relation工作單品號工時1);
 }
コード例 #2
0
 internal 待驗清單Row(global::System.Data.DataRowBuilder rb) : 
         base(rb) {
     this.table待驗清單 = ((待驗清單DataTable)(this.Table));
 }
コード例 #3
0
 internal void InitVars(bool initTable) {
     this.table工作單 = ((工作單DataTable)(base.Tables["工作單"]));
     if ((initTable == true)) {
         if ((this.table工作單 != null)) {
             this.table工作單.InitVars();
         }
     }
     this.table工作單品號 = ((工作單品號DataTable)(base.Tables["工作單品號"]));
     if ((initTable == true)) {
         if ((this.table工作單品號 != null)) {
             this.table工作單品號.InitVars();
         }
     }
     this.table工時 = ((工時DataTable)(base.Tables["工時"]));
     if ((initTable == true)) {
         if ((this.table工時 != null)) {
             this.table工時.InitVars();
         }
     }
     this.table使用者 = ((使用者DataTable)(base.Tables["使用者"]));
     if ((initTable == true)) {
         if ((this.table使用者 != null)) {
             this.table使用者.InitVars();
         }
     }
     this.table非生產 = ((非生產DataTable)(base.Tables["非生產"]));
     if ((initTable == true)) {
         if ((this.table非生產 != null)) {
             this.table非生產.InitVars();
         }
     }
     this.table員工 = ((員工DataTable)(base.Tables["員工"]));
     if ((initTable == true)) {
         if ((this.table員工 != null)) {
             this.table員工.InitVars();
         }
     }
     this.table產品系列 = ((產品系列DataTable)(base.Tables["產品系列"]));
     if ((initTable == true)) {
         if ((this.table產品系列 != null)) {
             this.table產品系列.InitVars();
         }
     }
     this.table產品品號 = ((產品品號DataTable)(base.Tables["產品品號"]));
     if ((initTable == true)) {
         if ((this.table產品品號 != null)) {
             this.table產品品號.InitVars();
         }
     }
     this.table產線 = ((產線DataTable)(base.Tables["產線"]));
     if ((initTable == true)) {
         if ((this.table產線 != null)) {
             this.table產線.InitVars();
         }
     }
     this.table產品品號View = ((產品品號ViewDataTable)(base.Tables["產品品號View"]));
     if ((initTable == true)) {
         if ((this.table產品品號View != null)) {
             this.table產品品號View.InitVars();
         }
     }
     this.table假日 = ((假日DataTable)(base.Tables["假日"]));
     if ((initTable == true)) {
         if ((this.table假日 != null)) {
             this.table假日.InitVars();
         }
     }
     this.table假日View = ((假日ViewDataTable)(base.Tables["假日View"]));
     if ((initTable == true)) {
         if ((this.table假日View != null)) {
             this.table假日View.InitVars();
         }
     }
     this.table品質原因 = ((品質原因DataTable)(base.Tables["品質原因"]));
     if ((initTable == true)) {
         if ((this.table品質原因 != null)) {
             this.table品質原因.InitVars();
         }
     }
     this.table產品檢驗 = ((產品檢驗DataTable)(base.Tables["產品檢驗"]));
     if ((initTable == true)) {
         if ((this.table產品檢驗 != null)) {
             this.table產品檢驗.InitVars();
         }
     }
     this.table待驗清單 = ((待驗清單DataTable)(base.Tables["待驗清單"]));
     if ((initTable == true)) {
         if ((this.table待驗清單 != null)) {
             this.table待驗清單.InitVars();
         }
     }
     this.relation工作單工作單品號 = this.Relations["工作單工作單品號"];
     this.relation產線員工 = this.Relations["產線員工"];
     this.relation產線產品品號 = this.Relations["產線產品品號"];
     this.relation產品系列產品品號 = this.Relations["產品系列產品品號"];
     this.relation產品系列產品品號1 = this.Relations["產品系列產品品號1"];
     this.relation產線產品品號1 = this.Relations["產線產品品號1"];
     this.relation產品品號工作單品號 = this.Relations["產品品號工作單品號"];
     this.relation工作單工時 = this.Relations["工作單工時"];
     this.relation非生產工時 = this.Relations["非生產工時"];
     this.relation員工工時 = this.Relations["員工工時"];
     this.relation產品品號工作單品號1 = this.Relations["產品品號工作單品號1"];
     this.relation工時產品檢驗 = this.Relations["工時產品檢驗"];
     this.relation工作單品號工時1 = this.Relations["工作單品號工時1"];
 }
コード例 #4
0
ファイル: DatabaseSet.cs プロジェクト: amon0424/SWLHMS
        public static int UpdateInspectList(待驗清單DataTable table, out int ok)
        {
            OleDbConnection conn = new OleDbConnection(Properties.Settings.Default.dbConnectionString);

            //string cmdText = "UPDATE 工時 SET 數量 = 數量 + ? WHERE 編號 = ?";
            string cmdText = "UPDATE 工時 SET 數量 = ? WHERE 編號 = ?";

            OleDbCommand cmd = new OleDbCommand(cmdText, conn);
            cmd.Parameters.Add(new OleDbParameter("數量", OleDbType.Integer, -1, "待驗數量"));
            cmd.Parameters.Add(new OleDbParameter("編號", OleDbType.VarWChar, 255, "工時資料編號"));

            OleDbDataAdapter adapter = new OleDbDataAdapter();
            adapter.AcceptChangesDuringUpdate = false;
            adapter.UpdateCommand = cmd;

            //更新每一筆檢驗通過的工作單完成狀態
            DataRow[] rows = table.Select("(檢驗 = True AND (檢驗結果 = True OR 特許 = True)) ");
            ok = adapter.Update(rows);

            foreach (DataRow row in rows)
            {
                string worksheet = (string)row["工作單號"];
                int wpid = (int)row["工品編號"];
                //CheckFinish(worksheet, wpid, (DateTime)row["日期"]);

                DateTime finishDate;
                if (CheckFinish(worksheet, wpid, out finishDate))
                    SetFinishDate(worksheet, wpid, DateTime.Today);

                //檢查並更新工作單完成狀態
                UpdateWorksheetFinishDate(worksheet);
            }

            cmdText = "UPDATE 產品檢驗 SET 最後檢驗紀錄=False WHERE 最後送檢編號=?";
            cmd = new OleDbCommand(cmdText, conn);
            //cmd.Parameters.Add(new OleDbParameter("最後送檢編號", OleDbType.VarWChar, 255, ParameterDirection.Input, false, 0, 0, "工時資料編號", DataRowVersion.Original, null));
            cmd.Parameters.Add(new OleDbParameter("最後送檢編號", OleDbType.VarWChar, 255, "工時資料編號"));
            adapter.UpdateCommand = cmd;
            rows = table.Select("檢驗 = True");
            //cmd.UpdatedRowSource = UpdateRowSource.None;
            adapter.Update(rows);

            //更新已檢驗的資料
            cmdText = "UPDATE 產品檢驗 SET 檢驗=?, 檢驗結果=?, 日期=?, 特許=?, 最後檢驗紀錄=True WHERE 工時資料編號=?";
            cmd = new OleDbCommand(cmdText, conn);
            cmd.Parameters.Add(new OleDbParameter("檢驗", OleDbType.Boolean, -1, "檢驗"));
            cmd.Parameters.Add(new OleDbParameter("檢驗結果", OleDbType.Boolean, -1, "檢驗結果"));
            //cmd.Parameters.Add(new OleDbParameter("品質原因", OleDbType.Integer, -1, "品質原因"));
            //cmd.Parameters.Add(new OleDbParameter("日期", DateTime.Now.ToString("s")));
            OleDbParameter paramDate = new OleDbParameter();
            paramDate.OleDbType = OleDbType.DBTimeStamp;
            paramDate.Value = DateTime.Now.ToString("s");
            cmd.Parameters.Add(paramDate);
            cmd.Parameters.Add(new OleDbParameter("特許", OleDbType.Boolean,-1, "特許"));
            cmd.Parameters.Add(new OleDbParameter("工時資料編號", OleDbType.VarWChar, 255, "工時資料編號"));

            adapter.UpdateCommand = cmd;
            adapter.AcceptChangesDuringUpdate = true;
            DataRow[] inspectedRows = table.Select("檢驗 = True");
            int update = adapter.Update(inspectedRows);

            //更新NG原因
            cmdText = "INSERT INTO NG原因 (工時資料編號, 原因, 來源編號) VALUES (?,?,?)";
            cmd = new OleDbCommand(cmdText, conn);
            cmd.Parameters.Add(new OleDbParameter("工時資料編號", OleDbType.VarWChar, 255, "工時資料編號"));
            cmd.Parameters.Add(new OleDbParameter("原因", OleDbType.LongVarWChar, -1, "NG原因"));
            cmd.Parameters.Add(new OleDbParameter("來源編號", OleDbType.VarWChar, 255, "工時資料編號"));
            adapter.InsertCommand = cmd;
            foreach (DataRow row in inspectedRows)
            {
                if (!string.IsNullOrEmpty(row["NG原因"] as string))
                    row.SetAdded();
            }
            adapter.Update(inspectedRows);

            return update;
        }
コード例 #5
0
ファイル: DatabaseSet.cs プロジェクト: amon0424/SWLHMS
        public static int UpdateInspectDeleteList(待驗清單DataTable table, out int delete)
        {
            OleDbConnection conn = new OleDbConnection(Properties.Settings.Default.dbConnectionString);

            //減去刪除的數量
            string cmdText = "UPDATE 工時 SET 數量 = 0 WHERE 編號 = ?";

            OleDbCommand cmd = new OleDbCommand(cmdText, conn);
            //cmd.Parameters.Add(new OleDbParameter("數量", OleDbType.Integer, -1, "待驗數量"));
            cmd.Parameters.Add(new OleDbParameter("編號", OleDbType.VarWChar, 255, "工時資料編號"));

            OleDbDataAdapter adapter = new OleDbDataAdapter();
            adapter.UpdateCommand = cmd;
            DataRow[] rows = table.Copy().Select("刪除=True");
            delete = adapter.Update(rows);

            //判斷是否要回復未完成狀態
            foreach (DataRow row in rows)
            {
                string worksheet = (string)row["工作單號"];
                int wpid = (int)row["工品編號"];

                //若未完成則恢復成未完成狀態
                if (!CheckFinish(worksheet, wpid))
                    SetFinishDate(worksheet, wpid, null);

                //取得工作單資料
                //工作單DataTable wsTable = 工作單TableAdapter.Instance.GetBy單號(worksheet);

                ////如果設定了實際完成日,則檢查是否恢復成未完成狀態
                //if (wsTable[0][wsTable.實際完成日Column] != DBNull.Value)
                //{
                //    //檢查是否全部已完成
                //    DatabaseSet.工作單品號DataTable wpTable = 工作單品號TableAdapter.Instance.GetBy單號(worksheet);
                //    bool allFinished = true;
                //    foreach (DatabaseSet.工作單品號Row wsRow in wpTable)
                //    {
                //        if (wsRow["實際完成日"] == DBNull.Value)
                //        {
                //            allFinished = false;
                //            break;
                //        }
                //    }
                //    if (!allFinished)
                //        工作單TableAdapter.Instance.SetFinishDate(null, worksheet);
                //}

                UpdateWorksheetFinishDate(worksheet);
            }

            //更新已刪除的資料
            cmdText = "UPDATE 產品檢驗 SET 檢驗=False, 檢驗結果=False, 日期=NULL, 特許=False WHERE 工時資料編號=?";
            cmd = new OleDbCommand(cmdText, conn);
            cmd.Parameters.Add(new OleDbParameter("工時資料編號", OleDbType.VarWChar, 255, "工時資料編號"));

            adapter.UpdateCommand = cmd;
            DataRow[] inspectedRows = table.Select("刪除 = True");
            int update = adapter.Update(inspectedRows);

            return update;
        }
コード例 #6
0
ファイル: DatabaseSet.cs プロジェクト: amon0424/SWLHMS
        public static 待驗清單DataTable GetUnreinspectList(string line, string name)
        {
            OleDbConnection conn = new OleDbConnection(Properties.Settings.Default.dbConnectionString);
            OleDbCommand cmd = new OleDbCommand();
            cmd.Connection = conn;

            System.Collections.Generic.List<string> whereList = new System.Collections.Generic.List<string>();
            whereList.Add("檢驗 = True AND 檢驗結果=False AND 特許=False AND 重驗=False");
            if (line != null && line.Trim() != string.Empty)
            {
                cmd.Parameters.Add(new OleDbParameter("產線", line));
                whereList.Add("產線 = ?");
            }
            if (name != null && name.Trim() != string.Empty)
            {
                cmd.Parameters.Add(new OleDbParameter("姓名", name));
                whereList.Add("姓名 = ?");
            }

            string cmdText = "SELECT 產線, 單據日期, 工作單號, P.品號, WP.數量 as 總數量, 待驗數量, 預計完成日, QCN, 送檢次數, 檢驗, 檢驗結果, 工時資料編號, 送檢日期 as 日期, 工品編號" +
                             " FROM ((((工時 as H INNER JOIN 產品檢驗 as Q on H.編號 = Q.工時資料編號) " +
                             " INNER JOIN 工作單 as W on H.工作單號 = W.單號)" +
                             " INNER JOIN 工作單品號 as WP ON H.工作單號 = WP.單號 AND H.工品編號 = WP.編號)" +
                             " INNER JOIN 產品品號 as P ON P.品號 = WP.品號)";
            if (whereList.Count > 0)
                cmdText += " WHERE " + string.Join(" AND ", whereList.ToArray());

            cmdText += " ORDER BY 送檢日期, 單據日期, 工作單號, 工品編號";

            cmd.CommandText = cmdText;
            OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);

            待驗清單DataTable table = new 待驗清單DataTable();
            adapter.Fill(table);

            //檢查是否立即待驗及取得完成數量
            table.Columns.Add("序號", typeof(int));
            table.Columns.Add("待驗提醒", typeof(string));
            table.Columns.Add("已完成", typeof(decimal)).DefaultValue = 0;
            table.Columns.Add("NG原因", typeof(string)).DefaultValue = null;
            table.Columns.Add("舊NG原因", typeof(string));
            table.Columns.Add("特許", typeof(bool));

            cmd = new OleDbCommand("SELECT SUM(待驗數量) + SUM(H.數量) >= WP.數量, SUM(H.數量) as 已完成" +
                                    " FROM ((工時 as H LEFT JOIN (SELECT * FROM 產品檢驗 WHERE 檢驗 = FALSE) as Q on H.編號 = Q.工時資料編號) " +
                                    " INNER JOIN 工作單品號 as WP ON H.工作單號 = WP.單號 AND H.工品編號 = WP.編號)" +
                                    " WHERE WP.單號=? AND WP.編號=? " +
                                    " GROUP BY 單號, WP.編號, WP.數量", conn);
            cmd.Parameters.Add("單號", OleDbType.VarWChar);
            cmd.Parameters.Add("編號", OleDbType.Integer);

            conn.Open();
            string curWorksheet = null;
            int curWpid = -1;

            foreach (DataRow row in table)
            {
                string worksheet = row["工作單號"].ToString();
                int wpid = (int)row["工品編號"];

                if (worksheet != curWorksheet || wpid != curWpid)
                {
                    curWorksheet = worksheet;
                    curWpid = wpid;
                    DataRow[] rows = table.Select("工作單號='" + worksheet + "' AND 工品編號=" + wpid);
                    int sn = 1;
                    foreach (DataRow r in rows)
                        r["序號"] = sn++;
                }

                cmd.Parameters[0].Value = worksheet;
                cmd.Parameters[1].Value = wpid;

                //bool inspectImm = false;

                OleDbDataReader dr = cmd.ExecuteReader();
                if (dr.Read())
                {
                    //object result = dr[0];
                    //if (result != DBNull.Value)
                    //    inspectImm = Convert.ToInt32(result) != 0;

                    object complete = dr[1];
                    if (complete != DBNull.Value)
                        row["已完成"] = complete;
                }
                dr.Close();
                //if (inspectImm)
                //    row["待驗提醒"] = "待驗";

                //取得舊NG原因
                string id = row["工時資料編號"].ToString();
                string[] ngReasons = GetNGReason(id);
                row["舊NG原因"] = string.Join("\n", ngReasons);
            }
            conn.Close();

            return table;
        }
コード例 #7
0
ファイル: DatabaseSet.cs プロジェクト: amon0424/SWLHMS
        public static 待驗清單DataTable GetInspectCompleteList(string qcn, string partnumber, DateTime date)
        {
            OleDbConnection conn = new OleDbConnection(Properties.Settings.Default.dbConnectionString);
            OleDbCommand cmd = new OleDbCommand();
            cmd.Connection = conn;

            System.Collections.Generic.List<string> whereList = new System.Collections.Generic.List<string>();
            whereList.Add("檢驗 = True AND 檢驗結果 = True ");
            if (!string.IsNullOrEmpty(qcn))
            {
                cmd.Parameters.Add(new OleDbParameter("QCN", qcn + "%"));
                whereList.Add("QCN LIKE ?");
            }
            if (!string.IsNullOrEmpty(partnumber))
            {
                cmd.Parameters.Add(new OleDbParameter("品號", partnumber + "%"));
                whereList.Add("品號 LIKE ?");
            }

            if (date != DateTime.MinValue)
            {
                OleDbParameter param = new OleDbParameter("日期", OleDbType.Date);
                param.Value = date;
                cmd.Parameters.Add(param);
                whereList.Add("datediff(\"d\", ?, Q.日期)=0");
                //whereList.Add("Q.日期 = ?");
            }

            string cmdText = "SELECT 單據日期, 工作單號, 品號, 客戶, WP.數量 as 總數量, 待驗數量, QCN, 檢驗結果, Q.日期 as 檢驗日期, 工品編號, 工時資料編號" +
                             " FROM (((工時 as H INNER JOIN 產品檢驗 as Q on H.編號 = Q.工時資料編號) " +
                             " INNER JOIN 工作單 as W on H.工作單號 = W.單號)" +
                             " INNER JOIN 工作單品號 as WP ON H.工作單號 = WP.單號 AND H.工品編號 = WP.編號)";
            if (whereList.Count > 0)
                cmdText += " WHERE " + string.Join(" AND ", whereList.ToArray());

            cmdText += " ORDER BY 單據日期, 工作單號, 工品編號";

            cmd.CommandText = cmdText;
            OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);

            待驗清單DataTable table = new 待驗清單DataTable();
            adapter.Fill(table);

            //取得完成數量
            table.Columns.Add("序號", typeof(int));
            table.Columns.Add("已完成", typeof(decimal)).DefaultValue = 0;

            cmd = new OleDbCommand("SELECT SUM(H.數量) as 已完成" +
                                    " FROM ((工時 as H LEFT JOIN (SELECT * FROM 產品檢驗 WHERE 檢驗 = FALSE) as Q on H.編號 = Q.工時資料編號) " +
                                    " INNER JOIN 工作單品號 as WP ON H.工作單號 = WP.單號 AND H.工品編號 = WP.編號)" +
                                    " WHERE WP.單號=? AND WP.編號=? " +
                                    " GROUP BY 單號, WP.編號, WP.數量", conn);

            cmd.Parameters.Add("單號", OleDbType.VarWChar);
            cmd.Parameters.Add("編號", OleDbType.Integer);

            conn.Open();
            string curWorksheet = null;
            int curWpid = -1;

            foreach (DataRow row in table)
            {
                string worksheet = row["工作單號"].ToString();
                int wpid = (int)row["工品編號"];

                if (worksheet != curWorksheet || wpid != curWpid)
                {
                    curWorksheet = worksheet;
                    curWpid = wpid;
                    DataRow[] rows = table.Select("工作單號='" + worksheet + "' AND 工品編號=" + wpid);
                    int sn = 1;
                    foreach (DataRow r in rows)
                        r["序號"] = sn++;
                }

                cmd.Parameters[0].Value = worksheet;
                cmd.Parameters[1].Value = wpid;

                OleDbDataReader dr = cmd.ExecuteReader();
                if (dr.Read())
                {
                    object complete = dr[0];
                    if (complete != DBNull.Value)
                        row["已完成"] = complete;
                }
                dr.Close();
            }
            conn.Close();

            return table;
        }