public bool mdl_question_usages_Them(DataTable ds_mdl_question_attempts, DataTable ds_mdl_quiz_attempts)
        {
            DbAccess db = new DbAccess();

            db.BeginTransaction();
            try
            {
                db.CreateNewSqlCommand();
                db.AddParameter("@contextid", contextid);
                db.AddParameter("@component", component);
                db.AddParameter("@preferredbehaviour", preferredbehaviour);
                int questionusage_id = db.ExecuteScalarWithTransaction("mdl_question_usages_Them");
                //------------------
                ds_questionattempt_id.Clear();
                ds_questionattempt_id.Columns.Clear();
                ds_questionattempt_id.Columns.Add("questionusage_id");
                //------------------
                db.CreateNewSqlCommand();
                db.AddParameter("@quiz", ds_mdl_quiz_attempts.Rows[0][1].ToString());
                db.AddParameter("@userid", ds_mdl_quiz_attempts.Rows[0][2].ToString());
                db.AddParameter("@attempt", ds_mdl_quiz_attempts.Rows[0][3].ToString());
                db.AddParameter("@uniqueid", questionusage_id.ToString());
                db.AddParameter("@layout", ds_mdl_quiz_attempts.Rows[0][5].ToString());
                db.AddParameter("@currentpage", ds_mdl_quiz_attempts.Rows[0][6].ToString());
                db.AddParameter("@preview", ds_mdl_quiz_attempts.Rows[0][7].ToString());
                db.AddParameter("@state", ds_mdl_quiz_attempts.Rows[0][8].ToString());
                db.AddParameter("@timestart", ds_mdl_quiz_attempts.Rows[0][9].ToString());
                db.AddParameter("@timefinish", ds_mdl_quiz_attempts.Rows[0][10].ToString());
                db.AddParameter("@timemodified", ds_mdl_quiz_attempts.Rows[0][11].ToString());
                db.AddParameter("@timemodifiedoffline", ds_mdl_quiz_attempts.Rows[0][12].ToString());
                db.AddParameter("@timecheckstate", ds_mdl_quiz_attempts.Rows[0][13].ToString());
                db.AddParameter("@sumgrades", ds_mdl_quiz_attempts.Rows[0][14].ToString());
                db.ExecuteNonQueryWithTransaction("mdl_quiz_attempts_Them");

                //---------
                for (int i = 0; i < ds_mdl_question_attempts.Rows.Count; i++)
                {
                    db.CreateNewSqlCommand();
                    db.AddParameter("@questionusageid", questionusage_id);
                    db.AddParameter("@slot", ds_mdl_question_attempts.Rows[i][2].ToString());
                    db.AddParameter("@behaviour", ds_mdl_question_attempts.Rows[i][3].ToString());
                    db.AddParameter("@questionid", ds_mdl_question_attempts.Rows[i][4].ToString());
                    db.AddParameter("@variant", ds_mdl_question_attempts.Rows[i][5].ToString());
                    db.AddParameter("@maxmark", ds_mdl_question_attempts.Rows[i][6].ToString());
                    db.AddParameter("@minfraction", ds_mdl_question_attempts.Rows[i][7].ToString());
                    db.AddParameter("@maxfraction", ds_mdl_question_attempts.Rows[i][8].ToString());
                    db.AddParameter("@flagged", bool.Parse(ds_mdl_question_attempts.Rows[i][9].ToString()));
                    db.AddParameter("@questionsummary", ds_mdl_question_attempts.Rows[i][10].ToString());
                    db.AddParameter("@rightanswer", ds_mdl_question_attempts.Rows[i][11].ToString());
                    db.AddParameter("@responsesummary", ds_mdl_question_attempts.Rows[i][12].ToString());
                    db.AddParameter("@timemodified", ds_mdl_question_attempts.Rows[i][13].ToString());
                    questionattempt_id = db.ExecuteScalarWithTransaction("mdl_question_attempts_Them");

                    //--------------todo
                    ds_mdl_question_attempt_steps = mdl_question_attempt_steps_DS(ds_mdl_question_attempts.Rows[i][0].ToString(), 0.ToString());
                    db.CreateNewSqlCommand();
                    db.AddParameter("@questionattemptid", questionattempt_id.ToString());
                    ds_questionattempt_id.Rows.Add(questionattempt_id.ToString());
                    db.AddParameter("@sequencenumber", ds_mdl_question_attempt_steps.Rows[0][2].ToString());
                    db.AddParameter("@state", ds_mdl_question_attempt_steps.Rows[0][3].ToString());
                    if ((ds_mdl_question_attempt_steps.Rows[0][4].ToString()) == "")
                    {
                        db.AddParameter("@fraction", DBNull.Value);
                    }
                    else
                    {
                        db.AddParameter("@fraction", (ds_mdl_question_attempt_steps.Rows[0][4].ToString()));
                    }
                    db.AddParameter("@timecreated", ds_mdl_question_attempt_steps.Rows[0][5].ToString());
                    db.AddParameter("@userid", ds_mdl_question_attempt_steps.Rows[0][6].ToString());
                    attemptstep_id = db.ExecuteScalarWithTransaction("mdl_question_attempt_steps_Them");
                    ds_mdl_question_attempt_step_data = mdl_question_attempt_step_data_DS(ds_mdl_question_attempt_steps.Rows[0][0].ToString());//_order
                    db.CreateNewSqlCommand();
                    db.AddParameter("@attemptstepid", attemptstep_id.ToString());
                    db.AddParameter("@name", ds_mdl_question_attempt_step_data.Rows[0][2].ToString());
                    db.AddParameter("@value", ds_mdl_question_attempt_step_data.Rows[0][3].ToString());
                    db.ExecuteNonQueryWithTransaction("mdl_question_attempt_step_data_Them");
                }
                for (int i = 0; i < ds_mdl_question_attempts.Rows.Count; i++)
                {
                    //--------------complete
                    ds_mdl_question_attempt_steps = mdl_question_attempt_steps_DS(ds_mdl_question_attempts.Rows[i][0].ToString(), 1.ToString());//complete
                    db.CreateNewSqlCommand();
                    db.AddParameter("@questionattemptid", ds_questionattempt_id.Rows[i][0].ToString());
                    db.AddParameter("@sequencenumber", ds_mdl_question_attempt_steps.Rows[0][2].ToString());
                    db.AddParameter("@state", ds_mdl_question_attempt_steps.Rows[0][3].ToString());
                    if ((ds_mdl_question_attempt_steps.Rows[0][4].ToString()) == "")
                    {
                        db.AddParameter("@fraction", DBNull.Value);
                    }
                    else
                    {
                        db.AddParameter("@fraction", (ds_mdl_question_attempt_steps.Rows[0][4].ToString()));
                    }
                    db.AddParameter("@timecreated", ds_mdl_question_attempt_steps.Rows[0][5].ToString());
                    db.AddParameter("@userid", ds_mdl_question_attempt_steps.Rows[0][6].ToString());
                    attemptstep_id = db.ExecuteScalarWithTransaction("mdl_question_attempt_steps_Them");
                    ds_mdl_question_attempt_step_data = mdl_question_attempt_step_data_DS(ds_mdl_question_attempt_steps.Rows[0][0].ToString());//_order
                    db.CreateNewSqlCommand();
                    db.AddParameter("@attemptstepid", attemptstep_id.ToString());
                    db.AddParameter("@name", ds_mdl_question_attempt_step_data.Rows[0][2].ToString());
                    db.AddParameter("@value", ds_mdl_question_attempt_step_data.Rows[0][3].ToString());
                    db.ExecuteNonQueryWithTransaction("mdl_question_attempt_step_data_Them");
                }
                for (int i = 0; i < ds_mdl_question_attempts.Rows.Count; i++)
                {
                    //--------------grade
                    ds_mdl_question_attempt_steps = mdl_question_attempt_steps_DS(ds_mdl_question_attempts.Rows[i][0].ToString(), 2.ToString());
                    if (ds_mdl_question_attempt_steps.Rows.Count > 0)
                    {
                        db.CreateNewSqlCommand();
                        db.AddParameter("@questionattemptid", ds_questionattempt_id.Rows[i][0].ToString());
                        db.AddParameter("@sequencenumber", ds_mdl_question_attempt_steps.Rows[0][2].ToString());
                        db.AddParameter("@state", ds_mdl_question_attempt_steps.Rows[0][3].ToString());
                        if ((ds_mdl_question_attempt_steps.Rows[0][4].ToString()) == "")
                        {
                            db.AddParameter("@fraction", DBNull.Value);
                        }
                        else
                        {
                            db.AddParameter("@fraction", (ds_mdl_question_attempt_steps.Rows[0][4].ToString()));
                        }
                        db.AddParameter("@timecreated", ds_mdl_question_attempt_steps.Rows[0][5].ToString());
                        db.AddParameter("@userid", ds_mdl_question_attempt_steps.Rows[0][6].ToString());
                        attemptstep_id = db.ExecuteScalarWithTransaction("mdl_question_attempt_steps_Them");
                        ds_mdl_question_attempt_step_data = mdl_question_attempt_step_data_DS(ds_mdl_question_attempt_steps.Rows[0][0].ToString());//_order
                        db.CreateNewSqlCommand();
                        db.AddParameter("@attemptstepid", attemptstep_id.ToString());
                        db.AddParameter("@name", ds_mdl_question_attempt_step_data.Rows[0][2].ToString());
                        db.AddParameter("@value", ds_mdl_question_attempt_step_data.Rows[0][3].ToString());
                        db.ExecuteNonQueryWithTransaction("mdl_question_attempt_step_data_Them");
                    }
                }
                db.CommitTransaction();
                return(true);
            }
            catch
            {
                db.RollbackTransaction();
                return(false);
            }
        }