通用查询制作(200分)

  • 主题发起人 主题发起人 lyplay2
  • 开始时间 开始时间
不用第三方控件也可以,用生成sql语句,假设你的数据表为mydata.dbf
chxtj="select * from mydata.dbf where "+COMBOBOX1.text+COMBOBOX2+":myvuer";
query1.sql.add(chxtj);
params(0):=COMBOBOX3.ASstring;//(根据所选类型进行转换)
query1.open;
 
到 http://lqohero.51.net 下载管得多看看吧,
如果合适,再谈。
 
procedure Tsendinfform.Button1Click(Sender: TObject);
var
SQLStr,SQLAll,Log1,log2:String;
SQLTemp:Pchar;
arrstr:array[1..12]of String;
i,l:integer;
sqllog:textfile;
function getsth(CurrEdit:TEdit):boolean;
begin
result:=false;
if CurrEdit.Text<>'' then
result:=true;
end;
{ function getlog1(log:string;txt:tobject):string;
begin
if log='=' then
begin
if (txt is tedit) then
result:=log+''''+(txt as tedit).Text+''')';
if (txt is tmaskedit) then
result:=log+''''+(txt as tmaskedit).Text+''')';
end
else
begin
if (txt is tedit) then
result:=' '+log+' ''%'+(txt as tedit).Text+'%'')';
if (txt is tmaskedit) then
result:=' '+log+' ''%'+(txt as tmaskedit).Text+'%'')';
end;
end; }
function getlog1(log:string;txt:tedit):string;
begin
if log='=' then
result:=log+''''+txt.Text+''')'
else
result:=' '+log+' ''%'+txt.Text+'%'')';
end;
begin
{//监测时间日期格式
if edit4.Text <>'' then
try
strtodatetime(Edit4.Text);
except
raise exception.Create('" '+edit4.Text+' "不是正确的日期格式,请重新输入!');
edit4.SetFocus;
exit;
end;
//监测时间日期格式
if edit5.Text <>'' then
try
strtodate(Edit5.Text);
except
raise exception.Create('" '+edit5.Text+' "不是正确的日期格式,请重新输入!');
edit5.SetFocus;
exit;
end;
//监测时间日期格式
if edit6.Text <>'' then
try
strtodate(Edit6.Text);
except
raise exception.Create('" '+edit6.Text+' "不是正确的日期格式,请重新输入!');
edit6.SetFocus;
exit;
end;
//监测时间日期格式
if edit7.Text <>'' then
try
strtodate(Edit7.Text);
except
raise exception.Create('" '+edit7.Text+' "不是正确的日期格式,请重新输入!');
edit7.SetFocus;
exit;
end; }
////正常查询
SQLAll:='';
SQLStr:='SELECT * FROM 派车.db WHERE ';
if sendinfform.RadioButton1.Checked then log1:='=' else log1:='LIKE';
if sendinfform.RadioButton3.Checked then Log2:='OR' else Log2:='AND';
if Getsth(sendinfform.Edit1) then
arrstr[1]:='(车号'+getlog1(log1,sendinfform.Edit1);
if Getsth(sendinfform.Edit2) then
arrstr[2]:='(司机'+getlog1(log1,sendinfform.Edit2);
if Getsth(sendinfform.Edit3) then
arrstr[3]:='(单号'+getlog1(log1,sendinfform.Edit3);
//
if sendinfform.Edit4.Text<>'' then
arrstr[4]:='(发车时间 >= '''+sendinfform.Edit4.Text+''')';
if sendinfform.Edit5.Text <>'' then
arrstr[5]:='(发车时间 <= '''+sendinfform.Edit5.Text+''')';
if sendinfform.Edit6.Text <>'' then
arrstr[6]:='(还车时间 >= '''+sendinfform.Edit6.Text+''')';
if sendinfform.Edit7.Text <>'' then
arrstr[7]:='(还车时间 <= '''+sendinfform.Edit7.Text+''')';
if sendinfform.Edit8.Text <>'' then
arrstr[8]:='(公里数 >= '''+sendinfform.Edit8.Text+''')';
if sendinfform.Edit9.Text <>'' then
arrstr[9]:='(公里数 <= '''+sendinfform.Edit9.Text+''')';
//
if sendinfform.CheckBox1.Checked then
arrstr[10]:='(早晚班 =True)'
else arrstr[10]:='(早晚班 =False)';
if sendinfform.CheckBox1.Checked then
arrstr[11]:='(节假日 =True)'
else arrstr[11]:='(节假日 =False)';
arrstr[12]:='';
for i:=1 to 11 do
begin
arrstr[12]:=arrstr[12]+arrstr;
if arrstr<>'' then
SQLAll:=SQLAll+Log2+arrstr;
end;
if arrstr[12]='' then
begin
application.MessageBox(pchar('没有查询项目?'),pchar('通知'));
exit;
end;

l:=strlen(Pchar(SQLAll));
GetMem(SQLTemp,l);
SQLTemp^ := Chr(0);

if SQLAll[1]='O' then
StrCat(SQLTemp,Pchar(SQLAll)+2);
if SQLAll[1]='A' then
StrCat(SQLTemp,Pchar(SQLAll)+3);

SQLStr:=SQLStr+SQLTemp;
FreeMem(SQLTemp);
//Application.MessageBox(Pchar(SQLStr),'预查询的SQL语句',MB_OK);
assignfile(sqllog,mainform.GetExePath+'datasql.log');
try
try
append(sqllog);
except
rewrite(sqllog);
end;
writeln(sqllog,'['+datetimetostr(now)+']查询:'+sqlstr);
finally
closefile(sqllog);
end;
//
try
with sendinfform.Query1 do
begin
SQL.Clear;
SQL.Add(SQLStr);
Prepare;
ExecSQL;
Open;
end;
except
on edbengineerror do application.MessageBox(pchar('查询过程出错!'#13#10'可能是时间输入格式错误,请检查!'),pchar('通知'),0);
end;
end;
 
http://www.playicq.com/dispdoc.asp?id=759
http://www.playicq.com/dispdoc.asp?id=249
 
最近刚做了一个,在人力资源系统中用,需要的话联系我. MSN: cgj@chint.com
 
多人接受答案了。
 

Similar threads

回复
0
查看
867
不得闲
回复
0
查看
1K
不得闲
D
回复
0
查看
926
DelphiTeacher的专栏
D
后退
顶部