Foxtable(狐表)用户栏目专家坐堂 → [求助]多表查询


  共有2623人关注过本帖树形打印复制链接

主题:[求助]多表查询

帅哥,在线噢!
2900819580
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1327 积分:9648 威望:0 精华:0 注册:2015/6/30 8:46:00
[求助]多表查询  发帖心情 Post By:2018/10/7 16:17:00 [显示全部帖子]

如下代码,我是加载了第一个表,再加载列,再遍历行,查找相关的数据,能不能用SQL 中的INNER JOIN语句,或者有没有其它更好的方法,
因为遍历的话,如果行数多的话,会很慢!
Dim cmd As new SQLCommand
Dim Sqldt1 As DataTable
cmd.C
cmd.CommandText = "sel ect Top 10 * from {ICInventory} "  
Sqldt1 = cmd.ExecuteReader

Dim tb As Table = Tables(e.Form.Name & "_Table1")
Dim dt As DataTable = tb.DataTable
tb.DataSource = Sqldt1

Dim lms() As String = {"代码","名称","规格型号"}
For Each lm As String In lms
    If lm = "用量" Then
        dt.DataCols.Add(lm,Gettype(Single))
    Else
        dt.DataCols.Add(lm,Gettype(String),250)
    End If
Next

Dim cmd As new SQLCommand
Dim Sqldt As DataTable
cmd.C
For Each r As Row In tb.Rows
    cmd.CommandText = "Sel ect * From {t_ICItemCore} Where [FItemID] = '" & r("FItemID") & "'"

    Sqldt = cmd.ExecuteReader
    If Sqldt.DataRows.Count > 0 Then
        Dim dr As DataRow = sqldt.DataRows(0)
        r("代码") = dr("FNumber")
        r("名称") = dr("FName")
        r("规格型号") = dr("Fmodel")
    End If
Next



 回到顶部
帅哥,在线噢!
2900819580
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1327 积分:9648 威望:0 精华:0 注册:2015/6/30 8:46:00
  发帖心情 Post By:2018/10/8 14:56:00 [显示全部帖子]


列名 'FName' 不明确。

多表出现以上错误 ,以下是代码
cmd.CommandText = "Sele ct a.*,b.FNumber As 代码,b.FName As 名称,b.Fmodel as 规格型号,c.Fnote as 库位号,e.FName as 仓库名称 from {ICInventory} As a "
cmd.CommandText &= " Inner join {t_ICItemCore} As b on a.FItemID = b.FItemID "
cmd.CommandText &= " Inner join {t_ICItemMaterial} As c on a.FItemID = c.FItemID "
cmd.CommandText &= " Inner join {t_ICItemBase} As d on a.FItemID = d.FItemID "
cmd.CommandText &= " Inner join {t_ICItemBase} As e on d.FDefaultLoc = e.FItemID "
cmd.CommandText &= " WHERE FName LIKE '%机壳%'"


 回到顶部
帅哥,在线噢!
2900819580
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1327 积分:9648 威望:0 精华:0 注册:2015/6/30 8:46:00
  发帖心情 Post By:2018/10/8 15:08:00 [显示全部帖子]

以下是引用有点甜在2018/10/8 15:05:00的发言:

条件 WHERE FName LIKE '%机壳%' 中的 fname 是哪个表的?也要指定表名的


解决了,cmd.CommandText &= " WHERE E.FName LIKE '%机壳%'"

谢谢老师


 回到顶部
帅哥,在线噢!
2900819580
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1327 积分:9648 威望:0 精华:0 注册:2015/6/30 8:46:00
  发帖心情 Post By:2018/10/9 15:26:00 [显示全部帖子]

老师,如果两个表不在同一个数据库上,怎么办。
’~~~~~~~~~~~~~~~~~~~~~~~`{t_ICItemCore}
Dim cmd As new SQLCommand
Dim Sqldt As DataTable
cmd.Conn ecti
‘~~~~~~~~~~~~~~~~~~~{物料表}
Dim cmd1 As new SQLCommand
Dim Sqldt As DataTable
cmd1.Conn ecti

cmd.CommandText = "Se lect b.FNumber As 代码,b.FName As 名称,b.Fmodel as 规格型号,c.Fnote as 库位号,e.FName as 仓库名称 from {t_ICItemCore} As b "
cmd.CommandText &= " Inner join {物料表} As C on c.代码 = b.FNumber " 

Sqldt = cmd.ExecuteReader

[此贴子已经被作者于2018/10/9 15:27:12编辑过]

 回到顶部
帅哥,在线噢!
2900819580
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1327 积分:9648 威望:0 精华:0 注册:2015/6/30 8:46:00
  发帖心情 Post By:2018/10/9 15:46:00 [显示全部帖子]

老师,都是SQL数据库上,也是同一个服务器,只是数据源名称不一样,
代码应该怎么写。 数据源名称没办法上传
Dim cmd As new SQLCommand
Dim Sqldt As DataTable
‘cmd.Connec ti

Dim cmd1 As new SQLCommand
Dim Sqldt As DataTable
’cmd1.Connec ti


cmd.CommandText = "Selec t b.FNumber As 代码,b.FName As 名称,b.Fmodel as 规格型号,c.Fnote as 库位号,e.FName as 仓库名称 from {t_ICItemCore} As b "
cmd.CommandText &= " Inner join {物料表} As C on c.代码 = b.FNumber " 

Sqldt = cmd.ExecuteReader
[此贴子已经被作者于2018/10/9 15:47:58编辑过]

 回到顶部
帅哥,在线噢!
2900819580
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1327 积分:9648 威望:0 精华:0 注册:2015/6/30 8:46:00
  发帖心情 Post By:2018/10/9 16:33:00 [显示全部帖子]

cmd.CommandText = "Sel ect b.FNumber As 代码,b.FName As 名称,b.Fmodel as 规格型号,c.Fnote as 库位号,e.FName as 仓库名称 from {cmd.ado.t_ICItemCore} As b "
cmd.CommandText &= " Inner join {cmd1.ado.物料表} As C on c.代码 = b.FNumber " 

对象名 'cmd.ado.t_ICItemCore' 无效。

 回到顶部
帅哥,在线噢!
2900819580
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1327 积分:9648 威望:0 精华:0 注册:2015/6/30 8:46:00
  发帖心情 Post By:2018/10/10 9:14:00 [显示全部帖子]


图片点击可在新窗口打开查看此主题相关图片如下:无标题.png
图片点击可在新窗口打开查看


图片点击可在新窗口打开查看此主题相关图片如下:无标题.png
图片点击可在新窗口打开查看


cmd.CommandText = "Se lect b.FNumber As 代码,b.FName As 名称,b.Fmodel as 规格型号,c.名称 as 名称2 from AIS20170303202558.dbo.t_ICItemCore As b "
cmd.CommandText &= " Inner join {201701.dbo.物料表} As C on c.代码 = b.FNumber " 

.NET Framework 版本:2.0.50727.5485
Foxtable 版本:2018.3.9.1
错误所在事件:
详细错误信息:
对象名 '201701.dbo.物料表' 无效。
试过加括号和不加括号,201701.dbo.物料表 和 201701.ado.物料表 都试过。

[此贴子已经被作者于2018/10/10 9:16:42编辑过]

 回到顶部
帅哥,在线噢!
2900819580
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1327 积分:9648 威望:0 精华:0 注册:2015/6/30 8:46:00
  发帖心情 Post By:2018/10/10 10:21:00 [显示全部帖子]

[201701].dbo.物料表 这个方法可以了,谢谢老师


 回到顶部
帅哥,在线噢!
2900819580
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1327 积分:9648 威望:0 精华:0 注册:2015/6/30 8:46:00
  发帖心情 Post By:2018/10/10 10:49:00 [显示全部帖子]


图片点击可在新窗口打开查看此主题相关图片如下:无标题.png
图片点击可在新窗口打开查看


老师还有一个新问题:
AIS20170303202558.dbo.t_ICItemCore 这个数据表上有 8.0002 但 [201701].dbo.物料表 没有这个料号,同时加载的话是不会显示出来的,
我想实现的是按AIS20170303202558.dbo.t_ICItemCore 这个数据表加载,如果在 8.0002 但 [201701].dbo.物料表 这个数据表上没有,则名称2空白。

代码如下

cmd.CommandText = "Sel ect b.FNumber As 代码,b.FName As 名称,b.Fmodel as 规格型号,c.名称 as 名称2 from AIS20170303202558.dbo.t_ICItemCore As b "
cmd.CommandText &= " Inner join [201701].dbo.物料表 As C on c.代码 = b.FNumber " 

 回到顶部
帅哥,在线噢!
2900819580
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1327 积分:9648 威望:0 精华:0 注册:2015/6/30 8:46:00
  发帖心情 Post By:2018/10/10 14:36:00 [显示全部帖子]

老师,如果两个表的数据都加进来呢



 回到顶部
总数 11 1 2 下一页