两个表的模糊匹配问题!(100分)

  • 主题发起人 主题发起人 zhoudang
  • 开始时间 开始时间
没有试试我的么?WIN2000/WIN98+SQL7/2000均通过的。
 
在sql2000的query analyzer下执行也行,但是也是没有记录返回。
 
to kingdeezj:你的也试过了,在analyzer下,也是没有记录返回。
 
to kengdeezj:在delphi6下就提示:Undeclared identifier: 'ltrim'这个错误
 
to kengdeezj:上面那个错误解决掉之后远行,也是没有记录返回。
 
to kengdeezj:不好意思,没测试清楚就发了那么多信息。
在analyzer下测试有记录返回,正确了。可是在delphi则有这样的错误:
[Error] Unit1.pas(49): Undeclared identifier: 'ltrim'
[Error] Unit1.pas(49): Undeclared identifier: 'gjz'
程序如下:
with adoquery3 do
begin
close;
sql.Clear;
sql.Add('select gjz.g from gjz,wenti
where wenti.w like ''%'+ltrim(rtrim(gjz.g))+'%'');
open;
end;

 
to bluerain:在sql2000的query analyzer执行也是没有记录返回的
 
也许我该死心了,呵呵.但是我怎么都搞不清为什么会在sql7.5和sql2000下有这么大差异.
也许应该这么测试(所有测试请zhoudang在query analyzer下运行).

create table a(gjz varchar(100))
create table b(wenti varchar(100))
insert a values('操作系统')
insert a values('定义')
insert a values('性质')
insert b values('操作系统的定义是什么?')
select a.* from a,b where charindex(a.gjz,b.wenti)>0

应该是返回两条记录,如果不是我投降了,呵呵.

 
to bluerain:可以了,其实你的程序一直都是对的;
我想再问一下,如果b.wenti这个内容改为edit中的内容,也就是说查询
a.gjz是否是edit.text的子字符串,edit.text的内容不要求输入到数据库中去,
那么这个程序如何写呢?
 
你这个搜索的问题,你问一问yysn吧,他正在做。
 
to gzfrank:如何才能向yysn发问呢?
 
var
strSQL : string;
....
with adoquery1 do
begin
close;
sql.clear;
strSQL := 'select a.gjz from a where charindex(a.gjz,' + QuotedStr(edit.text)
+ ')>0';
sql.add(strSQL);
open;
nd;
 
to bluerain:可以了,真是太感激你了。因为我经验少的原因,你回答得应该很辛苦。
最后问一下:charindex(a.gjz,' + QuotedStr(edit.text) + ')>0 这个命令中为什么
要写成“' + QuotedStr(edit.text) + '”,它的作用是什么?谢谢了!
还有就是我在下面这个叶面中问了一个同样的问题,可能是因为表达得不清楚
所以没人回答.
http://www.delphibbs.com/delphibbs/dispq.asp?lid=999721
 
1.QuotedStr函数的作用是将一个字符串两边加上单引号,例如
str := 'abc' // 字符串是abc
str := QutoedStr('abc') // 字符串是'abc'

2.sql语句中查找对字符串的操作如下
select * from table1 where name='me'
所以在Delphi这一边写sql语句的时候
应该是(假设edit1.text 为 'me')
strSQL := 'select * from table1 where name='+quotedStr(edit1.text);
而不应该是
strSQL := 'select * from table1 where name='+edit1.text;
因为这样sql语句就变成了
select * from table1 where name=me //出错

3.上面这些都是写sql的一些基本功,其实对于掌握的好的人来说,一般是这样写的
strSQL := 'select * from table where name=' + '''' + edit1.text + '''';
或者
strSQL := 'select * from table where name=''' + edit1.text + '''';
但是从上面的回答中我觉得你可能这些基本功还不是很好(冒犯),所以用了这个
QuotedStr函数,不容易出错.

4.另: Delphi中 '''' 表示一个单引号 '
 
不用客气,我的基本功真的不好!
谢谢你了,bluerain!
 
后退
顶部