时间比较问题(20分)

  • 主题发起人 主题发起人 Alix88
  • 开始时间 开始时间
A

Alix88

Unregistered / Unconfirmed
GUEST, unregistred user!
Select * From DB434BaseData Where (时间>=#16:00:00# And 时间<=#17:00:00#)
该语句直接在ACCESS中运行一点问题,为什么在程序中运行却有错!
应如何写!
 
用Parameters来传递起止时间
 
betwean and 试先
 
这样的问题我常碰到,干脆就来求出来,
Select * form Table
if Not DataSet.Isempty then
begin
dataSet.First;
While not DataSet.eof then
begin
if (DataSet.FieldByName('时间').AsDatatime<=#16:00:00# ) and
(DataSet.FieldByName('时间').AsDatatime>=#17:00:00# ) then
showmessage('就显示');
end;
end;
 
用Parameters来传递起止时间
以下为实例:
aDOquery1.Active:=false;
aDOquery1.SQL.Clear();
aDOquery1.SQL.Add('SELECT * FROM CANDIDCI WHERE SURVDATE >=:begin
DATE AND SURVDATE<=:ENDDATE');
adoquery1.Parameters.Items[0].Value:=EncodeDate(2002,6,1);
adoquery1.Parameters.Items[1].Value:=EncodeDate(2002,7,1);
adoquery1.ExecSQL();
adoquery1.Active:=true;
sql中日期/时间格式受到数据库类型和当前系统设置的日期时间格式的影响,使用Parameters可以避免这些无谓的影响。
 
>=#16:00:00#
改成 >='#16:00:00# '
试试
 
>=#16:00:00#
改成 >='16:00:00 '!但时间必须写全!如>'2003-7-24 16:00',
测试成功!
 
不行!!
procedure TCountInfoForm.BitBtn2Click(Sender: TObject);
Var begin
Date,EndDate : String;
Count_SQL : String;
T1,T2 : Integer;
begin
Time,EndTime : String;
begin
If Not (FileNamesQ='') then
begin
BaseDataQuery.Active:=False;
BaseDataQuery.Filtered:=False;
BaseDataQuery.Filter:='日期='''+DateToStr(CxDateEdit1.Date)+'''';
BaseDataQuery.Filtered:=True;
{
begin
Time:='#'+DateToStr(CxDateEdit1.Date)+TimeToStr(CxTimeEdit1.Time)+'#';
EndTime:='#'+DateToStr(CxDateEdit2.Date)+TimeToStr(CxTimeEdit2.Time)+'#';
// EndTime:='#'+TimeToStr(CxTimeEdit2.Time)+'#';
}
Count_SQL:='Select * From ' + FileNamesQ +' Where (日期>=:begin
Time And 日期<=:EndTime)';
BaseDataQuery.Params.Items[0].AsTime:=CxTimeEdit1.Time;
BaseDataQuery.Params.Items[1].AsTime:=CxTimeEdit2.Time;
Edit1.text:=Count_SQL;
BaseDataQuery.SQL.Clear;
BaseDataQuery.SQL.Add(Count_SQL);
BaseDataQuery.Open;
BaseDataQuery.First;
T1:=BaseDataQuery.Fields[5].AsInteger;
BaseDataQuery.Last;
T2:=BaseDataQuery.Fields[5].AsInteger;
T2:=T2-T1;
Label4.Caption:=IntToStr(T2);
End
else
begin
ShowMessage('请选择织网批号再按本按钮查询!');
end;
end;

这是该段的源代码,但用过以上方法还是不行!
 
Count_SQL:='Select * From ' + FileNamesQ +' Where (日期>=:begin
Time And 日期<=:EndTime)';

//这两句话应该在赋参数值之前
BaseDataQuery.SQL.Clear;
BaseDataQuery.SQL.Add(Count_SQL);
BaseDataQuery.Params.Items[0].AsTime:=CxTimeEdit1.Time;
BaseDataQuery.Params.Items[1].AsTime:=CxTimeEdit2.Time;
Edit1.text:=Count_SQL;
BaseDataQuery.Open;
还不行的话,你可以发E-mail给我: gong_hui2000@163.com
 
这是结果:谢谢大家
begin
Time:=TimeToStr(CxTimeEdit1.Time);
EndTime:=TimeToStr(CxTimeEdit2.Time);
BaseDataQuery.SQL.Clear;
Count_SQL:='Select * From ' + FileNamesQ +' Where (日期>='+'#'+DateTostr(CxDateEdit1.Date)+'# And Timevalue(时间)>='+#39+begin
Time+#39+' And Timevalue(时间)<='+#39+EndTime+#39+')';
BaseDataQuery.SQL.Add(Count_SQL);
BaseDataQuery.Open;
 
正确答案:谢谢大家
begin
Time:=TimeToStr(CxTimeEdit1.Time);
EndTime:=TimeToStr(CxTimeEdit2.Time);
BaseDataQuery.SQL.Clear;
Count_SQL:='Select * From ' + FileNamesQ +' Where (日期>='+'#'+DateTostr(CxDateEdit1.Date)+'# And Timevalue(时间)>='+#39+begin
Time+#39+' And Timevalue(时间)<='+#39+EndTime+#39+')';
BaseDataQuery.SQL.Add(Count_SQL);
BaseDataQuery.Open;
 
后退
顶部