各位大哥,小弟现在在练习一个人事管理的MIS,程序有个功能是
根据起止时间查询,有2个TMASKEDIT编辑框SEEK——START——TIME
和SEEK——END——TIME用于输入起止时间,BUTTON的ONCLICK事件
代码如下:
procedure TF_attendance.B_seek_ioClick(Sender: TObject);
var
FilterStr:String; start_time:string; end_time:string;
begin
With DM_main.T_attendance do
begin
Close;
FilterStr:='';
start_time:='';
end_time:='';
if Seek_by_person.Checked then
begin
dbgrid1.datasource:= DM_main.ds_attendance;
FilterStr:='PERSON='''+Seek_person_id.Text+'''';
open;
end;
if Seek_by_time.Checked then
begin
dbgrid1.datasource:= DM_main.datasource1;
with DM_main.query1 do
begin
close;
sql.Clear;
sql.Add('select * from attendance where io_time>start_time and io_time<end_time');
parambyname('start_time').AsString:=Seek_start_time.Text;
parambyname('end_time').AsString:=Seek_end_time.Text;
prepare;
open;
end;
//if length(FilterStr)>0 then
// FilterStr:=FilterStr+' AND ';
//FilterStr:=FilterStr+'IO_TIME>'+Seek_start_time.Text;
//FilterStr:=FilterStr+' AND IO_TIME<'+Seek_end_time.Text;
end;
if length(FilterStr)>0 then
begin
Filter:=FilterStr;
Filtered:=True;
end
else
Filtered:=False;
//Open;
end;
end;
其中io-time是datetime型的,执行时提示'query1:parameter 'start_time' not found'.
这是个随书带的练习程序,原来是通过filter使用的(即被注释掉的语句),执行时有错误,我便加了个
query1,通过query1查询,还是遇到问题了。程序其他部分应该是好的,把
sql.Add('select * from attendance where io_time>start_time and io_time<end_time');
parambyname('start_time').AsString:=Seek_start_time.Text;
parambyname('end_time').AsString:=Seek_end_time.Text;
prepare;
换成 sql.Add('select * from attendance where io_time>"2002-11-01" and io_time<2002-12-06"');
执行能查出符合条件的记录。
请问是哪里有问题?应该怎么写sql语句?如果用filter,该怎样写?
小弟多谢了!!!
根据起止时间查询,有2个TMASKEDIT编辑框SEEK——START——TIME
和SEEK——END——TIME用于输入起止时间,BUTTON的ONCLICK事件
代码如下:
procedure TF_attendance.B_seek_ioClick(Sender: TObject);
var
FilterStr:String; start_time:string; end_time:string;
begin
With DM_main.T_attendance do
begin
Close;
FilterStr:='';
start_time:='';
end_time:='';
if Seek_by_person.Checked then
begin
dbgrid1.datasource:= DM_main.ds_attendance;
FilterStr:='PERSON='''+Seek_person_id.Text+'''';
open;
end;
if Seek_by_time.Checked then
begin
dbgrid1.datasource:= DM_main.datasource1;
with DM_main.query1 do
begin
close;
sql.Clear;
sql.Add('select * from attendance where io_time>start_time and io_time<end_time');
parambyname('start_time').AsString:=Seek_start_time.Text;
parambyname('end_time').AsString:=Seek_end_time.Text;
prepare;
open;
end;
//if length(FilterStr)>0 then
// FilterStr:=FilterStr+' AND ';
//FilterStr:=FilterStr+'IO_TIME>'+Seek_start_time.Text;
//FilterStr:=FilterStr+' AND IO_TIME<'+Seek_end_time.Text;
end;
if length(FilterStr)>0 then
begin
Filter:=FilterStr;
Filtered:=True;
end
else
Filtered:=False;
//Open;
end;
end;
其中io-time是datetime型的,执行时提示'query1:parameter 'start_time' not found'.
这是个随书带的练习程序,原来是通过filter使用的(即被注释掉的语句),执行时有错误,我便加了个
query1,通过query1查询,还是遇到问题了。程序其他部分应该是好的,把
sql.Add('select * from attendance where io_time>start_time and io_time<end_time');
parambyname('start_time').AsString:=Seek_start_time.Text;
parambyname('end_time').AsString:=Seek_end_time.Text;
prepare;
换成 sql.Add('select * from attendance where io_time>"2002-11-01" and io_time<2002-12-06"');
执行能查出符合条件的记录。
请问是哪里有问题?应该怎么写sql语句?如果用filter,该怎样写?
小弟多谢了!!!
begin
close;
sql.Clear;
sql.Add('select * from attendance where io_time>:start_time and io_time<:end_time');
parambyname('start_time').AsString:=Seek_start_time.Text;
parambyname('end_time').AsString:=Seek_end_time.Text;
prepare;
open;
end;
begin
with query1 do
begin
close;
sql.clear;
sql.add('select * from personnel_no.db where 進廠日期>:ri1 and 進廠日期<:ri2');
query1.params[0].asdatetime:=DateTimePicker1.Date;
query1.params[1].asdatetime:=DateTimePicker2.Date;
open;
end;
end;
parambyname('start_time').AsString:=Seek_start_time.Text;
parambyname('end_time').AsString:=Seek_end_time.Text;
prepare;--------------------
Start_Time 和 End_Time 都是字符串变量,放在外边
时间与字符串的用法一样Sql.Text := 'select * from attendance where io_time >''' + Start_Time + '''' + 'and Io_Time < ''' + End_Time + '''' ;不用参数