代码:
DM1.Query_Outlist_C.Close;
DM1.Query_Outlist_C.SQL.Clear;
DM1.Query_Outlist_C.SQL.Add('Select * top p-id from "../_QSQ1.DB" order by 序号 desc');
DM1.Query_Outlist_C.ParamByName('p-id').AsInteger:=print_number;
DM1.Query_Outlist_C.Open;
*在前不认p-id
*在后,认为p-id是字段…………
改成
Select top '+inttostr(print_number)+' * from "../_QSQ1.DB" order by 序号 desc
还是不认,显示错误在print_number的值
with query-b do begin
close;
sql.clear;
sql.add('select top 5 * from 表名 where 关键字段 not in
(select top n 关键字段 from 表名 )'); //n值要在前面计算出来,它等于query-a中的记录数-1
//另外在top关键字后的n不允许是变量,所以这儿要处理一下,我只是写了一个思路
open;
end;
这样在query-b中就只有你要的那五条记录了,如果不想要用户编辑要设置数据集的只读属性。
->n不允许是变量…………
->完蛋了
->因为那个值是不确定的,5条只是举的一个例子
你可以在程序中处理,动态生成上面的sql语句。
var
an:integer;
i:integer;
bn:integer;
ln:integer;
str:string;
begin
an:=query-a.recordcount;//就是取得query-a的记录数量
bn:=输入你想要取得的记录数量;
ln:=输入开始取记录的位置;
str:= 'select top '+
inttostr(bn) +
' * from 表名 where 关键字段 not in '+
'(select top '+
inttostr(an-ln)+
' 关键字段 from 表名 )';
with query-b do begin
close;
sql.clear;
sql.add(str);
open;
end;
end;
SQL短期内不能解决,换个方法
DM1.Query_Outlist_A.Last;
bn:=DM1.Query_Outlist_A.FieldCount;
for an:=1 to numbers do
begin
if not DM1.Query_Outlist_A.Bof then
begin
DM1.Query_Outlist_C.Insert;
for ln:=1 to bn do DM1.Query_Outlist_C.Params[ln]:=DM1.Query_Outlist_A.Params[ln];
DM1.Query_Outlist_C.Post;
DM1.Query_Outlist_A.Prior;
end;
却显示DM1.Query_Outlist_C关闭不能操作,但是requestlive cachedupdates都是TRUE
其中numbers 是添加数量