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;
end;
end;
//预置编辑数据:
procedure TForm1.FormShow(Sender: TObject);
begin
//将ADOQuery2内容写进Table1;
{To Do ....}
//将ADOQuery3(即Table3)内容写进Table1;
{To Do ....}
用完Table1后磁盘中实际上有‘TempTableName’表,程式结束(Form On Destroy)时执行:
procedure TForm1.FormDestroy(Sender: TObject);
begin
table1.CancelUpdates;
table1.DeleteTable;
end;
解决方法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重复若干次
对不起,上面的代码少了点东西,用这个吧
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;
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.SaveToFile('1.sql');//调试用
Open;
end;