如何实现“模糊查询”?

txmaster 2001-08-24 03:04:56
我正在开发一个小软件,被一个问题难住了,向高手们请教:
比如说:数据库中有这么几条记录:
10 ……
15 ……
20 ……
当用户输入为“12”时,如何能查到记录“10”?
当用户输入为“13”时,如何能查到记录“15”?
望有同志救我于水火之中!
我现在只能给28分。
谢谢!
...全文
140 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
txmaster 2001-08-27
  • 打赏
  • 举报
回复
不好意思!问题我已经自己解决了。
但分还是要送的。大家分分吧。
xinhe 2001-08-24
  • 打赏
  • 举报
回复
也可以写成
with query1 do
begin
close;
sql.clear;
add('select * from 表 where like :x+"%");
parambyname(x).asstring:=copy(edit1.text,1,1);
open;
end;
xinhe 2001-08-24
  • 打赏
  • 举报
回复
with query1 do
begin
close;
sql.clear
add('select * from 表 where like "1%");
open;
end;
baxiu 2001-08-24
  • 打赏
  • 举报
回复
刚试过了,2000也可以,条件中的char(1)可加可不加!
你试试吧,可能回有帮助!
baxiu 2001-08-24
  • 打赏
  • 举报
回复
给你一个思路!
select top 1 name,sex,age,source from table
where name+char(1)+sex+char(1)+age+char(1)+source
>='txmaster'+' '(补足字段长度的空格,后面一样)+char(1)+'man '+char(1)+'25 'char(1)+'10 '
可查出比条件大的最近记录。<=可查小的最近记录。
前提是所有字段是char类型。怎么取舍这两条记录我还没找到好办法!
可以考虑一下。
sql server7.0可以用,2000没试,有人说不行!
txmaster 2001-08-24
  • 打赏
  • 举报
回复
可能我没有把问题说清楚。如果只是以一个字段来查找那倒没有什么困难的了——有这么多朋友提出了好办法。
可惜,我真正的问题是:
用四个字段进行查询。GOGONEARST,FINDNEARST全都不灵。
如:
Query1.locate('Name;Sex;Age;Source',vararrayof['txmaster','man','25','12'],[]);
如何在下列数据中找到正确的?(第1条记录)
Name Sex Age Source ……
txmaster man 25 10
txmaster man 25 15
txmaster man 25 20
txmaster man 25 25
救救我吧!
kuangning 2001-08-24
  • 打赏
  • 举报
回复

procedure Tgetphonr_frm.Edit1Change(Sender: TObject);
var
temp_s : String ;
begin
temp_s := edit1.text + '%' ;
PhoneQuery.SQL.Text := 'SELECT distinct * FROM p_phparam where phonecode like '+''''+temp_s+'''' ;
Try
PhoneQuery.Active := True ;
except
end ;
end;
zzy73 2001-08-24
  • 打赏
  • 举报
回复
用GOTOKEY 和FINDKEY 要么查找成功,要么查找失败,因为查找的是特定一个精确匹配值。
不精确查找则查找决不会失败,它总是给用户查找出一个结果来。
我看到你表中没有12,13要给出10,15的结果,那就用GotoNearest和FindNearest进行不精确查找好了。
hety 2001-08-24
  • 打赏
  • 举报
回复
你用like试试
select * from table where bianhao like '1%'
王集鹄 2001-08-24
  • 打赏
  • 举报
回复
//....

var
I, J, T: Integer;
begin
I := StrToIntDef(Edit1.Text, 0);
T := 0;
Table1.First;
while not Table1.Eof do begin
J := Table1.FieldByName('Field1').AsInteger;
if Abs(J - I) < (T - I) then T := J;
Table1.Next;
end;
Caption := IntToStr(T);
end;

//....
cobi 2001-08-24
  • 打赏
  • 举报
回复
按照你的提法,首先你应当用程序代码控制你的规则,也就是:
(假设‘12’是字符型)
tmptxt := edit1.txt (用户输入)
if copy(length(tmptxt),tmptxt) < '3' then
begin
tmptxt := copy(1,tmptxt) + '0';
table1.gotokey(tmptxt);
end else
begin
...
end;

大概的思路就是这样。
zzy73 2001-08-24
  • 打赏
  • 举报
回复
利用GotoNearest和FindNearest进行不精确查找
汽车租赁系统的开发过程中,采用B/S架构,主要使用Java主流技术进行开发,结合最新流行的SSM框架。使用Mysql数据库和Eclipse或者IDEA开发环境。包括登录、首页、客户管理、车辆管理、汽车出租、出租单管理、汽车入库、检查单管理、系统管理等功能,适合二次开发课程设计、毕业设计等。业务模块1、客户管理客户列表客户分页和模糊查询客户添加、修改、删除导出客户数据2、车辆管理车辆列表车辆车辆分页和模糊查询车辆添加、修改、删除3、汽车出租根据客户身份证查询所有未出租的车辆信息进行出租4、出租单管理多条件的模糊查询和分页出租单的修改、删除、导出5、检查单管理多条件模糊查询和分页检查单修改导出检查单系统模块1、用户登陆校验用户名和密码登陆成功将登陆信息写入登陆日志未登录进行拦截2、菜单管理全查询菜单和根据左边的树查询不同菜单菜单的添加、修改、删除3、角色管理全查询角色和模糊查询角色的添加、修改、删除4、用户管理全查询用户和模糊查询用户的添加、修改、删除以及重置密码5、数据源的监控(druid monitor)6、统计分析客户地区统计分析公司年度月份销售额统计分析业务员年度销售额统计分析 开发技术和环境开发环境操作系统:Windows/Mac OS编程语言:Java开发工具:IDEA、Navicat项目构建:Maven 3.5.2服务器:Tomcat 8.5数据库:MySQL 8.0开发技术后台技术选型:SSM(Spring SpringMVC Mybatis)前端技术选型:LayUI、dtree、echarts测试账号管理员: admin/123456业务员:zhangsan/123456 部分运行截图分为管理员与业务员角色,用于汽车租赁后台管理系统,功能相对完善!登录 首页 客户管理车辆管理 车辆添加 汽车出租 出租单管理 汽车入库 检查单管理菜单管理 角色管理 用户管理 日志管理 公告管理 数据源监控客户地区统计分析 公司年度月份销售额统计分析业务员年度销售额论文截图源码截图数据库截图     

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧