请问:我用ADODC控件的FIND方法查找:能否使用.FIND("姓名='张三' And 年份='2012'")?即多条件查询

时间:2021-12-01 22:17:11
请问:我用ADODC控件的FIND方法查找:能否使用.FIND("姓名='张三'  And 年份='2012'")?即多条件查询

9 个解决方案

#1


不能,Find 方法不支持多条件。你可以用 Filter 来做类似的事情。

#2


是啊,而且做这个操作时,要特别注意加上错误处理,免得条件不合规范时,抛出的错误让程序崩溃掉

#3


何不直接用select查询?

#4


可能是希望保持全部记录,仅仅定位在某一符合条件的记录上。

还有一种比较“绕”的方法,来实现楼主类似多条件 Find 的效果。

用两个条件做两轮 Find,记录找到的记录的 AbsolutePosition 属性。在两轮中都出现的 AbsolutePosition 处的记录就是符合多条件的记录。可以通过设置 AbsolutePosition 属性定位到这些记录上。

#5


引用 1 楼 of123 的回复:
不能,Find 方法不支持多条件。你可以用 Filter 来做类似的事情。


用Filter好像解决不了我的问题呢?
我是用AODDC控件将查询结果值返回给一个DataGrid控件,原来想用Find方法来在DataGrid控件中查找想要找的记录,即在DataGrid控件的记录集中再定位记录.

#6


引用 4 楼 of123 的回复:
可能是希望保持全部记录,仅仅定位在某一符合条件的记录上。

还有一种比较“绕”的方法,来实现楼主类似多条件 Find 的效果。

用两个条件做两轮 Find,记录找到的记录的 AbsolutePosition 属性。在两轮中都出现的 AbsolutePosition 处的记录就是符合多条件的记录。可以通过设置 AbsolutePosition 属性定位到这些记录上。


姑娘姑娘姐真是利害也,知我心者非你也

#7


引用 4 楼 of123 的回复:
可能是希望保持全部记录,仅仅定位在某一符合条件的记录上。

还有一种比较“绕”的方法,来实现楼主类似多条件 Find 的效果。

用两个条件做两轮 Find,记录找到的记录的 AbsolutePosition 属性。在两轮中都出现的 AbsolutePosition 处的记录就是符合多条件的记录。可以通过设置 AbsolutePosition 属性定位到这些记录上。


如果通过两次查询的两个条件来定位,好想是定位不了一个唯一的记录
字段1          字段2
EEE            007
AAA             007
BBB            070
AAA             007
CCC           003

如果第一个定位是Find(字段1='AAA')定位到的是第2条记录,
第二个定位是Find(字段2='007')定位到的是第1条记录?

请问:我用ADODC控件的FIND方法查找:能否使用.FIND("姓名='张三' And 年份='2012'")?即多条件查询



#8


你的数据库表有没有 ID 之类值唯一的字段?

如果有,另用一个查询,找到这些 ID:
Set rs = cn.Execute("SELECT id FROM  yourtable WHERE 姓名='张三' And 年份='2012'"
Do Until rs.EOF
    List1.AddItem rs!id
    rs.MoveNext
Loop
Set rs = Nothing

在定位时
.Find("id = " & List1.List(i))
i = i + 1

可以让 List1.Visible = False

#9


引用 7 楼 kimpkswm 的回复:
Quote: 引用 4 楼 of123 的回复:

可能是希望保持全部记录,仅仅定位在某一符合条件的记录上。

还有一种比较“绕”的方法,来实现楼主类似多条件 Find 的效果。

用两个条件做两轮 Find,记录找到的记录的 AbsolutePosition 属性。在两轮中都出现的 AbsolutePosition 处的记录就是符合多条件的记录。可以通过设置 AbsolutePosition 属性定位到这些记录上。


如果通过两次查询的两个条件来定位,好想是定位不了一个唯一的记录
字段1          字段2
EEE            007
AAA             007
BBB            070
AAA             007
CCC           003

如果第一个定位是Find(字段1='AAA')定位到的是第2条记录,
第二个定位是Find(字段2='007')定位到的是第1条记录?

请问:我用ADODC控件的FIND方法查找:能否使用.FIND("姓名='张三' And 年份='2012'")?即多条件查询
你必须找到两轮查找中 AbsolutePosition 相同的那些记录。
比如,你在第一轮中找到的记录 AbsolutePosition 有:(不要停在找到的首记录)
1
3
7

在第二轮中找到的记录 AbsolutePosition 有:
3
8
9
106

那就只有记录 3 是两条件都满足的。

ADODC1.Recordset.AbsolutePosition = 3 就可以定位在这条记录上。

#1


不能,Find 方法不支持多条件。你可以用 Filter 来做类似的事情。

#2


是啊,而且做这个操作时,要特别注意加上错误处理,免得条件不合规范时,抛出的错误让程序崩溃掉

#3


何不直接用select查询?

#4


可能是希望保持全部记录,仅仅定位在某一符合条件的记录上。

还有一种比较“绕”的方法,来实现楼主类似多条件 Find 的效果。

用两个条件做两轮 Find,记录找到的记录的 AbsolutePosition 属性。在两轮中都出现的 AbsolutePosition 处的记录就是符合多条件的记录。可以通过设置 AbsolutePosition 属性定位到这些记录上。

#5


引用 1 楼 of123 的回复:
不能,Find 方法不支持多条件。你可以用 Filter 来做类似的事情。


用Filter好像解决不了我的问题呢?
我是用AODDC控件将查询结果值返回给一个DataGrid控件,原来想用Find方法来在DataGrid控件中查找想要找的记录,即在DataGrid控件的记录集中再定位记录.

#6


引用 4 楼 of123 的回复:
可能是希望保持全部记录,仅仅定位在某一符合条件的记录上。

还有一种比较“绕”的方法,来实现楼主类似多条件 Find 的效果。

用两个条件做两轮 Find,记录找到的记录的 AbsolutePosition 属性。在两轮中都出现的 AbsolutePosition 处的记录就是符合多条件的记录。可以通过设置 AbsolutePosition 属性定位到这些记录上。


姑娘姑娘姐真是利害也,知我心者非你也

#7


引用 4 楼 of123 的回复:
可能是希望保持全部记录,仅仅定位在某一符合条件的记录上。

还有一种比较“绕”的方法,来实现楼主类似多条件 Find 的效果。

用两个条件做两轮 Find,记录找到的记录的 AbsolutePosition 属性。在两轮中都出现的 AbsolutePosition 处的记录就是符合多条件的记录。可以通过设置 AbsolutePosition 属性定位到这些记录上。


如果通过两次查询的两个条件来定位,好想是定位不了一个唯一的记录
字段1          字段2
EEE            007
AAA             007
BBB            070
AAA             007
CCC           003

如果第一个定位是Find(字段1='AAA')定位到的是第2条记录,
第二个定位是Find(字段2='007')定位到的是第1条记录?

请问:我用ADODC控件的FIND方法查找:能否使用.FIND("姓名='张三' And 年份='2012'")?即多条件查询



#8


你的数据库表有没有 ID 之类值唯一的字段?

如果有,另用一个查询,找到这些 ID:
Set rs = cn.Execute("SELECT id FROM  yourtable WHERE 姓名='张三' And 年份='2012'"
Do Until rs.EOF
    List1.AddItem rs!id
    rs.MoveNext
Loop
Set rs = Nothing

在定位时
.Find("id = " & List1.List(i))
i = i + 1

可以让 List1.Visible = False

#9


引用 7 楼 kimpkswm 的回复:
Quote: 引用 4 楼 of123 的回复:

可能是希望保持全部记录,仅仅定位在某一符合条件的记录上。

还有一种比较“绕”的方法,来实现楼主类似多条件 Find 的效果。

用两个条件做两轮 Find,记录找到的记录的 AbsolutePosition 属性。在两轮中都出现的 AbsolutePosition 处的记录就是符合多条件的记录。可以通过设置 AbsolutePosition 属性定位到这些记录上。


如果通过两次查询的两个条件来定位,好想是定位不了一个唯一的记录
字段1          字段2
EEE            007
AAA             007
BBB            070
AAA             007
CCC           003

如果第一个定位是Find(字段1='AAA')定位到的是第2条记录,
第二个定位是Find(字段2='007')定位到的是第1条记录?

请问:我用ADODC控件的FIND方法查找:能否使用.FIND("姓名='张三' And 年份='2012'")?即多条件查询
你必须找到两轮查找中 AbsolutePosition 相同的那些记录。
比如,你在第一轮中找到的记录 AbsolutePosition 有:(不要停在找到的首记录)
1
3
7

在第二轮中找到的记录 AbsolutePosition 有:
3
8
9
106

那就只有记录 3 是两条件都满足的。

ADODC1.Recordset.AbsolutePosition = 3 就可以定位在这条记录上。