动态创建Access临时表ADO+Access(急!!!)(100分)

  • 主题发起人 主题发起人 yzy25
  • 开始时间 开始时间
Y

yzy25

Unregistered / Unconfirmed
GUEST, unregistred user!
我做的是一个大学生成绩管理系统。
由于学生和所选课程是多对多的关系,所以我建了三个表
Stu.mdb
学号 姓名 。。。。。

Course.mdb(课程表)
课号 课程名

Mark.mdb(成绩表)
成绩编号 学号 所选课号 成绩(分数)

可是给用户输入学生成绩的时候不能用这个Mark.mdb
所以我想作一个动态的表来方便用户的输入
学号 姓名 课程1 课程2 课程3。。。。。

这个表是用户看到的,请问我该如何创建这样一个表(ADO+Access)谢谢了
 
动态构造这个Sql语句
s:='create table test (学号 varchar(10),姓名 varchar(10),';
qryCourse.Open;
while not qryCourse.eof do
begin
s:=s+',kh'+inttostr(qryCourse.fieldbyname('课号').asstring)+' float';
qryCourse.next;
end;
s:=s+')';
运行这个Sql就可以了
 
用标志sql创建
 
怎么没人回答我啊!
 
使用ADOX
具体查看MSDN
 
上面的SQL你运行了吗?
 
你为什么要动态建表呢?如果动态建表,在多用户的情况下会有问题。
用你的表结构应该没问题,为什么不能用Mark.DB呢?用你的程序来控
制剩下的字段值和代码的对应。
 
可是我需要的是临时表,就是那种一关闭应用程序就自动释放的表!
 
我没用过Access,SQL SERVER的话是在TABLE前面加一个#,就是创建临时表。
 
你满可以在三个表的基础上建立一个视图,供用户输入数据,
然后把这些数据分别存在不同的表中
 
在不同一个FORM上调用同一个数据集啊
 
你满可以在三个表的基础上建立一个视图,供用户输入数据,
Delphi中可以提供视图的操作吗?
 
可以这样解决:

var s:string;

adoquery1.close;
adoquery1.sql.text:='select * from Course order by 课号';
adoquery1.open;
s:='';
while not adoquery1.eof do
begin
s:=s+trim(adoquery.fields[1].asstring)+' numeric(5,1)'+',';
adoquery1.next;
end;
if s='' then exit;//没有课程设置
s:=copy(s,1,length(s)-1);
adoquery1.close;
adoquery1.sql.text:='create table tmp_tbl(学号 varchar(10),姓名 varchar(12),'+s+')';
adoquery1.execsql;
adoquery1.close;
adoquery1.sql.text:='select * from tmp_tbl';
adoquery1.open;
 
首先Access没有临时表
其次,你所说的 “视图” 功能在Delphi中可以用TUpdateSQL实现
不过是BDE的,而且使用不方便

其实,你的问题用手工控制反而方便,用户录入后手动写入数据库
 
荷塘新月:可是,这样一来,当我对其他班级操作时,这个表就得再创建一遍!
是不是换个班级操作时就删除这个临时表。该怎么删除呢?用Drop吗?
另外怎么动态的删除字段呢?(由于班级不一样,课也不一样所以我需要运
行时对字段做更改!) 谢谢各位!
 
能用一条SQl语句从三个表上建立所需的视图吗?
关注
 
Oracle 8i及以上版本中,可以使用以下语句
SQL> alter table 表1 drop column 列1;
 
我觉得你可以
把学号,姓名放在开始,各课放下面,然后后面输成绩,
最后保存时,一旦为0不输入insert,就可以了
 
还要一张班级表阿
另外,我所说的手工操作是指不创建你所说得表

只是创建用户录入的界面,插入数据库时经过编程插入到那三张表中
 
TO:青萍,ugvanxk

可是我得给用户一个直观的界面来显示
学号 姓名 课程1 课程2 。。。。。。。。

如果这样的话还是得用DbGrid也就是还得再创建一个表啊!
 
后退
顶部