例如
table1 车间
table2 考核项目
table3 车间编号
考核项目编号
考核得分
最好的编辑界面类似
车间1 车间2 车间3
项目1 20 30 40
项目2
项目3
。
。
。
。
怎么实现编辑界面???
table1 车间
table2 考核项目
table3 车间编号
考核项目编号
考核得分
最好的编辑界面类似
车间1 车间2 车间3
项目1 20 30 40
项目2
项目3
。
。
。
。
怎么实现编辑界面???
解决方案 »
- 如何将colorbox1中的各条颜色添加到mainmenu1中并能够被执行?
- 怎么做一个插件?
- 请教:用 FastReport 打印 MS-SQL 的 Image 字段.
- 怎样用ADO把一个dbf文件里的内容导入到另一个dbf文件里?
- nvarchar 与 delphi
- 高分求:怎么能让MP3文件按指定的长度播放?可以同步显示歌词
- QuickReport预览保存得问题?
- 字符串的判断问题!!!!!!!!!!!!!!!!!!!!!!!!????????????????
- 怎么在DELPHI中使用程序调用WINZIP解压ZIP文件!写的详细一点啊!
- 如何获取服务器的时间和间隔?
- 快来了 超简单 晕:)在线等待 5点 结帐
- dbgrid的触发事件问题
begin
Close;
SQL.Clear;
SQL.Add('select distinct 车间 from table1');
SQL.open;
end;
With ADOQuery2 do
begin
close;
SQL.Clear;
SQL.ADD('select distinct 考核项目 );
While Not ADOQUery1.EOF do
begin
SQL.ADd(',(select sum(考核得分) from table3 where 考核项目编号=table2.考核项目 ');
SQL.ADD(format('and 车间编号=''%s'')as %s',[ADOQuery1.Fields[0].Asstring,ADOQuery1.Fields[0].Asstring]));
ADOQuery1.Next;
end;
SQL.SaveToFile('1.sql');//调试用
Open;
end;
With ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('select distinct 车间 from table1');
SQL.open;
end;
With ADOQuery2 do
begin
close;
SQL.Clear;
SQL.ADD('select distinct 考核项目 );
While Not ADOQUery1.EOF do
begin
SQL.ADd(',(select sum(考核得分) from table3 where 考核项目编号=table2.考核项目 ');
SQL.ADD(format('and 车间编号=''%s'')as %s',[ADOQuery1.Fields[0].Asstring,ADOQuery1.Fields[0].Asstring]));
ADOQuery1.Next;
end;
SQL.add('from table2');
SQL.SaveToFile('1.sql');//调试用
Open;
end;
打印出这种效果也容易啊
[email protected]
[email protected]
//先谢谢了!!!
数据库为Access,表格名和表格的字段见下面:表source
--------------------------------------------------------------------
时间 车号 货物名称 货物净重 用户单位 ...
02-10-1 111 一级灰 2000 本厂
02-10-1 222 二级灰 3000 二厂
02-10-2 333 灰渣 4000 二厂
...
02-11-1 444 二级灰 66666 一厂
02-11-1 555 一级灰 44444 本厂
...
-------------------------------------------------------------------
表employee //此表用来修改本厂的司机
-------------------------------------------------------------------
车号 司机 单位 ...
555 张三 本厂
111 李四 本厂
...
-------------------------------------------------------------------
表users //此表用来修改外厂的车号
-------------------------------------------------------------------
车号 用户单位 ...
222 二厂
333 二厂
444 一厂
...
-------------------------------------------------------------------我要做这么样的一个月报表:
-------------------------------------------------------------------
数 量
用户单位 |------------------------------------------| 统计总数量 |
本 厂 | 自 装
-------------------------------------------------------------------
一厂 | 56000000 | 1000000000000 | 10056000000 |
-------------------------------------------------------------------
二厂 | 22200000 | 8000000000000 | 80022200000 |
-------------------------------------------------------------------
三厂 | 33300000 | 4000000000000 | 40033300000 |
-------------------------------------------------------------------
四厂 | 45400000 | 5000000000000 | 50045400000 |
-------------------------------------------------------------------
... | ... ... ...
-------------------------------------------------------------------
合计 | 234242424200000 | 56757575500000 |3453242342000|
-------------------------------------------------------------------//本厂指本厂司机所运送的货物量,自装为外厂自己装的货物量,统计总数量为两和。
一般来说写入临时表是比较好的方法,以前的一个问题,贴出来给你看一下!gg_spbm表:
> prod_no(商品编号,主键) old_type(原型号) new_type(新型号)
> 100008/2.5-05 100008/2.5 618/2.5
>kc_kc2表:
> prod_no whouse_no(库房编号) amt(数量)
>100008/2.5-05 库房1 300
>100008/2.5-05 库房2 20
>100008/2.5-05 库房9 20
>要求对以上两个表做联接,查询出如下结果:
> prod_no old_type new_type 库房1 库房2 库房9
>100008/2.5-05 100008/2.5 618/2.5 300 20 20
解决方法1,建临时表temp_table(prod_no,old_type,new_type,amt_1,amt_2,....,amt_9)
若还有其他库房则增加相应子段amt_x
2, 在临时表中为每种商品建立一条记录(注意先清空临时表)
即将gg_spbm拷贝到temp_table
3,为temp_table中每个amt_x子段设定相应值
update temp_table
set amt_x = -----此处amt_x为实际子段如amt_2
(select amt from kc_kc2
where temp_table.prod_no = kc_kc2.prod_no
and whouse_no = '库房x')---x为实际值如2
4,将3重复若干次 注意,次钟方法是没办法的办法,以后要注意将表设计好一点
以免遇上此类问题
table3 车间编号
考核项目编号
考核得分
? 而不是問如何得到table3的數據(sql用join,group by).
常規編輯是:
|考核项目编号|车间编号|考核得分| 项目1 车间1 20
项目1 车间2 30
. . .
. . .
项目2 车间1 22
项目2 车间2 32
. . .
. . .如果以"车间1 车间2 车间3 "作為DBGrid字段,
則要動態生成字段名表"考核得分,车间1,车间2,车间3 "
然後加到sql語句中,產生臨時表,再幫定到DBGrid.
然後預先填寫(Append): 项目1
项目2
项目3
项目4
.
.
----不確定數量的記錄.
注意:字段"考核得分"的值集合是:
{"项目1","项目2","项目3"...}
這讓,得到一個中國人習慣的表格,西方人不會習慣這讓填表:
-------------------------------------------------
|考核得分|车间1|车间2|车间3|车间4|车间5|车间6|...
| 项目 1 | 20 | 30 | | | | |
| 项目 2 | 22 | 32 | | | | |
| 项目 3 | | | | | | |
難點:動態SQL語句,自己想去...
用 {Table1-->ADOQuery1,Table2-->ADOQuery2]}-->Create TTable,Table3-->[ADOQuery3,(Read/Write)]-->[TTable]-->[TDBGrid] 结构。
编辑数据存回Table3时:
用[TDBGrid]-->[TTable]-->[ADOQuery3,(Read/Write)]-->Table3结构。
以[TTable]作内存临时表。
用TTable创建PARADOX表:
type
TForm1 = class(TForm)
Table1: TTable;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
ADOQuery2: TADOQuery;
ADOQuery3: TADOQuery;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;procedure TForm1.FormCreate(Sender: TObject);
var
aStrX:String;
begin
with talbe1 do
begin
DatabaseName = '.\';
TableName = ‘TempTableName’;
tabletype = ttparadox;
with fielddefs do
begin
add('考核得分'{字段名}, ftstring{字段类型,看帮助}, 25{长度}, 0); if AdoQuery1.RecordCount>0 then
begin
AdoQuery1.First;
while AdoQuery1.Not Eof do
begin
aStrX:=AdoQuery1.FieldByName('车间').AsString; add(aStrX{字段名}, ftstring{字段类型,看帮助}, 25{长度}, 0);
AdoQuery1.Next;
end;
end;
end;
indexdefs.add('考核得分'...{建立索引,看帮助})
CreateTable;
CachedUpdates:=True;{临时存于内存}end;
end;
//预置编辑数据:
procedure TForm1.FormShow(Sender: TObject);
begin
//将ADOQuery2内容写进Table1;
{To Do ....}
//将ADOQuery3(即Table3)内容写进Table1;
{To Do ....} //
DataSource1.DataSet:=Table1;
DBGrid1.DataSource:=DataSource1;
DBGrid1.Refresh;
end; 用完Table1后磁盘中实际上有‘TempTableName’表,程式结束(Form On Destroy)时执行:
procedure TForm1.FormDestroy(Sender: TObject);
begin
table1.CancelUpdates;
table1.DeleteTable;
end;如果用StringGrid做编辑界面,可用数组作为存贮缓冲,再由数组写数据到ADOQuery3,然后提交到数据表Table3,但要复印杂些。