求一条奇怪的SQL语句问题。 ( 积分: 10 )

  • 主题发起人 主题发起人 cf83325
  • 开始时间 开始时间
C

cf83325

Unregistered / Unconfirmed
GUEST, unregistred user!
今天再解决一个数据查询的问题。是这样的的。现在数据库里面的记录很多。查询的时速度很慢。经理叫我这样去解决。那就是让用户自己在INI里面设置天数。按天数查询。<br>我的INI格式如下:<br>[设置]<br>天数=2//这里用户可以自己动态改变的。<br><br>procedure&nbsp;TForm1.FormCreate(Sender:&nbsp;TObject);<br>var<br>&nbsp;&nbsp;&nbsp;SetIni:TIniFile;<br>&nbsp;&nbsp;&nbsp;FilePath,m&nbsp;:string;<br>&nbsp;&nbsp;&nbsp;i,j,k,CountID:Integer;<br>begin<br><br>&nbsp;&nbsp;&nbsp;FilePath&nbsp;:=ExtractFilePath(ParamStr(0))&nbsp;+&nbsp;'ini/SetTime.ini';<br>&nbsp;&nbsp;&nbsp;SetInI&nbsp;:=TIniFile.Create(FilePath);<br>&nbsp;&nbsp;&nbsp;j:=SetIni.ReadInteger('设置','天数',k);&nbsp;&nbsp;//setdate:=Now;<br><br>&nbsp;&nbsp;&nbsp;m:=datetimetostr(Now-j);<br>&nbsp;&nbsp;&nbsp;with&nbsp;qry1&nbsp;do<br>&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Close;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL.Clear;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL.Add('select&nbsp;*&nbsp;from&nbsp;INVSYSL&nbsp;where&nbsp;DTTR70&gt;='''+m'''');//问题就在这里,这个参数没有传进去啊。。查询来的是数据库的说要记录啊。我要的是2前到今天的记录显示啊。高手求救啊。。。。。。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Open;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br><br>&nbsp;&nbsp;&nbsp;CountID&nbsp;:=qry1.RecordCount;<br>&nbsp;&nbsp;&nbsp;lbl1.Caption:='记录数为:'+inttostr(CountID)+'条'+'&nbsp;&nbsp;&nbsp;';<br>end;
 
select&nbsp;*&nbsp;from&nbsp;INVSYSL&nbsp;where&nbsp;datadiff(day,DTTR70,Getdate())&nbsp;&lt;=&nbsp;m
 
其中m对应ini文件中的天数
 
我从INI里面读的是天数。而且我要查询的是从2(ini里面的值)到今天这个时间段内的所有记录。。
 
select&nbsp;*&nbsp;from&nbsp;INVSYSL&nbsp;where&nbsp;convert(varchar(10),DTTR70,120)&nbsp;&gt;=&nbsp;convert(varchar(10),dateadd(day,-m,Getdate()),120)<br><br>-m为天数取负值,自己去替换一下
 
郁闷。郁闷。。。。。转化了。还是那样个。。郁闷了。一条SQL语句把本人搞郁闷了啊。。。。。。伤心了。。继续求帮助。。。。。
 
SQL.Add('select&nbsp;*&nbsp;from&nbsp;INVSYSL&nbsp;where&nbsp;DATEDIFF(day,DTTR70,Getdate())&nbsp;&lt;=&nbsp;'+inttostr(j));
 
是“&lt;=“,写反了吧
 
SQL.Add('select&nbsp;*&nbsp;from&nbsp;INVSYSL&nbsp;where&nbsp;DTTR70&gt;=:1');<br>SQL.Parambyname('1').asstring:=datetimetostr(Now-j);<br>这样用行不行?
 
来自:HoyCoolboy,&nbsp;时间:2007-11-28&nbsp;14:27:40,&nbsp;ID:3855405&nbsp;<br>select&nbsp;*&nbsp;from&nbsp;INVSYSL&nbsp;where&nbsp;datadiff(day,DTTR70,Getdate())&nbsp;&lt;=&nbsp;m
 
楼主,我的如下:<br>因为各OS的显示日期方式不同,所以尽量不要将String类型当做日期来传,只传double类型的,因为在DB中其日期类型转换到DLEPHI下也是DOUBLE类型。。。另外建议除非不得以,否则少用参数传递。
 
后退
顶部