以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  请高手分析一下问题,谢谢!  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=59968)

--  作者:关键下一秒
--  发布时间:2014/11/15 10:22:00
--  请高手分析一下问题,谢谢!
切换数据源:
      方案一:************************************************************************

        Dim dtNames As String = ""
        If  Connections("BOYsERP").ConnectionString <> Connections(_DsnName).ConnectionString Then
            \'**************缷载数据表************************************************
            For Each  dt As DataTable In DataTables
                If dt.Type = 3 OrElse dt.Type = 4 AndAlso dt.ConnectionName<>_DsnName Then
                    dtNames = dtNames & "|" & dt.Name
                End If
            Next
            If dtNames <> "" Then
                dtNames = dtNames.trim("|")
                DataTables.Unload(dtNames)
            End If

            \'使新数据源与内定数据源BOYsERP连接串相等*******************************************
            If Connections.Contains("BOYsERP") = True Then
                Connections.Delete("BOYsERP")
            End If
            Connections.Add("BOYsERP",Connections(_DsnName).ConnectionString)
            DataTables.Load(dtNames)
        End If


‘用上面的方式切换数据源,遇到两个问题:
1.对应的table没有产生。(不知为什么)
2.如果table能正常产生,但在新增行时会出现:该行不属于与此关系相同的:dataset 错误。

      方案二:********************************************************************************
         If  Connections("BOYsERP").ConnectionString <> Connections(_DsnName).ConnectionString Then
            For Each dt As DataTable In DataTables
                \'切换数据源
                If dt.SourceType<>1 AndAlso dt.Type<>5 AndAlso Connections.Contains(_DsnName)=True  Then
                    Dim dbList As List (of String ) = Connections(_DsnName).GetTableNames
                    If dbList.Contains(dt.Name) Then
                        dt.ChangeConnection(_DsnName)            
                    End If
                End If
            Next
             \'使新数据源与内定数据源BOYsERP连接串相等*******************************************
            If Connections.Contains("BOYsERP") = True Then
                Connections.Delete("BOYsERP")
            End If
            Connections.Add("BOYsERP",Connections(_DsnName).ConnectionString)
         End If
用方案二,产生问题:
 1.使用sqlfind得到后台数据行做修改,再使用_Identify找到前台数据行,然后用 datarow.load(false)时,会卡死。
 2.其它没找到原因的卡死。


不知各位狐友,是否有更完美的切换数据源的方法?




[此贴子已经被作者于2014-11-15 10:35:11编辑过]

--  作者:逛逛
--  发布时间:2014/11/15 14:54:00
--  

1、方案一   请注意 OrElse 与  AndAlso 的优先次序

 

2、数据源切换,必须注意要将对应的DataTable的卸载,同时包括对应的Table(实际应用中,我更喜欢用首字母来代表窗口的数据源对象,以便通过关闭对应的窗  口来关闭Table)

 

3、你说的错误,我还没有遇见过,提不出建议。