从数据库中找同t2尽可能相似的数据,下列语句可以,但太慢
t2可能比找出来的数据长 i:=10;
t3:=copy(t2,1,10);
while form2.ADOTableCKPC.Locate('formatadd',t3,[loPartialKey]) do
begin
i:=i+2;
t3:=copy(t2,1,i); end;
showmessage('完成匹配');
t2可能比找出来的数据长 i:=10;
t3:=copy(t2,1,10);
while form2.ADOTableCKPC.Locate('formatadd',t3,[loPartialKey]) do
begin
i:=i+2;
t3:=copy(t2,1,i); end;
showmessage('完成匹配');
解决方案 »
- Delphi2010制作ActiveX,如何更改默认图标,添加右键动作?
- 操作线程(Public)中的事件,怎么不行啊?急急急急急
- DELHPI 7 在编程进行密集运算的时候界面会死掉不动,有没有办法让DELPHI 在运算时仍旧能够操作界面?比如说一个窗体在运算,一个窗体继续
- 简单问题:新建的Form,它的宽度最小为123,能不能再小点,比如100
- 小问题,很容易解决~~~快来解决立即给50分
- 动态创建的问题
- 能谈谈联想升级(80分)是如何开发的吗,有人愿合作开发成局域网上的升级吗?
- 熟悉商场POS系统请与我联系
- 请问如何安装控件,急!!!
- 初学WEB SERVICE的几个疑问?
- 如何让CheckBox选中时显示“×”而不是勾?
- ADO问题
select * from table where formatadd like 't2%'
SELECT * FROM TABLE WHERE FORMATADD LIKE 't2%'
select * from table where formatadd like 't2%'
ADOQuery.sql.add('SELECT * FROM TABLE WHERE FORMATADD LIKE 't2%'');
ADOQuery.ExecSQL;
举例t2:='广州市天河北路233号中信广场';我要查找最相近的地址如:广州市天河北路xxxxxx
尽可能相近
它可以查询以t 开头的任意长度的字符串
declare @S varchar(200)
set @S = 'Davoliogfds'
declare @N int
set @N = 1
while @N < Len(@S) and exists( select * from Employees where SubString(LastName,1,@N) = SubString(@S, 1, @N))
begin
Set @N = @N + 1end
Set @N = @N - 1
select * from Employees where SubString(LastName,1,@N) = SubString(@S, 1, @N)
t2:='你自己的条件'
adoquery1.sql.text:='SELECT * FROM TABLE WHERE FORMATADD LIKE '''+t2+‘%'+'''';
declare @S varchar(200)
set @S = 'Davoliogfds'
declare @N int
set @N = Leng(@S)
while (@N >0) and not exists( select * from Employees where SubString(LastName,1,@N) = SubString(@S, 1, @N))
begin
Set @N = @N - 1
end
select * from Employees where SubString(LastName,1,@N) = SubString(@S, 1, @N)
ADOQuery.sql.add('SELECT * FROM TABLE WHERE FORMATADD LIKE 't2%'');
ADOQuery.ExecSQL;
这样就可以了
begin
with table1 do
begin
indexfieldnames:='address';
setkey;
fieldbyname('address').asstring:=edit1.text;
gotonearest;
end;
end;
你要知道一个汉字占两位,而一个数字或字母仅占一位,你大概明白了吧。。
比如:t2:='广州市天河北路233号中信广场';
i:=10;
t3:=copy(t2,1,10);
while form2.ADOTableCKPC.Locate('formatadd',t3,[loPartialKey]) do
begin
i:=i+2;
t3:=copy(t2,1,i);
end;
当循环执行到第3次时 t3='广州市天河北路23';
而当循环执行到第4次时 t3并不='广州市天河北路233号';t3=? 我也不知道!
所以这里应该用某个函数判断下一字符是否多字节字符;(DELPHI有这样的函数,我现在
网吧,没法帮你查,你自己查查吧!)
我这里假设字符串中不含有中文;
var i:integer; t3:string;
begin
t3:=需要匹配的字符串;
i:=length(t3);
//当匹配失败并且i<>0时 缩短匹配字符串继续匹配;直到找到匹配字符串或者i=0 时退出
while (not form2.ADOTableCKPC.Locate('formatadd',t3,[loPartialKey]))and(i<>0) do
begin
i:=i-1;
t3:=copy(t2,1,i);
end;
if i<>0 then
showmessage('完成匹配')
else
showmessage('没有匹配的字符串');
end;
数据库中是大量地址和对应的邮编,
形如:
地址 邮编
广东省广州市天河区粤垦路27号 510517
也有的地址不带“省”或“市”两字 如:广东广州天河区粤垦路27号同时我的另外一个会员资料库中有的资料只有地址没有邮编
这时我就需要从上面的地址库中查询相近的地址,找出所需邮政编码我的方法是
先将邮编库中地址的“省”“市”“县”去掉
匹配程序如下 t1:= form2.ADOTableHY.FieldByName('地址').AsString; //会员地址
strl:=Length(t1);
t2:='';
for i:= 1 to (strl) do
begin
if ByteType(t1,i) = mbLeadByte then
if copy (t1,i,2) <> '省' then
if copy (t1,i,2) <> '市' then
if copy (t1,i,2) <> '县' then
begin
t2:=t2+copy (t1,i,2);
// showmessage(copy(t1,i,2));
end;
if ByteType(t1,i) = mbSingleByte then t2:=t2+copy (t1,i,1);
end;
if form2.ADOTableHY.FieldByName('地区').AsString <> '其他' then
if copy(t2,1,4) <> form2.ADOTableHY.FieldByName('地区').AsString then
t2:= form2.ADOTableHY.FieldByName('地区').AsString + t2;
t2:='广东'+t2+'$#@%#^^##^'; //以上程序是将会员地址格式化
i:=10;
t3:=copy(t2,1,10); while form2.ADOTableCKPC.Locate('formatadd',t3,[loPartialKey]) do //在邮编库中查找
begin
i:=i+2;
t3:=copy(t2,1,i); end;
form2.Button4.Enabled:=true;
showmessage('完成匹配');这段程序基本能查出相似地址,但好慢
sql语言我不太懂
所以求助于大家,谢谢另外select * from table(表名) where formatadd like 't2%'是没用的,希望大家考虑清楚在回答
ByteType(const S: string; Index: Integer): TMbcsByteType;TMbcsByteType;
mbSingleByte 单字节
mbLeadByte 双字节字符的头字节
mbTrailByte 双字节字符的尾字节