locate的一个小问题,很迫切,请高手指点!焦急等待中! (50分)

  • 主题发起人 主题发起人 视觉音乐
  • 开始时间 开始时间

视觉音乐

Unregistered / Unconfirmed
GUEST, unregistred user!
字段oldDate的为日期型'2002-8-9'、'2002-9-19'、'2002-6-12',每个月只有一条记录!
怎样用locate实现类似这样的功能?:
使用Locate('oldDate','2002-8',[loPartialKey])
定位到'2002-8-9'这一条记录?(每个月只可能有一条记录)
请问用locate能实现吗?
 
请大家帮帮忙,要用别的方法,工作量太大了。
我是改以前的程序,如果这样能实现就太好了!
分不够可以再加。
 
不明白你的意思,Locate('oldDate','2002-8',[loPartialKey])
这句已经可以定位到该记录啊
 
不写完整定位不到的啊,必须写上'2002-8-9'才可以,可是天是不固定的啊
:)
 
富翁都睡了吗? 唉,没人熬夜啊!
 
应该不太可能,
除非oldDate为char型字段;
 
是datetime类型啊
 
可以用Tquery嗎?我覺得Tquery比TTable要快一點.
 
是修改以前的东西,呵呵
 
笨办法:先用QUERY检查出指定月份的记录,再用完整的日期去定位;
为加快检索速度,可在在oldDate字段上建一个索引。
 
谢谢tanxh!
我首先想到也是这个方法啊,可是由于那一段程序极其庞大这样会很复杂的。
不过如果解决不了的话,也只有这样了。
 
首先,给要定位的字段设定好索引,然后,使用FindNearest方法进行定位。
with Table1 do
begin
IndexFieldNames:='SaleDate';
FindNearest([StrToDate(Edit1.Text+'-1')]);
//eg: Edit1.Text:='1993-4';
end;
 
谢谢各位!
creation-zy:如果这个月已经有一条记录了就定位到这条记录,如果没有就添加。
所以FindNearest是不行的。
好像只有用query了。
 
若记录不是很多(你每月一条记录想也不会很多!)但又想改动最少,我建议你使用历遍的方法!
如下:
function MyLocate(DataSet:TDataSet;olddate,LocateDate:string):boolean;
begin
result:=false;
dataset.DisableControls;
dataset.First;
while not dataset.Eof do
begin
if FormatDateTime('yyyy-m',dataset.FieldByName('olddate').AsDateTime)=LocateDate then
begin
result:=true;
break;
end
dataset.Next
end;
dataset.EnableControls;
end;
当数据少于3000条时绝不会比Locate方法慢!
 
多谢大家,我已经用笨方法解决了,散分!
 
后退
顶部