2,497
社区成员
发帖
与我相关
我的任务
分享
procedure TForm1.BitBtn4Click(Sender: TObject);
var
i,AgeFrom,AgeTo,RzzFrom,RzzTo : integer;
WhcdFrom,WhcdTo,SqlStr,whcds : string;
begin
SqlStr := '';//select * from gugan where
try
begin
//逻辑上你的错误:从你的代码看出,如果条件不正确设置,则认为是不进行条件限制 ,这是不对的,应该添加退出语句exit
{年龄查询条件处理}
//if (Trim(AgeFromEdit.Text)<>'') or (Trim(AgeToEdit.Text)<>'') then
//条件出错,应该用 and 而不是用 or
if (Trim(AgeFromEdit.Text)<>'') and (Trim(AgeToEdit.Text)<>'') then
begin
AgeFrom := StrToInt(trim(AgeFromEdit.Text));
AgeTo := StrToInt(trim(AgeToEdit.Text));
if AgeFrom>AgeTo then
begin
ShowMessage('年龄设置有问题,请重新检查');
AgeFromEdit.SetFocus;
exit;//添加
end
else if SqlStr='' then
SqlStr := 'now between dateadd(''yyyy'','+AgefromEdit.text+',birthday) and dateadd(''yyyy'','+AgeToEdit.text+',birthday)'
else
SqlStr := SqlStr+' and now between dateadd(''yyyy'','+AgefromEdit.text+',birthday) and dateadd(''yyyy'','+AgeToEdit.text+',birthday)';
end //应该加上else exit
;
{任正职时间查询条件处理}
//if (Trim(RzzFromEdit.Text)<>'') or (Trim(RzzToEdit.Text)<>'') then
if (Trim(RzzFromEdit.Text)<>'') and (Trim(RzzToEdit.Text)<>'') then
//条件出错,应该用 and 而不是用 or
begin
RzzFrom := StrToInt(trim(RzzFromEdit.Text));
RzzTo := StrToInt(trim(RzzToEdit.Text));
if RzzFrom>RzzTo then
begin
ShowMessage('查询条件<任职时间>设置有问题,请重新检查');
RzzFromEdit.SetFocus;
exit;//添加
end
else
begin
if SqlStr='' then
//条件语句错误修改
SqlStr :='now between dateadd(''yyyy'','+RzzFromEdit.text+',Rzz_time) and dateadd(''yyyy'','+RzztoEdit.text+',Rzz_time)'
else
//条件语句错误修改
SqlStr := Sqlstr+' and now between dateadd(''yyyy'','+RzzFromEdit.text+',Rzz_time) and dateadd(''yyyy'','+RzztoEdit.text+',Rzz_time)';
end;
end//应该加上else exit
;
{文化程度查询条件处理}
if (Trim(WhcdFromComboBox.Text)<>'') or (Trim(WhcdFromComboBox.Text)<>'') then
begin
WhcdFrom := trim(WhcdFromComboBox.Text);
WhcdTo := trim(WhcdToComboBox.Text);
if WhcdFromComboBox.ItemIndex>WhcdToComboBox.ItemIndex then
begin
ShowMessage('文化程度设置有问题,请重新检查');
WhcdFromComboBox.SetFocus;
exit;//添加
end
else
begin
whcds := '';
for i:=WhcdFRomComboBox.itemindex to WhcdToComboBox.itemindex do begin
//你没有按照我的原句子,出错,whcds:=whcds+','+''+WhcdFRomComboBox.items[i]+'''';
whcds:=whcds+','''+WhcdFRomComboBox.items[i]+'''';
end;
Delete(whcds,1,1);
//你没有按照我的加上下面一句
whcds:='('+whcds+')';
if SqlStr='' then
//你又错了 SqlStr :='whcd in+whcds'
SqlStr :='whcd in'+whcds
else
//你又错了 SqlStr := Sqlstr+'and whcd in+whcds';
SqlStr := Sqlstr+' and whcd in'+whcds;
end;
end//应该加上else exit
;
try
with DataModuleADO.ADOQuery1 do
begin
SQL.Clear;
if not (MessageDlg('你的查询条件是"'+sqlstr+'"',mtConfirmation, [mbYes, mbNo], 0) = mrYes) then exit;
//下面最重要的东西你忘记了
if sqlstr='' then sqlstr:='select * from gugan' else
sqlstr:='select * from gugan where '+sqlstr;
sql.add(trim(SqlStr));
//加上调试语句
{cdsnghw提供的SQL语串: sql.add('select * from gugan where now between dateadd(''yyyy'','+AgefromEdit.text+',birthday) and dateadd(''yyyy'','+AgeToEdit.text+',birthday) and now between dateadd(''yyyy'','+RzzFromEdit.text+',Rzz_time) and dateadd(''yyyy'','+RzztoEdit.text+',Rzz_time) and whcd in'+whcds);}
open;
DataSource1.DataSet:=DataModuleADO.ADOQuery1;
DbGrid1.DataSource:=DataSource1;
end;
except
MessageDlg('年龄、文化程度或任正职时间查询有误!',mtError,[mbok],0);
end;
end; //顶层try
except
MessageDlg('查询条件设置存在问题,请检查是否设置正确、完整!',mtError,[mbok],0);
end;
end;
procedure TForm1.BitBtn4Click(Sender: TObject);
var
i,AgeFrom,AgeTo,RzzFrom,RzzTo : integer;
WhcdFrom,WhcdTo,SqlStr,whcds : string;
begin
SqlStr := '';
try
begin
{年龄查询条件处理}
if (Trim(AgeFromEdit.Text)<>'') or (Trim(AgeToEdit.Text)<>'') then
begin
AgeFrom := StrToInt(trim(AgeFromEdit.Text));
AgeTo := StrToInt(trim(AgeToEdit.Text));
if AgeFrom>AgeTo then
begin
ShowMessage('年龄设置有问题,请重新检查');
AgeFromEdit.SetFocus;
end
else if SqlStr='' then
SqlStr := 'now between dateadd(''yyyy'','+AgefromEdit.text+',birthday) and dateadd(''yyyy'','+AgeToEdit.text+',birthday)'
else
SqlStr := SqlStr+'and now between dateadd(''yyyy'','+AgefromEdit.text+',birthday) and dateadd(''yyyy'','+AgeToEdit.text+',birthday)';
end;
{任正职时间查询条件处理}
if (Trim(RzzFromEdit.Text)<>'') or (Trim(RzzToEdit.Text)<>'') then
begin
RzzFrom := StrToInt(trim(RzzFromEdit.Text));
RzzTo := StrToInt(trim(RzzToEdit.Text));
if RzzFrom>RzzTo then
begin
ShowMessage('查询条件<任职时间>设置有问题,请重新检查');
RzzFromEdit.SetFocus;
end
else
begin
if SqlStr='' then
SqlStr :='dateadd(''yyyy'','+RzztoEdit.text+',Rzz_time)'
else
SqlStr := Sqlstr+'and dateadd(''yyyy'','+RzztoEdit.text+',Rzz_time)';
end;
end;
{文化程度查询条件处理}
if (Trim(WhcdFromComboBox.Text)<>'') or (Trim(WhcdFromComboBox.Text)<>'') then
begin
WhcdFrom := trim(WhcdFromComboBox.Text);
WhcdTo := trim(WhcdToComboBox.Text);
if WhcdFromComboBox.ItemIndex>WhcdToComboBox.ItemIndex then
begin
ShowMessage('文化程度设置有问题,请重新检查');
WhcdFromComboBox.SetFocus;
end
else
begin
whcds := '';
for i:=WhcdFRomComboBox.itemindex to WhcdToComboBox.itemindex do begin
whcds:=whcds+','+''+WhcdFRomComboBox.items[i]+'''';
end;
Delete(whcds,1,1);
if SqlStr='' then
SqlStr :='whcd in+whcds'
else
SqlStr := Sqlstr+'and whcd in+whcds';
end;
end;
try
with DataModuleADO.ADOQuery1 do
begin
SQL.Clear;
sql.add(trim(SqlStr));
{cdsnghw提供的SQL语串: sql.add('select * from gugan where now between dateadd(''yyyy'','+AgefromEdit.text+',birthday) and dateadd(''yyyy'','+AgeToEdit.text+',birthday) and now between dateadd(''yyyy'','+RzzFromEdit.text+',Rzz_time) and dateadd(''yyyy'','+RzztoEdit.text+',Rzz_time) and whcd in'+whcds);}
open;
DataSource1.DataSet:=DataModuleADO.ADOQuery1;
DbGrid1.DataSource:=DataSource1;
end;
except
MessageDlg('年龄、文化程度或任正职时间查询有误!',mtError,[mbok],0);
end;
end; //顶层try
except
MessageDlg('查询条件设置存在问题,请检查是否设置正确、完整!',mtError,[mbok],0);
end;
query.sql.add('select * from gugan where now between dateadd(''yyyy'','+nAgefromEdit.text+',birthday) and dateadd(''yyyy'','+nAgeToEdit.text+',birthday) and now between dateadd(''yyyy'','+RzzFromEdit.text+',Rzz_time) and dateadd(''yyyy'','+RzztoEdit.text+',Rzz_time) and whcd in'+whcds);
test
test