以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助] 修改代码  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=42865)

--  作者:lsf5138
--  发布时间:2013/11/24 14:19:00
--  [求助] 修改代码
“Users” 表中有个 “是否在线” 的列 想在内部通信中的用户列表的用户前加个是否在线(True 或 False)
请帮忙修改下代码

Dim cmd,cmd1 As New SQLCommand
Dim dt As DataTable
Dim lst As WinForm.ListBox = Forms("内部通讯").Controls("ListBox1")
lst.ComboList = ""
cmd.C
cmd.CommandText = "SELECT DISTINCT Name From {Users}"
dt = cmd.ExecuteReader()
For Each dr As DataRow In dt.Datarows
    cmd1.C
    cmd1.CommandText = "Select * From {内部通讯} Where [发送者] = \'" & dr("Name") & "\' And [接收者] = \'" & _UserName & "\' And [接收时间] Is NULL"
    Dim dt1 As DataTable
    dt1 = cmd1.ExecuteReader
    If dr("Name") <> _UserName And dr("Name") <> "待机模式" And dr("Name") <> "管理员" Then  \' 不加载登录用户列表
        lst.Items.Add(dr("Name") & "(" & dt1.DataRows.Count & ")")
    End If
Next
If Lst.Items.Count > 0 Then
    lst.SelectedIndex = 0
End If
图片点击可在新窗口打开查看此主题相关图片如下:捕获22.png
图片点击可在新窗口打开查看

--  作者:有点甜
--  发布时间:2013/11/24 20:09:00
--  
 自己改一下。

Dim cmd,cmd1 As New SQLCommand
Dim dt As DataTable
Dim lst As WinForm.ListBox = Forms("内部通讯").Controls("ListBox1")
lst.ComboList = ""
cmd.C
cmd.CommandText = "SELECT DISTINCT Name From {Users}"
dt = cmd.ExecuteReader()
For Each dr As DataRow In dt.Datarows
    cmd1.C
    cmd1.CommandText = "Select * From {内部通讯} Where [发送者] = \'" & dr("Name") & "\' And [接收者] = \'" & _UserName & "\' And [接收时间] Is NULL"
    Dim dt1 As DataTable
    dt1 = cmd1.ExecuteReader
    If dr("Name") <> _UserName And dr("Name") <> "待机模式" And dr("Name") <> "管理员" Then  \' 不加载登录用户列表
        lst.Items.Add("(" & dr("是否在线") & ")" & dr("Name") & "(" & dt1.DataRows.Count & ")")
    End If
Next
If Lst.Items.Count > 0 Then
    lst.SelectedIndex = 0
End If

--  作者:lsf5138
--  发布时间:2013/11/25 9:58:00
--  

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

什么问题?
数据源是SQL2005  “Users” 表中真的有个 “是否在线” 的罗辑列呀!


--  作者:Bin
--  发布时间:2013/11/25 10:03:00
--  
你循环你查询出来的表,都有那些列 看看吧. 检查一下.
--  作者:狐狸爸爸
--  发布时间:2013/11/25 10:03:00
--  

你有这个列,但是:

 

cmd.CommandText = "SELECT DISTINCT Name From {Users}"
dt = cmd.ExecuteReader()

 

没有包括包括这个列,生成的dt只有name这一列。

 

重新整理一下自己的逻辑,然后再重写代码吧。

[此贴子已经被作者于2013-11-25 10:03:29编辑过]

--  作者:有点甜
--  发布时间:2013/11/25 19:57:00
--  
 试试这样

Dim cmd,cmd1 As New SQLCommand
Dim dt As DataTable
Dim lst As WinForm.ListBox = Forms("内部通讯").Controls("ListBox1")
lst.ComboList = ""
cmd.C
cmd.CommandText = "SELECT DISTINCT Name, 是否在线 From {Users}"
dt = cmd.ExecuteReader()
For Each dr As DataRow In dt.Datarows
    cmd1.C
    cmd1.CommandText = "Select * From {内部通讯} Where [发送者] = \'" & dr("Name") & "\' And [接收者] = \'" & _UserName & "\' And [接收时间] Is NULL"
    Dim dt1 As DataTable
    dt1 = cmd1.ExecuteReader
    If dr("Name") <> _UserName And dr("Name") <> "待机模式" And dr("Name") <> "管理员" Then  \' 不加载登录用户列表
        lst.Items.Add("(" & dr("是否在线") & ")" & dr("Name") & "(" & dt1.DataRows.Count & ")")
    End If
Next
If Lst.Items.Count > 0 Then
    lst.SelectedIndex = 0
End If