流程是这样的,根据原始表和配置表,新生成一个任务表。
中间跨数据库,所以操作不是很方便。
不过学到了一些SQL语句,总忘记,现在总结一下备份。
第①部分
第1条:SELECT COUNT(1) AS Expr1 FROM (SELECT kc_dm, COUNT(pj_dyid) AS d FROM b_kc_para GROUP BY kc_dm) a
实现效果:在b_kc_para表中先按kc_dm分组统计出pj_dyID的个数 标识 d,然后统计出d的行的个数标识为Expr1,这样就可以用fieldbyname将Expr1赋值给其他变量了。注意,d不是表中的字段,是一个临时标识。
第2条:SELECT COUNT(*) AS bmn FROM (SELECT DISTINCT bp_baomi FROM kaochang) DERIVEDTBL
实现效果:在kaochang表里统计出bp_baomi的个数,同时不计重复,标识为 bmn 。
以上两条是比较典型的,同时我还学会了动态分配动态数组的长度。
第②部分
SetLength(数组,Length(数组)+增量(比如+1));
例如:SetLength(BianLiang,Length(BianLiang)+2);
效果,可以在发现数组定义长度不够用的时候,在不删掉前面的数据下扩充数组的长度。
第③部分
ADO控件,ADOQuery读取数据库字段中的数值,
例如:
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT COUNT(1) AS Expr1 FROM (SELECT kc_dm, COUNT(pj_dyid) AS d FROM b_kc_para GROUP BY kc_dm) a');
ADOQuery1.Open;
arrlenth:=ADOQuery1.fieldbyname('Expr1').AsInteger;
实现:把从数据库得到的字段Expr1的值以Integer型赋给变量arrlenth。
还有就是读取和写入数据库的 操作函数,ADOQuery.append .. ADOQuery.post?? 和? ADOQuery.First......ADOQuery.next;
例子:
for i:=1 to num? do
begin
ADOQuery3.Append; 变量1:=ADOQuery1.fieldbyname('kc_dm').AsString;
变量2:=ADOQuery2.fieldbyname('kc_dm').AsString;
ADOQuery3.FieldByName('bp_baomi').AsInteger:=变量1;
ADOQuery3.FieldByName('kc_dm').AsString:=变量2;
ADOQuery3.FieldByName('pj_dyID').AsInteger:='字段内容';
ADOQuery3.FieldByName('user1').AsString:='字段内容';
ADOQuery3.FieldByName('time1').AsString:='字段啊内容';
ADOQuery3.FieldByName('user2').AsString:='字段内容';
ADOQuery3.FieldByName('time2').AsString:='字段内容';
ADOQuery3.FieldByName('taktime').AsString:=DateTimeToStr(Date()) + FormatdateTime(' hh:mm', Now());//得到当前系统日期+时间
ADOQuery3.Post;
end;
ADOQuery1.Next;
ADOQuery2.Next;
end;
效果就是把ADOQuery1和ADOQuery2的相关内容传递给ADOQuery3,同时生成ADOQuery3字段中的其他内容。
很典型很简单的例子。