请问各位前辈,怎样用日期查询出当天的数据并显示在DBGird上?
我用了两个SpinEdit控件确定时间。
谢谢!

解决方案 »

  1.   

    找一本delphi数据库编程的书看两个例子先熟悉一下.
    你所说的问题:加一个adoconnection,一个adoquery,一个datasource,一个dbgrid
    设置好数据库联接,加两个datetimepicker控件,一个按钮.
    dbgrid与datasource联接
    datasource与adoquery联接
    adoquery与adoconnection联接按钮事件,写查询代码即可
      

  2.   

    嘿嘿 你的评价很中肯呀,不过没办法,时间紧,任务重啊,老师让我做delphi,以前我连delphi是什么都不知道,所以现在很着急,
    我的数据库是老师给的,已经连上了,表名是yali_day_report,时间的字段的y1.我已经把datetimepicker加上了,麻烦高手帮忙了!
      

  3.   

    要求显示当天的记录并显示在DBgird上
      

  4.   

    首先你应该设置 adoconnection1 的连接字符串ConnectionString,让它能连接到数据库。
    这里假定你用的是Access数据库(你连这个都没说明?)其实,这里假定你对DBGrid中显示数据的列宽没有什么要求,不需要再去设置。procedure TForm1.FormShow(Sender: TObject);
    var
      s: string;
    begin
      s := FormatDatetime('yyyy-mm-dd', Date);
      DateTimePicker1.DateTime := StrToDateTime(s + ' 00:00:01');
      DateTimePicker2.DateTime := StrToDateTime(s + ' 23:59:59');  ADOConnection1.LoginPrompt := False;
      ADOConnection1.Connected := True;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      sql, s1, s2: string;
    begin
      s1 := FormatDatetime('yyyy-mm-dd hh:mm:ss', DateTimePicker1.DateTime);
      s2 := FormatDatetime('yyyy-mm-dd hh:mm:ss', DateTimePicker2.DateTime);
      sql := 'Select * From yali_day_report Where y1 >= #' + s1 + '# and y1 <= #'
        + '# Order by y1';  ADOQuery1.Close;
      ADOQuery1.SQL.Text := sql;
      ADOQuery1.Open;
      ADOQuery1.First;
    end;
      

  5.   

    咦?上面漏掉了,在 sql := '... 这行的下面一行,在 + 和 '#... 之间要加上变量s2:    + s2 + '# Order by y1';
      

  6.   

    不好意思 忘了说了 我的数据库是SQLSever
    谢谢
      

  7.   

    请问我要查询当天的数据为什么要加两个DateTimePicker啊? 
      

  8.   

    如果是SQLServer, 假定你的y1字段是日期时间型的,并且不需要查询当天的某个时间段,而是直接查询当天所有数据的话,就这样:procedure TForm1.FormShow(Sender: TObject);
    begin
      ADOConnection1.LoginPrompt := False;
      ADOConnection1.Connected := True;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      s: string;
    begin
      s := FormatDatetime('yyyy-mm-dd', Date);  ADOQuery1.Close;
      ADOQuery1.SQL.Text := 'Select * From yali_day_report Where y1 >= ''' + s 
        + ' 00:00:00'' and y1 <= ''' + s + ' 23:59:59'' Order by y1';
      ADOQuery1.Open;
      ADOQuery1.First;
    end;不要那两个日期控件。
      

  9.   


    这个对事件的查询,好像是对Access的事件查询
      

  10.   

    我用的是Table,datasource,DBGird连的数据库 
      

  11.   

    由于我不太明白给大家造成挺多麻烦的,让大家重复了好几次,实在不好意思
    我把内容详细点说一次吧
    数据库是SQLSever 与数据库连接用的是Table,DBGrid和DateSource。
    想要查询某天的记录在DBGrid显示出来。表名是yali_day_report 字段是y1
    嘿嘿~
      

  12.   

    //分别设置好table,dbgrid,datasource之间的属性var
      v_str:string;
    begin
      v_str:='select * from yali_day_report where y1=:time1';
      with adoquery do
        begin
          close;
          sql.clear;
          sql.add(v_str);
          parameters.parambyname('time1').value:=formatdatetime('yyyy-mm-dd',date);
          open;
        end;
    end;
      

  13.   

    with adoquery do 这句是什么意思?我并没有用adoquery啊 
      

  14.   

    楼主,你老师要求你必须使用 TADOTable吗?如果没有,就用TADOQuery吧。TADOTable不如TADOQuery灵活
      

  15.   

    begin
    a:= formatdatetime('YYYYMMDD',form1.DateTimePicker1.DateTime);
    Form1.Table1.SetRangeStart;
    Form1.Table1.FieldByName('y1').AsString:=DateToStr(Form1.DateTimePicker1.Date)+'00:00:00';
    Form1.Table1.SetRangeEnd;
    Form1.Table1.FieldByName('y1').AsString:=DateToStr(Form1.DateTimePicker1.Date)+'23:59:59';
    Form1.Table1.ApplyRange;
    end;
    这是我的代码
    例如输入2000 12 5 系统就提示 2000 12 500:00:00不是按要求的时间和数据格式
    这个怎么改