以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  老师,帮忙看看  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=70794)

--  作者:douglas738888
--  发布时间:2015/6/29 12:20:00
--  老师,帮忙看看
以下代码是button(发送键)里面的,已经实现一对一内部通讯,一对多发送信息存在问题,不能收到。
主要设计思路是结合自定义登录系统来完成的,在外部数据源“User"中增加了一个数据表”内部通讯“,以下发送代码发送多人时,Access的”内部通讯“表呈现

图片点击可在新窗口打开查看此主题相关图片如下:未标题-1.jpg
图片点击可在新窗口打开查看
想实现:
发送者       接收者        发送内容
杨阳          柯迎           ttt
杨阳          老张           ttt
杨阳          老刘           ttt

在大红袍老师的帮助下,已实现非自定义登录系统的以上功能,但利用Access外部数据源进行自定义登录系统与内部通讯结合起来的设计,
想请教老师,在建立了Dim cmd As New SQLCommand   cmd.C后,
cmd.CommandText = ????的拆解条件应该如何写,  

Dim yhm As String = e.Form.Controls("用户名").Text \'获得接收用户名
Dim nr As String = e.Form.Controls("TextBox2").Text \'获得发送内容
If yhm = "" AndAlso nr = "" Then
    Return
End If
For Each s As String In yhm.Split(",")
Dim cmd As New SQLCommand
cmd.C
cmd.CommandText = "Insert Into {内部通讯} ([发送者],[接收者],[发送时间],[发送内容]) Values (\'"
cmd.CommandText = cmd.CommandText & _UserName & "\',\'" & yhm & "\',#" & Date.Now & "#,\'" & nr & "\')"
If cmd.ExecuteNonQuery = 1 Then \'返回1表示增加成功
    e.Form.Controls("TextBox2").Value = ""
    If e.Form.Controls("TextBox1").Value = Nothing Then
        e.Form.Controls("TextBox1").Value =  _UserName & "  " & Date.Now & vbcrlf  & "      " & nr
    Else
        e.Form.Controls("TextBox1").Value = e.Form.Controls("TextBox1").Value & vbcrlf & vbcrlf & _UserName & "  " & Date.Now & vbcrlf  & "      " & nr
   End If
End If
Next

--  作者:don
--  发布时间:2015/6/29 13:28:00
--  
Dim yhms As String = e.Form.Controls("用户名").Text \'获得接收用户名
Dim nr As String = e.Form.Controls("TextBox2").Text \'获得发送内容
If yhm = "" Orelse nr = "" Then
    Return
End If

dim i as integer
Dim SQL,s2 As String
Dim cmd As New SQLCommand
cmd.Connection Name = "XXX"

For Each js As String In yhms.Split(",")
   if i >  0 Then  s2 = vbcrlf & vbcrlf 
   s2+ = _UserName & "  " & Date.Now & vbcrlf  & "      " & nr
   SQL = "Insert Into {内部通讯} ([发送者],[接收者],[发送时间],[发送内容]) Values (\'"
   SQL = SQL &  _UserName & "\',\'" &  js & "\',#" & Date.Now & "#,\'" & nr & "\')" 
   cmd.CommandText = SQL
   cmd.ExecuteNonQuery \'返回1表示增加成功
   i = i+1
Next
   
if cmd.ExecuteNonQuery = 1 then
   e.Form.Controls("TextBox2").Value = ""
   e.Form.Controls("TextBox1").Value = s2   
End If
[此贴子已经被作者于2015/6/29 14:00:04编辑过]

--  作者:大红袍
--  发布时间:2015/6/29 14:10:00
--  

 1、没有必要用insert into语法吧?直接把表引用到foxtable用addnew,然后保存就行;

 

 2、看2楼代码。


--  作者:douglas738888
--  发布时间:2015/6/29 14:45:00
--  
2楼代码,在执行时出现,勾选一个接收者后会自动发两次,勾选多个接收者后,最后一个接收者会自动发两次,
是否是我在Afterload事件里设置的代码有误?

Dim cmd,cmd1 As New SQLC ommand
Dim dt As DataTable
Dim lst As WinForm.CheckedComboBox = e.F orm.Controls("CheckedComboBox1")
cmd.C
cmd.C ommandText = "SELECT DISTINCT Name F rom {Users}"
dt = cmd.ExecuteReader()
For Each dr As DataRow In dt.Datarows
    cmd1.C
    cmd1.CommandText = "Select * F rom {内部通讯} Where [发送者] = \'" & dr("Name") & "\' And [接收者] = \'" & _UserName & "\' And [接收时间] Is NULL"
    Dim dt1 As DataTable
    dt1 = cmd1.ExecuteReader
    If dr("Name") <>  _UserName Then  \' 不加载登录用户列表
        lst.Items.Add(dr("Name") & "(" & dt1.DataRows.Count & ")")
    End If
Next
If Lst.Items.Count > 0 Then
    lst.SelectedIndex = 0
End If
e.F orm.Text = "内部通讯 - " & _UserName

e.F orm.Controls("DateTimePicker1").Value = Date.Today.AddDays(-7)
e.F orm.Controls("DateTimePicker2").Value =Date.Today.AddDays(1)

For Each fnt As  System.Drawing.FontFamily In System.Drawing.FontFamily.Families
    output.show(fnt.Name)
Next

--  作者:大红袍
--  发布时间:2015/6/29 14:49:00
--  

Dim yhms As String = e.Form.Controls("用户名").Text \'获得接收用户名
Dim nr As String = e.Form.Controls("TextBox2").Text \'获得发送内容
If yhm = "" OrElse nr = "" Then
    Return
End If


Dim i As Integer
Dim SQL,s2 As String
Dim cmd As New SQLCommand
cmd.Connection Name = "XXX"


For Each js As String In yhms.Split(",")
   If i >  0 Then s2 = vbcrlf & vbcrlf
   s2+ = _UserName & "  " & Date.Now & vbcrlf  & "      " & nr
   SQL = "Insert Into {内部通讯} ([发送者],[接收者],[发送时间],[发送内容]) Values (\'"
   SQL = SQL &  _UserName & "\',\'" &  js & "\',#" & Date.Now & "#,\'" & nr & "\')"
   cmd.CommandText = SQL
   cmd.ExecuteNonQuery \'返回1表示增加成功
   i = i+1
Next
  
If i >= 1 Then
   e.Form.Controls("TextBox2").Value = ""
   e.Form.Controls("TextBox1").Value = s2  
End If


--  作者:douglas738888
--  发布时间:2015/6/29 14:58:00
--  
谢谢两位老师的指导,很有价值的收获,谢谢!谢谢!Foxtabl的功能和技巧真是强大,关键在于自己的学习和方法应用。