请问:ADO+Access 多表查询问题!

toply13 2003-10-17 11:33:50
问题如下:

已经建立一个库,其中包含多个结构相同,内容不同的表(其中有两个字段为X,Y),表之间不存在关联。有两个产量xx,yy。 我想要搜索所有表,以实现将满足条件sqr((表名.X-xx)^2+(表名.Y-yy)^2)<1000 的记录显示在DataGrid控件上。
我考虑要在查询时建立一个动态的临时表,然后将查询到的记录添加到这个表中,再用DataGrid显示。 不知道这种方法是否可行? 希望给出详细的代码和解释,谢谢!
...全文
134 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
changechange 2003-10-19
  • 打赏
  • 举报
回复
DATAGRID可以这样实现:

str = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\aa\data.mdb;Persist Security Info=False"
Set adcon = New ADODB.Connection
adcon.Open str

str = SQL语句 '具体应该怎么我也不知道,因为你根本就没有联系,也写不出来
Set rs = New ADODB.Recordset
rs.Open str

set Adodc1.RecordSource = rs

Adodc1.Refresh

DataGrid1.DataSource = Adodc1

lgxysl 2003-10-18
  • 打赏
  • 举报
回复
to : toply13(风苹果)
你的想法应该是可行的,代码也不复杂,方法是:
1、清空动态表
2、执行循环,添加记录
3、显示数据
相信这些代码你应该会写。

既于效率如何,你可以与用联合查询比较一下,联合查询的表达式是字符串,它不受你的表的个数的影响,最好你的表的名称起得规范一些,用数字来编号,这样方便通过循环来生成查询字符串表达式,如果在两者选择的话,我宁选联合查询。
toply13 2003-10-18
  • 打赏
  • 举报
回复
回:wdwd05(学.NET,从头开始)
我是指 一个库中有多个表,这些表的数目不定,可能会随时增加。这些表有相同的结构,即有相同的字段(x,y这两个字段也是在同一个表中的)。但表之间没有建立关联。

对于联合查询,还没有试,但我觉得应该是可行的。

我还想问,如果 我先建立一张动态表,然后用循环的方法遍历所有的表,然后将每个被找到的记录追加到动态表中,最后在DataGrid中显示。这样好吗?效率如何? 有没有相关的代码呢? 希望能贴一份给我,或发到我的信箱:toply13@sina.com
谢谢~~~~~~~~~~!
lgxysl 2003-10-18
  • 打赏
  • 举报
回复
如果x,y这两个字段是在同一个表中的,那好办,用联合查询可以解决这个问题。

Dim sjk As ADODB.Connection
Dim sjkf As String
Dim data As ADODB.Recordset
Dim sqltxt As String

Set sjk = New ADODB.Connection
sjkf = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & "你的数据库路径和文件名;"
sjk.Open sjkf
'以上代码打开数据库
sqltxt = "SELECT table1.x, table1.y"
sqltxt = sqltxt & " From table1"
sqltxt = sqltxt & " Where (((Sqr(IIf(IsNull([x]), 0, [x] ^ 2) + IIf(IsNull([y]), 0, [y] ^ 2))) < 1000))"
sqltxt = sqltxt & " UNION SELECT table2.x, table2.y"
sqltxt = sqltxt & " From table2"
sqltxt = sqltxt & " WHERE (((Sqr(IIf(IsNull([x]),0,[x]^2)+IIf(IsNull([y]),0,[y]^2)))<1000));"
'以上为联合查询表达式,为避名空数据的影响,用了isunll函数来处理
Set data = sjk.Execute(sqltxt) '执行查询
'(将记录集绑定到显示控件,你自己写吧。)
阿建像熊猫 2003-10-18
  • 打赏
  • 举报
回复
创建临时表:
create table 表名 (其中有关联的字段自己定)
删除临时表:
drop table 表名

上面都是一些sql语句,应该会用吧。
yoki 2003-10-18
  • 打赏
  • 举报
回复

dim strSql as string

Set adcon = New ADODB.Connection
adcon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\test.mdb;Persist Security Info=False"

strSql="Select * From(" _
&" Select * From A " _
&" Union All" _
& " Select * From B " _
&" Union All" _
& " Select * From C " _
&" Union All" _
& " Select * From D"
& ")T" _
&" Where ((X-xx)^2+(Y-yy)^2)<1000 "

Set rs = New ADODB.Recordset
rs.Open strSql

set Adodc1.RecordSource = rs

Adodc1.Refresh

DataGrid1.DataSource = Adodc1
yoki 2003-10-18
  • 打赏
  • 举报
回复
dim strSql as string

Set adcon = New ADODB.Connection
adcon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\test.mdb;Persist Security Info=False"

strSql="Select * From A Where ((X-xx)^2+(Y-yy)^2)<1000 " _
&" Union All" _
& " Select * From B Where ((X-xx)^2+(Y-yy)^2)<1000 " _
&" Union All" _
& " Select * From C Where ((X-xx)^2+(Y-yy)^2)<1000 " _
&" Union All" _
& " Select * From D Where ((X-xx)^2+(Y-yy)^2)<1000 "

Set rs = New ADODB.Recordset
rs.Open strSql

set Adodc1.RecordSource = rs

Adodc1.Refresh

DataGrid1.DataSource = Adodc1
wdwd05 2003-10-17
  • 打赏
  • 举报
回复
不明白你的意思~2个表没有关系还搞什么,真晕,根本就没有判断条件~写清楚点~至于显示在DATAGRID可以这样实现:

str = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\aa\data.mdb;Persist Security Info=False"
Set adcon = New ADODB.Connection
adcon.Open str

str = SQL语句 '具体应该怎么我也不知道,因为你根本就没有联系,也写不出来
Set rs = New ADODB.Recordset
rs.Open str

set Adodc1.RecordSource = rs

Adodc1.Refresh

DataGrid1.DataSource = Adodc1
chanet 2003-10-17
  • 打赏
  • 举报
回复
可以在 Access 先建一个查询~

之后在 VB 中用 ado 调用.

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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