错哪了,very急!

select book
x=thisform.pageframe1.page1.combo1.value
if x="图书编码"
select bm as 图书编码 ;
from book;
into cursor biao;
where at(thisform.pageframe1.page1.text.value,bm)<>0
thisform.pageframe1.page1.grid1.recordsource='biao'
endif
为什么这样也不能模糊查找

还有怎样作可以实现在选了combo1中的一个字段,在表单上显示相应的文本框而不相干的就隐藏掉。
[366 byte] By [turbotarzan-忍者阿雷] at [2008-2-13]
# 1
把上面的代码改以下。
select book
ctextvalue=thisform.pageframe1.page1.text1.value
x=thisform.pageframe1.page1.combo1.value
if x="图书编码"
set filt to ctextvalue$bm
endif

if x='图书名称'
set filt to ctextvalue$mc
endif

thisform.refresh

在form的init事件public ctextvalue
ctextvalue=''
liujianjun_-流星尔 at 2007-10-20 > top of Msdn China Tech,MS-SQL Server,基础类...
# 2
我要用SQL做模糊查询
谁会
turbotarzan-忍者阿雷 at 2007-10-20 > top of Msdn China Tech,MS-SQL Server,基础类...
# 3
TO:turbotarzan(忍着阿雷)
liujianjun_(流星尔) 给出的方案不能实现你的要求吗?
vfp_database-数据库 at 2007-10-20 > top of Msdn China Tech,MS-SQL Server,基础类...
# 4
上面的代码就可以模糊查询
liujianjun_-流星尔 at 2007-10-20 > top of Msdn China Tech,MS-SQL Server,基础类...
# 5
可以的很成功
但是where at(thisform.pageframe1.page1.text.value,bm)<>0为什么不可以
而这样
select 1
use 图书详情
sele 2
use 作者详情
select 图书名,作者名,图书类型,图书单价,出版社,入库时间,库存量;
from 图书详情,作者详情;
into cursor biao;
where at(thisform.pageframe1.page2.text1.value,图书名)<>0
sele 1
use
sele 2
use
thisform.grid1.recordsource='biao'
thisform.grid1.recordsourcetype=1
*thisform.pageframe1.page2.text1.value=''
却可以
这和我写的楼顶的那段有什么区别吗?

turbotarzan-忍者阿雷 at 2007-10-20 > top of Msdn China Tech,MS-SQL Server,基础类...
# 6
按错按钮了,还以为可以了
liujianjun_(流星尔) 的代码运行后,表单上连查询结果表都没有啊
我用
select bm as 图书编码;
from book;
into cursor biao;
where bm like thisform.pageframe1.page1.text.value
可以查但是要用通配符%

在网上下载了一个源代码它的模糊查询
就是用where at(thisform.pageframe1.page1.text.value,bm)<>0的

可是奇怪的是我照搬他的就不行
我在他的查询表单上把对应查询的文本框删了,再在上面自己添一个,运行,他的也不能模糊查询了

难道关键是在文本框?
turbotarzan-忍者阿雷 at 2007-10-20 > top of Msdn China Tech,MS-SQL Server,基础类...
# 7
你所说的查询结果表也没有,那是因为你的表格绑定不对。数据已经出来了。
你把表格跟books绑定就行了。
你的方法很浪费效率。因为要重新生成数据源。
liujianjun_-流星尔 at 2007-10-20 > top of Msdn China Tech,MS-SQL Server,基础类...
# 8
试过了
要这样
ctextvalue=allt(thisform.pageframe1.page1.text1.value)
否则差不出
查找终于搞定了
谢谢各位!
不过这样查出来的数据可以直接改,不太好吧
怎样可以只看不能改

turbotarzan-忍者阿雷 at 2007-10-20 > top of Msdn China Tech,MS-SQL Server,基础类...
# 9
还有
为什么要在form的init事件里加public ctextvalue ctextvalue=''

turbotarzan-忍者阿雷 at 2007-10-20 > top of Msdn China Tech,MS-SQL Server,基础类...
# 10
把grid1的readonly属性设为真。
加上public是因为。如果一个变量在set filt to会存在生命期的问题。运行中有时会出现找不到该变量的问题。如果直接set filt to bm=allt(thisform.text1.value)就不存在此问题。但如果ctextvalue=allt(thisfomr.text1.value) sele tablename set filt to bm=ctextvalue则就有此问题。
liujianjun_-流星尔 at 2007-10-20 > top of Msdn China Tech,MS-SQL Server,基础类...
# 11
是不是就是
如果在form的init事件里加public ctextvalue ctextvalue=''了
就可以直接set filt to bm=thisform.text1.value
而不用set filt to bm=allt(thisform.text1.value)了
也不用ctextvalue=allt(thiform.text1.value) selt tablename set filt to =ctextvalue了

turbotarzan-忍者阿雷 at 2007-10-20 > top of Msdn China Tech,MS-SQL Server,基础类...
# 12
不是这个意思。allt()是肯定要的。为了避免有空格,而造成不匹配。

如果不public。
那么set filt to bm=allt(thisform.text1.value)
是可以的。
但如果把文本框中的值先赋给一个变量。然后set filt to bm=该变量时,该变量就存在生命期问题。

如果public的话,就用变量替代文本框中的值也没事。
liujianjun_-流星尔 at 2007-10-20 > top of Msdn China Tech,MS-SQL Server,基础类...