具体流程如下:
数据库tk包含了一个tk_nr的binary字段,这个字段保存的是试题内容,我现在想把用户组卷选择的题目拼成另外一个字段保存在库中,也就是八tk_nr中选中的记录合并成一条记录存到数据库中。
各位大虾有谁解决过这种问题不吝赐教阿!

解决方案 »

  1.   

    对了,在tk_nr中保存的不仅仅是文字,还有图片!这些记录都是从word中导入到库里面去的,也就是说这些binary字段保存的是word文件的一部分内容!
      

  2.   

    建议将每道试题分别存储,试卷提取题目时使用试题主键关联,这样比较符合关系型数据存储原则,------------
    我现在想把用户组卷选择的题目拼成另外一个字段保存在库中,也就是八tk_nr中选中的记录合并成一条记录存到数据库中
    --------------------
    最好还是不要提取字段的部分信息------------------------
    如果题库存在多个word文件中,相应的数据源改造是免不了的,可以将word文档升级到2003,使用office的api提取每道试题不知道理解的对不对
      

  3.   

    to yan63()
    我的试题是分别存储的,库表如下:
    create table TK_QUESTIONS(
    Q_ID VARCHAR2(17) PRIMARY KEY, --试题ID为级别ID12+5位流水号
    questions varchar2(2000), --题干内容
    answers varchar2(2000), --答案内容
    Photo_path varchar2(100), --图片保存路径及文件名
    Media_path varchar2(100), --多媒体保存路径及文件名
    Q_Type varchar2(20),--题型
    Q_dif  varchar2(20),--难度
    Q_status  varchar2(2),   --状态标志:1-可用,0-禁用   
    Q_Per number(2,1), --分值
    Q_Important varchar2(2), --重要程度
    Q_Action varchar2(2), --行为领域
    MODIFY_TIME date, --修改时间
    IN_TIME date, --导入时间
    sel_count number(6) --被抽中次数
    );
    我的想法是用户在组卷的时候实际操作的是q_id,在组卷成功以后保存这些q_ID,然后再根据q_id得到题目内容以及答案,将这些题目就保存到一个word文件中,再在网页上调用进行考试。
    下面是试卷表设计
    /*试卷主表*/
    DROP TABLE TK_PAPERS;
    create table TK_PAPERS(
    P_ID VARCHAR2(3) primary key, --试卷ID
    P_Name varchar2(200),  --试卷名称
    P_auth varchar2(20),  --制作人
    P_pub  varchar2(4),  --是否公开(公开,保密)
    p_dept varchar2(10), --制作部门
    p_test varchar2(2), --已经使用(是,否)
    p_time number(2,1), --测验时长(单位:分钟)
    p_auth_time date --制作时间
    p_type varchar2(6) --试卷类型(练习卷,测验卷)
    );/*试卷主表*/
    DROP TABLE TK_PAPERS;
    create table TK_PAPERS(
    p_type_id number(3) primary key, 
    p_type varchar2(6) --试卷类型(练习卷,测验卷));/*试卷从表*/
    DROP TABLE TK_PAPERS1;
    create table TK_PAPERS1(
    P_ID VARCHAR2(3) , --试卷ID
    Q_seq number(3), --题目顺序
    Q_ID VARCHAR2(12) , --试题ID,这里保留试题ID是为筛选试题作准备,只要在一套试卷中选中了的题目若不想在另一套试题使用,就可以判断这个字段
    questions varchar2(2000), --题干内容
    answers varchar2(2000), --答案内容
    );
    我现在碰到的问题有以下几点:
    1.我不知道如何将提取后的q_id对应的题干组合起来保存到一个word文件中。一道binary的试题我可以成功保存,但是2道以上的我就不知道怎么做了。
    2.word文件形式的试卷如何转变成网页形式让用户做题?
    以下是我将一道试题导出来的code:private void Button1_Click(object sender, System.EventArgs e)
    {
    string sql="select st_nr from stid1 where st_id=1";
    SqlConnection connection = new SqlConnection("Server=.;uid=sa;pwd=sa;Database=tksqldb_train");
    SqlCommand command = new SqlCommand(sql, connection);
    connection.Open();
    SqlDataReader dr = command.ExecuteReader();
    if(dr.Read())
    {
    Response.Clear();
    Response.AddHeader("Content-Type","application/msword");
    Response.BinaryWrite((byte[])dr["st_nr"]);
    }
    dr.Close();
    connection.Close();
    }
      

  4.   

    那我如果不把试卷放到数据库里面应该就没有问题了吧。
    现在我最着急的是如何将选出来的试题组合成一个word文件,希望各位大虾能给code我参考一下,非常感谢!
      

  5.   

    to xlshen_lxz() 
    能详细介绍一下MCMS在这里怎么用么?我对这个不太熟悉,谢谢!
      

  6.   

    将试卷在web上以word形式提供需要使用vbscript做一个activex控件调用office的api让用户下载到本地ie运行,然后才能将用户编辑的word保存到服务器,比较麻烦,而且对word文件评分又当如何解决呢,
    还是建议搂住用html将试题在web上输出,比较简单,答案也可以保存在数据库
    没有细看楼主的设计,先回答第二个问题
      

  7.   

    to yan63() 
    我最初的想法是用html来在线考试,现在的问题是我对binary字段不熟悉,不知道怎么样才能将字段放置于.net的控件中,比如varchar2的我可以放置到textbox当中,可是binary字段中除了文本信息还含有图片信息,我就不知道怎么做了。
      

  8.   

    如果您的binary字段的信息是word导入的,那么html无法直接翻译,可以使用一个在线的试题编辑器将试题手动编辑成html代码,如果有大量的试题是word格式提供,可以使用office2003的api获得试题信息(这个我不熟)
      

  9.   

    有一点我觉得奇怪,有些考试系统存放试题的时候为什么会存成binary字段,他们是怎么组卷的呢?如果是c/s方式,这样效率影响还看不出来,但是如果换成了b/s平台,用word来做中间转换会不会非常影响执行效率呢?
      

  10.   

    word来做中间转换是否影响效率取决于您的存储方式,如果你word文档以binary存放以binary读取该是没有问题的,但是你的需求是拼接,且要web方式获取用户输入,我认为这不是很合适,首先开发的效率很低,你要懂vs脚本,activex,aspnet,word api等才能在web上实现cs的效果,早期版本的office不支持xml,可能需要将每道试题对应的字节分开存储,然后拼接,猜测而已,没有验证过。但是office2003的api可以支持xml获取文档内容,搂主若是真的有兴趣可以研究一下。
      

  11.   

    hehe,非常感谢yan63() ,我现在决定还是用vachar2来保存试题,把试题的图片保存在blob字段中,拼接就直接从数据库中取得试题,然后用这些值给模板页赋值来进行与用户的交互。