首先你应该设置 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;
咦?上面漏掉了,在 sql := '... 这行的下面一行,在 + 和 '#... 之间要加上变量s2: + s2 + '# Order by y1';
不好意思 忘了说了 我的数据库是SQLSever 谢谢
请问我要查询当天的数据为什么要加两个DateTimePicker啊?
如果是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;不要那两个日期控件。
//分别设置好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;
你所说的问题:加一个adoconnection,一个adoquery,一个datasource,一个dbgrid
设置好数据库联接,加两个datetimepicker控件,一个按钮.
dbgrid与datasource联接
datasource与adoquery联接
adoquery与adoconnection联接按钮事件,写查询代码即可
我的数据库是老师给的,已经连上了,表名是yali_day_report,时间的字段的y1.我已经把datetimepicker加上了,麻烦高手帮忙了!
这里假定你用的是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;
谢谢
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;不要那两个日期控件。
这个对事件的查询,好像是对Access的事件查询
我把内容详细点说一次吧
数据库是SQLSever 与数据库连接用的是Table,DBGrid和DateSource。
想要查询某天的记录在DBGrid显示出来。表名是yali_day_report 字段是y1
嘿嘿~
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;
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不是按要求的时间和数据格式
这个怎么改