Foxtable(狐表)用户栏目专家坐堂 → SQL的Update语句中的表名可以是动态的吗?


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

主题:SQL的Update语句中的表名可以是动态的吗?

帅哥哟,离线,有人找我吗?
zpx_2012
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
SQL的Update语句中的表名可以是动态的吗?  发帖心情 Post By:2013/3/5 0:53:00 [只看该作者]

如题,

在系统中有一此常用的数据设置为数据字典,比如“计量单位”。在数据字典的目录树中“计量单位”节点下的“个”改为“pc”, 现在通过AfterEditNode的事件代码更新后台所有数据表中有“计量单位”列里面的“个”都更新为“pc”

 

'更新所有后台表单中相关引用
        For Each tb As DataTable In DataTables
            For Each dc As DataCol In tb.DataCols
                If dc.name = " & pth(0) & " Then
                    Dim cmd As New SQLCommand
                    cmd.C
                    cmd.CommandText = "Update {tb.name} Set 值 = '" & e.NewText & "' Where 数据名称 = '" & pth(0) & "' And 值 = '" & pth(1) & "'"
                    cmd.ExecuteNonQuery()  
                End If
            Next
        Next

 

两个问题:

1、蓝色的代码对后台没有加载的数据起作用吗?(因为编辑目录树时可能很多表都没有加载)

2、update语句中的{表名}是否可以像红色所示那样动态表示。

如果不可以,要实现我说的功能怎么办?

 

谢谢各位老师!

 

 

 



 回到顶部
帅哥哟,离线,有人找我吗?
lihe60
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:6885 积分:43595 威望:0 精华:0 注册:2009/3/2 14:07:00
  发帖心情 Post By:2013/3/5 6:53:00 [只看该作者]

可以

  cmd.CommandText = "Update {“” & tb.name & “”} Set 值 = '" & e.NewText & "' Where 数据名称 = '" & pth(0) & "' And 值 = '" & pth(1) & "'"


 回到顶部
帅哥哟,离线,有人找我吗?
双轨制
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:89 积分:535 威望:0 精华:0 注册:2013/2/23 20:06:00
  发帖心情 Post By:2013/3/5 8:29:00 [只看该作者]

cmd.CommandText = "Update " & tb.name & " Set 值 = '" & e.NewText & "' Where 数据名称 = '" & pth(0) & "' And 值 = '" & pth(1) & "'"
[此贴子已经被作者于2013-3-5 8:28:49编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
zpx_2012
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2013/3/5 12:09:00 [只看该作者]

谢谢,但好像不起作用唉!

 

'更新所有后台表单中相关引用

        For Each tb As DataTable In DataTables
            For Each dc As DataCol In tb.DataCols
                If dc.name = " & pth(0) & " Then
                    cmd.CommandText = "Update {'" & tb.name & "'} Set 值 = '" & e.NewText & "' Where 数据名称 = '" & pth(0) & "' And 值 = '" & pth(1) & "'"
                    cmd.ExecuteNonQuery()  '执行SQL命令
                End If
            Next
        Next

 

是不是前面蓝色代码不能遍历后台所有表,如果要遍历后台所有表要怎么写SQL代码?


 


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/3/5 12:56:00 [只看该作者]


 回到顶部
帅哥哟,离线,有人找我吗?
zpx_2012
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2013/3/5 14:56:00 [只看该作者]

谢谢狐爸,遍历后台数据表是可以了。但就是节点表题改变时不能更新所有已存在的表中的相关数据。


        Dim tbs As List(Of String)
        tbs = Connections("EI").GetTableNames '得到数据源中的所有表名
        For Each tb As String In tbs
            For Each dc As DataCol In DataTables(tb).DataCols
                If dc.name = " & pth(0) & " Then

                    Dim cmd As New SQLCommand
                    cmd.C
                    cmd.CommandText = "Update {'" & tb & "'} Set '" & dc.name & "' = '" & e.NewText & "' Where '" & dc.name & "' = '" & pth(1) & "'"
                    cmd.ExecuteNonQuery()  '执行SQL命令
                End If
            Next
        Next

 

是不是红色部份不正确?


 

[此贴子已经被作者于2013-3-5 14:56:50编辑过]

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/3/5 15:35:00 [只看该作者]

用output.show或者messagebox.show看看合成的sql语句是什么,复制这个语句到sql执行窗口执行,看看有没有用,通常是因为你合成的语句有问题。

 


 回到顶部