以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  SQL的Update语句中的表名可以是动态的吗?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=29342)

--  作者:zpx_2012
--  发布时间:2013/3/5 0:53:00
--  SQL的Update语句中的表名可以是动态的吗?

如题,

在系统中有一此常用的数据设置为数据字典,比如“计量单位”。在数据字典的目录树中“计量单位”节点下的“个”改为“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
--  发布时间:2013/3/5 6:53:00
--  

可以

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


--  作者:双轨制
--  发布时间: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
--  发布时间: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代码?


 


--  作者:狐狸爸爸
--  发布时间:2013/3/5 12:56:00
--  

参考:

 

http://www.foxtable.com/help/topics/1943.htm

 


--  作者:zpx_2012
--  发布时间: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编辑过]

--  作者:狐狸爸爸
--  发布时间:2013/3/5 15:35:00
--  

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