我觉得用记录加数组来做比较好
TRecScore = Record
     sno :String;
   sname :String;
   cname :String;
   math  :FLoat;
  ... 
   
end; TRecScores = Array [1..255] of TRecScore; 先用Query 取得各个数据写入记录
回写到
用TStringGrid中显示你的要的
    sno  sname  课程1  课程2  课程3  课程4  课程5...
    0909  王华    98      87    45      54    56
    8343  黎明    76      67    98      69    67
    0987  张强    87      98    77      89    68 输入完以后用记录回写入数据库如果你还不明白给我Emial [email protected]

解决方案 »

  1.   

    建立一个临时table,sno  sname  c1,c2,c3,c4,c7,c8...cN
    N=最大课程数
    录入程序变成几个阶段
    1:班级名册导入和初试化,按sno,sname,多少学生就抄写多少
    2:构造column和班级课程的对应数组,把grid的title.caption用课程名字替换
    3:grid录入
    4:grid提交根据sno--cn写入对应的table
    我以前在clipper/vfp上基本是这么做的,这样程序相当于一个数据录入/显示引擎回产生无数变化,也是一劳永逸的[email protected]
      

  2.   

    当然临时table初始化的时候只对某个班进行录入显示,同时利用特别的grid控件可以任意排续打印,这样发挥grid的各种支持,使你的软件在一个班级的成绩表现上富有更多表现。
    所以一定比自己写一个控件要好,尽管你可以用stringgrid等实现。
    另外在网络多用户环境中,一个grid固定名字但不允许写用户必须复制临时文件进行操作名字的命名自然有办法。这种方法非常值得实现。
      

  3.   

    1、你的COURSE表只有两个字段,怎么可能生成你所要求的视图?
    就算生成这种视图,又怎么可能同时插入两个表的记录(SQLSEVER
    已经是最宽松的了,但也只能一次修改一个数据表的记录)
    你的代码库建的是对的,本来可使程序具有良好的扩展性,
    但是你的输入界面却限制了这种扩展,比方说我要加入一个
    COURSE代码库中尚不存在的课程,那你就要修改输入界面,
    还要再增加一个控件接收新增的课程成绩数据。
    2、DELPHI中的ADO却实可以同时更新你用SELECT语名选择出
    来的字段,也不受是否是同一数据表的限制,问题是你的
    COURSE表中的课程是记录而不是字段,怎么可能SELECT出你所
    要求的样式。
    3、你的程序最具扩展性的方法,是将分别对学生代码库和课程代码
    库分别做出输入界面,然后在成绩输入的界面中这样安排,放置一
    个TABLE控件到FORM上,连接到你的SCORE表,右键单击TABLE,加入
    SCORE表中的所有字段,然后再加入两个LOOKUP字段,分别引用到STUDENT
    和COURSE表中的相关字段,然后将这两个LOOKUP字段和SCORE字段拖放
    到FORM上,这样你就可以看到的是学生的姓名和课程名称而插入到
    SCORE表中的却是姓名代码和课程代码,这样的输入方式就是选择
    学生姓名,课程名称,输入成绩。这应该是最标准的方式不会引起数据
    的不一致性。如果你一定要用你的这种输入方式,
    还是用存储过程比较现实,在FORM上直接放置文本控件,将
    它们的值传递给后端数据库的存储过程所需的参数,不过在
    传递之前你必须对各个文本控件中的值作出合理性判断,
    (你的SNO和CNO在学生表和课程表中应该是自增长数据类型吧?
    那就先用一个存储过程先往STUDENT表中插入学生姓名,然后
    用一个变量赶快存储起STUDENT表中当前记录的SNO,因为学生
    可能重名,以后你按姓名从STUDENT表中找出的SNO可能并不是
    你刚才输入的学生的SNO,然后再用若干个变量存储按照课程名称从
    COURSE表中找出的各自的CNO,然后再用个循环语句,将SNO,CNO,SCORE
    作为参数传递给另处一个负责SCORE表插入的存储过程,这个循环的
    执行次数取决于你的界面中的课程数量)
    这种事情就不要让后端数据库去处理了,最重要的是你一定要
    把这两个存储进程放在一个事务中,以保证数据库中的数据
    的合理性。(此外DELPHI中的UPDATESQL控件也可完成你的
    要求,道理和存储过程差不多,可参考李维写的DELPHI5.X
    分布工多层应用系统篇,其中有详细的解释)
    如果你要求浏览的介面也如此的话,则可对这三个表作一个
    视图,然后DELPHI中的DECISION cube 控件就派上了大用场
    如果你不了解的话EMAIL TO ME([email protected])
    (因为不了解你的水平,所以说了很多费话,希望对你有所
    帮助,再一次对你半夜三点不睡觉的态度表示敬仰!!)