我觉得用记录加数组来做比较好
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]
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]
解决方案 »
- select 中的引号用法
- 这是一个什么样的过程?
- ACProtect注册版和未注册版有何不同?安全能力如何?那儿有注册版呢?
- 关于文件读取的问题.
- 如何让WIN2000 休眠???
- oracle数据库升级(7->8),出现的问题
- 我有一个问题想问问大家!!!有分送哟。
- 在这里提问有限制吗?怎么老是失败? 此单提交后我再打不开,能否新建单子答复,多谢!
- 怎么在右键菜单里加上象winzip一样的项?
- 请问建立MDI窗体后要怎样它的子窗体打开,而且能后关闭,而且只能显示一个相同的子窗体
- 哪位知道,为什么会出现:“Control '' has no parent window”的错误提示?
- 关于输入法,请各位帮帮忙
N=最大课程数
录入程序变成几个阶段
1:班级名册导入和初试化,按sno,sname,多少学生就抄写多少
2:构造column和班级课程的对应数组,把grid的title.caption用课程名字替换
3:grid录入
4:grid提交根据sno--cn写入对应的table
我以前在clipper/vfp上基本是这么做的,这样程序相当于一个数据录入/显示引擎回产生无数变化,也是一劳永逸的[email protected]
所以一定比自己写一个控件要好,尽管你可以用stringgrid等实现。
另外在网络多用户环境中,一个grid固定名字但不允许写用户必须复制临时文件进行操作名字的命名自然有办法。这种方法非常值得实现。
就算生成这种视图,又怎么可能同时插入两个表的记录(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])
(因为不了解你的水平,所以说了很多费话,希望对你有所
帮助,再一次对你半夜三点不睡觉的态度表示敬仰!!)