二维表怎么输入(50分)

  • 主题发起人 主题发起人 xiaocai
  • 开始时间 开始时间
X

xiaocai

Unregistered / Unconfirmed
GUEST, unregistred user!
现有一个二维表,要求新建表格30X20,怎样才能输入后将数据存入数据库内呢?(数据库
有20个FIELD),能给示意性的源程序吗?是用DBGRID还是用STRINGGRID?还有,表格的
第一行和第一列要添入名称,就是中国式的表格,怎么才能让它们和别的行列(宽度)
不一样呢?
 
没看太明白,
不过用普通方法不行就用数组吧。
 
抱歉没讲明白,就是说要求显示一张空白的表(20X30)这样就有600个要添入的项,
然后用户将空添满后,保存,这一张表对用户来说是一个记录,怎么办?我真的好菜,问题想不
明白,连提问都问的不明白,求大虾相助!用什么呢?最好不用控件,实在不行的话,控件也要
有源代码的.
 
可以在记录加一列做为标识,一次加30条记录,
必须全部填写完成后才可存盘

再一个简单方法,
直接600列一条记录就得了
 
不幸的是我建库用的是ACCESS,只支持到255个字段
还有,我的意思是,比如说,是每写一行(也就是一条记录)就存盘,
还是写了若干行再存盘?响应什么事件?怎么用?原代码?求救!!
 
相类是的问题你好像刚问过吧,把数组改成30*20,我还是认识的:)
你用一般的方法,很难控制一次输入30条纪录,这样吧,
你先按上次建表的方式建立表格,字段中除了你数组的20个内容外,再加两个
一个是 纪录号,另一个是当前排名,然后以这两个字段 建立Key ,现在,你的
表格字段是这样的
Cur_recNo ,Cur_Index , Val1,Val2 ......Val20
建立key的目的是避免你的数据重复,这样你在这个库里的内容可以这样
1 1 val1,val2 ...........val20 {第一组纪录的第一条}
1 2 val1,val2 ...........val20 {第一组的第二条}
。。。。。。
1 30 val1,val2,...........val20 {第一组的第30条}
2 1 val1,val2 ...........val20 {第二组的第一条}
。。。。。
不知道这样看懂了没有,,,,
然后,你再用这个结构建另一张表,比如叫Tempdb。
你在delphi中可以先在这表格里输入30条纪录(这30条的纪录的第一个字段,也就是)
我们上面说的Cur_Recno必须一样,然后你在程序里加判断,只有当这个
tempdb中30条纪录都存在,而且另一个字段的值是1...30排列的,才正式加入到
最后的库当中。加完后就可以清除这表里的纪录了。同样,取出时,你只需把库中的
第一个字段的值等于你要的纪录号的30条纪录取出,放在tempdb中,就行了
这样,对tempdb的操作可以通过dbgrid来实现,外人感觉就象一条纪录了

不知道懂了没有
.

 
用STRINGGRID吧,编程方便一点,第一行的高度可以和其他的不一样
 
to lvxq:被你看出来了,呵呵!:)换个方式问是因为这个问题问起来怪不好意思的
我翻遍了BBS关于对DBGRID的操纵的问题,发现真正解决的好方法很少,所以才又来问
对与你的帮助真的很感谢,你说的我都明白了,我还想再问一下,如果我要用STRINGGRID
对我的程序进行操纵,该怎样做呢?(不会觉得问的太笼统吧,:》)我的要求是第一行
和第一列和别的同志不一样,而且他们上面还要有文字:P
 
有一点很好意思,我一直没用过里面的StringGrid控件,不过我刚才看了一下
它的一些控制是灵活一点,而且完全能满足你的那个要求,就是第一行和列
不同,可以有文字,我想如果你看一下它的帮助,你会得知更多信息。
而且就你为了一次保存30条纪录这一点来说它的实现也不困难。比如你可以设置它的
ColCoun 和 RowCount 为21 和 31,这样第一行和第一列就可以显示你专门的
内容,其余是允许输入的,最后在需要保存时一次存进30条纪录,嗯,蛮好的
就用它吧
赋值:
StringGrid1->Cells[J] = InputValue; {String 类型}
我想,为了保证一次存进30条纪录,我想还有个需要注意的地方
RollbackTrans ,
 
OK,最后一个问题
对于tempdb的使用是用batchmove吗?如果是,简单说一下好吗?
 
不是,如果你使用了StringGrid,那就可以不用tempdb了,
添加纪录的办法我想这样比较合理
for i:=1 to 31 do
for j:=1 to 21 do
if StringGrid1.Cells[j] ??? then {这里判断每一栏}
..........
如果不符合条件,比如没满足30条,提示输入
exit; {上面数据步对,返回}
with yourtable do
begin
BeginTrans
try
for i =:1 to 31 do
begin
edit
把当前行的每列取出,加到下面的地方
AppendRecord(这里是刚取出的内容)
end;
close;
except
Rollbacktrans
end;
end;
....

以上是大致的方法,你可以参考,
 
接受答案了,谢谢LVXQ的大力协助
如果不犯规的话,我真想给你转分,谢谢!49分献上,请笑纳!
能告诉我你的E-Mail吗?
 
多人接受答案了。
 
后退
顶部