QUERY内容处理问题(在线等待) (50分)

  • 主题发起人 主题发起人 redwood
  • 开始时间 开始时间
R

redwood

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个QUERY-A,有数据X条,现在想将QUERY-A最后的5条记录复制到QUERY-B。应该怎么做?
QUERY-A中没有有效的顺序字段
 
A.Last
for I := 1 to 5 do
begin
if not A.Bof then
begin
B.Insert;
.....//对B的字段赋值
B.Post;
A.Prior;
end
end;
 
A.Last加上if not A.Bof then
…………
无语……

你的方法我明白了
 
能插入数据到 query b 吗?
你的 query b 是不是已经有数据?
为什么不在 query A 中只找满足条件的5 条记录呢?
 
就是得到的满足条件的记录不止5条,所以才……
所说的满足条件是大范围的条件,且不能更改范围……
query b不一定有数据,query b的数据不能被插入到数据库中,是完全临时的

而且数据不能被插入query b,说是数据库关闭
 
用 top 5
及 order by ...
 
你是说用排序再SELECT一次?
这样会影响速度呀

能放出代码吗?
 
晕……
top后边那个数字怎么用变量代替?
程序死活都把他认为是数据字段

代码:
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的值
 
a.last后prior 5次
 
prior 5次有什么用呢?
现在是需要把最后5条数据从一个QUERY传到另一个QUERY,inster的话总是显示database close
 
query要能编辑,必须先令 RequestLive:=true;
 
绝对是打开了的!
连update都打开了
 
设么数据库,如果是Oracle 可以使用 ROWID 排序
 
增加一个数据源datasource1并设置它的dataset属性为query-a,然后设置query-b的datasource属性
为datasource1,然后:

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条只是举的一个例子
 
n是变量:
使用SQL参数
(select top :N 关键字段 from 表名 )');
ParamByName('N').asInteger:=5;

另外: RequestLive:=true 不是打开数据库,是使query能编辑.
 
->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 是添加数量
 
后退
顶部