请大家给我提供思路,谢谢(100分)

  • 主题发起人 主题发起人 浪青
  • 开始时间 开始时间

浪青

Unregistered / Unconfirmed
GUEST, unregistred user!
实在抱歉,我没有表述好我的那个问题,请看我问题的朋友原谅!
是这样的,一个统计员他每天拿着一大堆的记录表,将每一张记录
表的记录作统计,将统计结果记录在一张日报表上。如下所示:
******************
记录表:(这是他的原表,不是我在数据库中的那张表)
JLtable1 a1(米) a1(处) b1(米) b2(处) 姓名 编号 材料 规格
0.4 3 wan 001 aq 8x
0.3 2 2.3 4 li 007 be 9x
2.5 5 ma 002 aq 8x
0.8 4 2.1 2 liu 006 be 9x
JLtable2 a1(米) a1(处) b1(米) b2(处) 姓名 编号 材料 规格
2.4 1 li 007 be 9x
0.3 4 wan 001 sw 6x
0.9 3 2.3 4 ma 002 aq 8x
..........

日统计表:(他是一种规格*一种材料为一张表)
比如在:(aq*8x)中//'aq*8x'是要手添的。
TGtable 编号 姓名 a1(米) a1(处) b1(米) b2(处) 累计(米) 累计(处)
001 wan 0.4 3 0.4 3
002 ma 0.9 3 2.3+2.5 5+4 5.7 12
003
...
在(be*9x)中
TGtable 编号 姓名 a1(米) a1(处) b1(米) b2(处) 累计(米) 累计(处)
001
002
...
006 liu 0.8 4 2.1 2 2.9 6
007 li 0.3 2 2.3+2.4 4+1 5 7
...
*******************
注:'****..'之间的表是按原始的表表述的,不是我的数据库的表。

首先,在a1,a2,b1,b2,累计(米),累计(处)给垒加一次我以实现,但可以看到我的到的
都是最后统计结果,它不能够查询到中间的我输入是的某条记录,除非去查原始记录
表,那么我想这个系统就不完整拉。
其次,我知道对每(材料*规格)表要采用动态的建立Table的方法,可以我不知道在这里
的具体实现是怎样的,就是我如何实现不同的材料和规格的记录添加到对应的(材料*规格)
表里,(是把(材料,规格)作为关键字吗?)我实在不太清楚,请大家来帮我好吗?
谢谢大家!
浪青
 
我先问几个问题
1。请先描述一下,这个统计员,每天的具体工作是什么,他记录这些数据是干什么用的?
2。你上一贴的管号是不是就是本贴的编号?
3。你先解释补焊、烧穿、米、处,在你的应用中究竟有什么含义?

然后,我再说一点我的理解。
你首先应该有如下的表:
1。统计人员表
2。规格表
3。原始工作记录表
4。如果没有特殊需要,统计可以是临时表,但并不是每个规格都要有一个表,你将所有规格
的信息放在一个表中处理,用规格编号区别。

还是建议你先把问题描述清楚,如果你描述不出来,那说明你对这个问题还没能完全把握,
至少是没有很条理的把握。
 
chinaplate您好,怪我没将问题表述明白,让大家相帮我却不能明白我的问题,谢谢大家,
谢谢您看我的问题:
以下是争对您的几个问题的回答:
1。这个统计员每天就是一上班便领一些钢管补焊记录表(钢管补焊记录表我以表示出来),然后
到办公室一张张的将补焊记录里的补焊工的记录统计出来,补焊工分三种,我只列拉一种出来
我想只要知道一种,其它的同理罢拉。他将这些钢管补焊记录表里的登记的某一补焊工的所有
焊管子米数和焊管子的处数累计出来即可,(就是把某补焊工的焊的米数都加起来),但是有一点
材料和规格不一样的管子,即使是同一个补焊工焊的不能记载到同一张统计表里,他的统计表是
一种(规格和材料)是一张表,但表的结构是一样的。他是想减轻工作量,想直接将所有数据输入
电脑后,既可以得到累计结果,让他直接抄到统计表里或打印出来,有可以查询某一补焊工的某一些
记录。
2。我上一帖的编号是补焊工的编号,每一个补焊工都有编号的,而管号是每一跟钢管的编号,不是
一样的。
3。补焊是指补焊工焊钢管的米数(实际不止这一项,有很多),处数是指补焊工焊的那根钢管的焊拉几处。
4。临时表我建拉一个你看一下,但是我不能用dbgrid或table来用它,我不知道如何写代码。临时表建后
如何插入数据。我以前没建过的。您可以给我讲一下有关建立临时表的知识吗?
procedure TForm1.Button1Click(Sender: TObject);
begin
createtable('c:/','tjbiao1',ttdefault);//在c:/下有一个tjbiao1.db,我不知道如何使用它,不会笑我吧
end;
//如何用数据库控件来显示它的内容呢?
procedure TForm1.createtable(dbname, tblname: string; tbltype: ttabletype);
begin
tbl:=ttable.Create(self);
with tbl do
begin
active:=false;
databasename:=dbname;
tablename:=tblname;
tabletype:=tbltype;
with fielddefs do
begin
clear;
add('worknum',ftstring,10,true);
add('workname',ftstring,10,true);
add('ac',ftstring,3,false);
add('am',ftstring,3,false);
add('ljm',ftstring,3,true);
add('ljc',ftstring,3,true);
end;
CreateTable;
end;
end;
我对您的看法的一些解释:
1。统计员只有一个人。
2。我现在作的既可以统计,也可以查询,但是在统计是我是这么写的;
假如:table1里以有这条记录
补焊工姓名 补焊工编号 补焊(米) 补焊(处)...累计(米) 累计(处)规格 材料

zhang 001 0.1 3 .... 0.1+... 3+... a b
我这时再插入一条A(zhang,001,0.4,5...c,d);
这时我是这么作的,判断001是否存在,如有则将0.4与0.1相加,3与5相加..
既用A这条记录的先加,在覆盖掉,这样统计表的得到的始终是统计结果,但是‘规格,材料’
同时也被覆盖掉拉,这样不行,我现在在想用
表一(补焊工姓名,补焊工编号,补焊(米),补焊(处)...累计(米),累计(处)管号)
表二(管号 规格 材料 )
看行不行,还有如果我用这种方法的话,我先不用sql,而用一般代码将两个表关联,如何写。
我是不是很差,谢谢大家!
如果大家愿意可用QQ行吗?
 
我的一点看法:

现在重要的是你的数据库的设计问题。
1.焊工明细表
Workers
(WorkerId char(10), 焊工编号
WorkerName char(20), 焊工姓名
WorkerType char(5), 焊工类型
....)
2.钢管规格表(可能还要扩充另一个表)
PipeTypes
(PipeTypeId char(10), 钢管规格编号
PipeTypeName char(10), 钢管规格
PipeStuff char(10) 材料
)
3.焊工工作记录表
Works
(WorkDate DateTime(8), 记录时间
WorkerId char(10), 焊工编号
PipeTypeId char(10), 钢管类型编号
WorkMeter numeric(8,2), 焊接米数
WorkPoint integer, 焊接点数
)

有了这三个表,如果用户没有特殊要求,不需要在临时建立一个保存统计信息的表
就可以按用户的要求,查询,统计,某一个焊工在每天(或一段时间)的工作量,设置是
某一个规格的钢管的焊工焊接的总米数和总焊点数。

select a.WorkerId,b.PipeTypeId,sum(c.WorkMetesr),sum(c.WorkPonts)
from works c left join pipes b on c.PipeTypeId=b.PipeTypeId
left join workers a on c.WorkerId=a.WorkerId
where a.workerDate='2001-11-11'
group by a.workerId,b.pipeTypeId
order by a.workerId,b.pipeTypeId

你稍加修改就可以得到用户要求的

补焊工姓名 补焊工编号 补焊(米) 补焊(处)...累计(米) 累计(处)规格 材料

zhang 001 0.1 3 .... 0.1+... 3+... a b



------------------------
另外,
你用什么数据库?
有程序自动建立一个表的方式是
Create table Workers
(WorkerId char(10), WorkerName char(20), WorkerType char(5))

删除这个表
Drop table workers


procedure TForm1.createtable(dbname, tblname: string; tbltype: ttabletype);
var
strSql:string;
qryTmp:TQuery
begin
strSql='Create table Workers (WorkerId char(10), WorkerName char(20), WorkerType char(5))';
qryTmp:=ttable.Create(self);
with qryTmp do
begin
active:=false;
databasename:=dbname;
qryTmp.sql.clear;
qryTmp.sql.add(strSql);
qryTmp.execSql;
end;
end;
^^^^未经调试,仅供参考。


 

Similar threads

回复
0
查看
1K
不得闲
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部