在Query中添加了一个计算字段,该字段的值由其他字段经过比较复杂的函数处理后得出,计算字段的代码写在了Query的OnCalcFields事件中,请问如何能对最后的查询结果以该计算字段排序?盼望高手的出现!!(我用的是Oracle数据库,数据库连接为ODAC,查询组件用的是OraQuery)
解决方案 »
- 散分:分享一种窗体融合的方法
- 哪有现成的计算器控件?只要有加减功能就行了,但要支持按钮随面板放大,因为要用在触摸屏上
- 急,急,急,我想把dbchart的柱图有原来的6 个 改为10个 该咋弄呀?
- 高分求救,怎样打印网格?
- delphi开发的MTS对象能否供VB,VC 使用?
- .net调不起delphi5写的dll。寻求高手解决,急
- batchmove的效率问题
- :请问,如何可以得到某个webbbrowser里面的浏览的文档的全部对象?
- 求救!带有dhtmledit控件的执行程序无法在ie4下运行,如何发布?
- Delphi5 编译生成的.dsm文件的疑问?
- 怎么把odbc或者bde管理器中的数据源名称添加到combobox中
- 问个数据库设计的问题
单你可以用sql语句生产查询结果集,这样计算字段也就作为真正的字段了
你试试,帮你顶一下!
from yourTable
group by code
order by count(*) desc
select code,count(*) as con
from yourTable
group by code
order by con
不知道能不能按我说的这种计算字段排序啊?
请求各位朋友一定帮我这个忙,想想有什么办法没有?不胜感激!
我的E_Mail: [email protected]
qq:21954421
有好办法的朋友可以和我联系或回帖!
不用把数据下載後計算、会提高効率...
query1里有lookup和计算字段.
另起一个query2.query2的sql为: insert into table values(:a1, :a2, ...:aN)程序中: Query2.ParamByName('a1').AsString := Query1.FieldByName('a1').AsString;Query2.ParamByName('a2').AsString := Query1.FieldByName('a2').AsString;......Query2.ParamByName('aN').AsString := Query1.FieldByName('aN').AsString;Query2.ExecSQL
大家有用过ODAC的么?其中有个TVirtualTable,但我不会用,它好像是可以建立一张虚拟表在内存中,请知道的朋友帮我顶一下
再丛临时表中读取时进行排序
完全可以用数据集排序完再放到GRID里面啊..呵呵..
Start: Cardinal; //测试时间
procedure TForm1.Query1CalcFields(DataSet: TDataSet);
begin
query1.FieldByName('ff').AsInteger:=
query1.fieldbyname('orderid').AsInteger-query1.fieldbyname('employeeid').AsInteger*10;
end;procedure TForm1.Button2Click(Sender: TObject);
begin query1.Close;
query1.Open;
query1.First;
progressbar1.Max:=query1.RecordCount;
Start := GetTickCount;
query2.SQL.Clear;
query2.SQL.Add('truncate table table1');
query2.ExecSQL;
query2.SQL.Clear;
query2.SQL.Add('insert into table1(employeeid,orderdate,ff) values(:p1,:p2,:p3)');
while not query1.Eof do
begin
query2.ParamByName('p1').AsString:=query1.fieldbyname('employeeid').AsString;
query2.ParamByName('p2').AsString:=query1.fieldbyname('orderdate').AsString;
query2.ParamByName('p3').AsString:=query1.fieldbyname('ff').AsString;
query2.ExecSQL;
progressbar1.StepBy(1); //---排序进度指示
query1.Next;
end;
query3.Close;
query3.SQL.Clear;
query3.SQL.Add('select * from table1 order by ff');
query3.Open;
//显示消耗时间
Label1.Caption := Format('Last operation duration: %d ms', [GetTickCount - Start]);
end;end.
sqlserver自带northwind.order 830条纪录用了近2秒(1892ms),如果有上w纪录你的客户是无法忍受的,但是又必须把纪录都走一遍
那就是除了建临时表以外就没其他的办法了么?你上面给我留的那段代码是SQL Server的吧,可是我用的数据库是Oracle,不知道怎么改好?我没用过Oracle的临时表啊
请问上句中的冒号是什么意思?
谢谢!
你新生成的字段是在ADOQUERY里面的吧..
只要这一句..
ADOQUERY1.SORT就可以了..这么麻烦做什么..哈..