您的索引足够多了,您是用pardox表吧,pardox支持local sql。用sql做组合查询,
实现容易,速度也不慢,delphi 自己就带local sql 的帮助。xbase系列编程的思路
应尽早放弃。多用Tquery.
with query do
begin
close;
sql.clear;
sql.add('select * from table where callno=:p1 and employ=:p2 and ..');
parambyname('p1').asinteger:=值;
parambyname('p2').asstring:=值;
...
open;
end;
具体用法请看delphi的帮助。
实现容易,速度也不慢,delphi 自己就带local sql 的帮助。xbase系列编程的思路
应尽早放弃。多用Tquery.
with query do
begin
close;
sql.clear;
sql.add('select * from table where callno=:p1 and employ=:p2 and ..');
parambyname('p1').asinteger:=值;
parambyname('p2').asstring:=值;
...
open;
end;
具体用法请看delphi的帮助。
解决方案 »
- 动态创建cxgrid 退出的时候报错
- 考勤刷卡,要在电脑上看到本月的考勤情况,填写迟到原因等信息用什么样的体系结构
- 我想学习一个旧程序,提示属性currencystyle不存在,判定为ehlib的问题。有人说是版本的问题,请问各位大虾?3.0以前的版本我没搜索到呀
- DELPHI的FRAMES入门。求教
- 我写了个定时关机程序,在调试时可以正常运行,但我运行.exe可执行文件时,却没反应!
- pascal 有没有这种方便简洁的写法
- 数据库填加JPG文件
- //按钮2的代码可以把GRID1的东西对应在GRID2显示出来,但我不想用按钮
- 帮我查一下错
- 请问各位大侠 我在做三层系统的时候 用CLIENTDATASET时候出现的问题!
- 开发工具的比较
- OpenDialog多个文件的选择结果如何进行排序?
var
sSQL: string;
sWhere: strng;
begin
sSQL := 'select * from table1';
if Length(edtCallNo.Text)>0 then
sWhere := 'callno='+edtCallNo.Text
else
sWhere := ''; if Length(edtClass.Text)>0 then
begin
if Length(sWhere)>0 then
AppendStr( sWhere, ' and ' );
AppendStr( sWhere, 'class='+edtClass.Text );
end; if Length(edtDepart.Text)>0 then
begin
if Length(sWhere)>0 then
AppendStr( sWhere, ' and ' );
AppendStr( sWhere, 'depart='+edtDepart.Text );
end; if Length(sWhere)>0 then
AppendStr( sSQL, ' where '+sWhere ); Query1.SQL.Text := sSQL;
Query1.Open;这里把三个字段的值都假设为整数且你的程序都检查了用户的输入。btw: 你好象键误了,employee《--》class
"select * from table where column1 in
(select column1 from table1 where ...)
and column2 in
(select column2 from table2 where ...)
......"
把以上语句放入query中,在where 子句中传递查询条件,若没有选择此条件,就把这个where子句设为''。你可以先动态生成这个sql字符串,用MessageBox看一下,再执行查询!
假如有三个字段callno,class,depart,分别对应Edit1、Edit2和Edit3。
在button1的onclick事件为:
var
sqlstring:string;
begin
if edit1.text<>'' then
begin
sqlstring:=' callno='''+edit1.text+'''';
end;
if edit2.text<>'' then
begin
if sqlstring<>'' then
begin
sqlstring:='and class='''+eidt2.text+'''';
end
else
begin
sqlstring:='class='''+eidt2.text+'''';
end;
if edit3.text<>'' then
begin
if sqlstring<>'' then
begin
sqlstring:='and depart='''+eidt3.text+'''';
end
else
begin
sqlstring:='depart='''+eidt3.text+'''';
end;
end;
with query1 do
begin
close;
sql.clear;
sql.add('select * from table1 where');
sql.add(sqlstring);
open;
end;end;
更简单的方法是:
利用SQL的 LIKE 句法。假定条件中的表字段皆为字符串或整型数值。
可创建一函数,参数为各输入框的值,返回构造的查询串。各参数为 par1,par2...parN
在函数中判定,若某参数为空字符串,则将其值赋为'%',否则不变化
参照ljq 的例子,但需要把 = 换成 LIKE ,给查询串赋值时赋有可能变成'%'的参数值
当某字段为浮点数时,需转换成字符串类型。
不好意思,我不懂delphi, 只好如此写;)