Foxtable(狐表)用户栏目专家坐堂 → 请老师验证下学生的代码是否正确


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

主题:请老师验证下学生的代码是否正确

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


加好友 发短信
等级:四尾狐 帖子:824 积分:6294 威望:0 精华:0 注册:2012/3/1 3:17:00
请老师验证下学生的代码是否正确  发帖心情 Post By:2012/12/18 4:09:00 [显示全部帖子]

项目中有个“订单”表跟“账面明细”表,想在“订单”表窗口中的“按钮”控件事件中加入以下代码实现单击控件后从外部数据库中查找符合条件的行并进行统计,

如果没有符合条件则在“账面明细”表中增加一行,将指定的数据填入“账面明细”表中

 

注:“账面明细”表中有个“项目”列,“订单”表中没有,数据为外部数据,后面加上注释,看下代码写的对不对

 

Dim cmd As New SQLCommand
Dim dt As DataTable
Dim sCols() As String = {"销售日期", "销售金额", "付款渠道"}
Dim dCols() As String = {"日期", "收入", "收入渠道"}
cmd.C
cmd.CommandText = "SELECT * From {账面明细}"
dt = cmd.ExecuteReader()
For Each dr As DataRow In dt.DataRows
    If DataTables("账面明细").Find("销售日期 = '" & dr("日期") & "'") Is Nothing Then  如果“账面明细”表中已经存在相同日期的行
        If e.DataRow("项目") = "门市收入"                                                               如果“项目”列中的内容为“门市收入”
            e.DataRow("销售金额") = DataTables("账面明细").Compute("Sum(收入)", Filter)  将“订单”表中的“销售金额”列跟“账面明细”表中的“收入”列进行统计
        Else
            Dim nr As DataRow = DataTables("账面明细").AddNew()  

            For i As Integer =0 To sCols.Length -1
                nr(dCols(i)) = dr(sCols(i))  
                e.DataRow("项目") = "门市收入"        否则在“账面明细”表中增加一行,将“订单”表中指定的数据列填入到“账面明细”表中,“账面明细”表中的“项目”列内容为“门市收入”        
            Next
        End If
    End If
Next

 

求教老师指点一、二


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


加好友 发短信
等级:四尾狐 帖子:824 积分:6294 威望:0 精华:0 注册:2012/3/1 3:17:00
  发帖心情 Post By:2012/12/18 13:48:00 [显示全部帖子]

回老爹跟林总,

 

   If DataTables("账面明细").Find("销售日期 = '" & dr("日期") & "'") Is Nothing Then  如果“账面明细”表中已经存在相同日期的行
        If e.DataRow("项目") = "门市收入"                                                               如果“项目”列中的内容为“门市收入”
这两行实际是想验证后台“账面明细”表中相同的日期跟“项目”列中内容为“门市收入”的行,一直纠结代码有没有错误

 

“看不懂你的代码,既然是按钮的代码,为什么代码中会出现e.DataRow?”回:写的时候不知道如何入手先用 e.datarow表示下指定的列

 

上面代码实现的目的是在销售操作中进行结帐的时候验证后台账面明细表中是否存在相同日期跟相同项目内容的行,存在的话就将销售表中的销售金额跟账面明细表的收入进行相加,这样就可以实现当天所有销售收入的统计

 

代码写的很纠结,希望老师指点一、二


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


加好友 发短信
等级:四尾狐 帖子:824 积分:6294 威望:0 精华:0 注册:2012/3/1 3:17:00
  发帖心情 Post By:2012/12/19 3:37:00 [显示全部帖子]

感谢林总的代码

 

执行上面代码后出现第一个错误是fdr("销售金额") = DataTables("账面明细").Compute("Sum(收入)", Filter),错误提示“没有可访问的”Filter",执行了多次修改后未果,


 

在纠结半天后才发现原来这个代码是将外部数据合并到本表中,完全颠倒了自己想要的,再次请教老师,如果将本表数据合并到外部数据中,代码后面要怎么改?


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


加好友 发短信
等级:四尾狐 帖子:824 积分:6294 威望:0 精华:0 注册:2012/3/1 3:17:00
  发帖心情 Post By:2012/12/19 3:59:00 [显示全部帖子]

上传项目,请老师帮忙下


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


加好友 发短信
等级:四尾狐 帖子:824 积分:6294 威望:0 精华:0 注册:2012/3/1 3:17:00
  发帖心情 Post By:2012/12/19 3:59:00 [显示全部帖子]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:测试.zip


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

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


加好友 发短信
等级:四尾狐 帖子:824 积分:6294 威望:0 精华:0 注册:2012/3/1 3:17:00
  发帖心情 Post By:2012/12/19 23:48:00 [显示全部帖子]

我搞郁闷了到底是怎么一回事,上图先  自己又测试了下帮助中的代码,出现了图里面的错误,按老爹改后的代码也同样出现了一样的错误,

 

Dim sCols() As String = {"列名1", "列名2", "列名3"}    这个代码不就是定义了数据的来源吗?为什么在表中执行错误提示找不到“列名1”???外部数据中的列名也没错,到底杂搞的?

 

Dim cmd As New SQLCommand
Dim
dt As DataTable
Dim
sCols() As String = {"列名1", "列名2", "列名3"}
Dim
dCols() As String = {"列名A", "列名B", "列名C"}
cmd
.ConnectionName = "数据源名称"
cmd
.CommandText = "SELECT * From {员工}"
dt
= cmd.ExecuteReader()
For Each
dr As DataRow In dt.DataRows
    Dim
nr As DataRow = DataTables("员工").AddNew()
    For
i As Integer =0 To sCols.Length -1
       
nr(dCols(i)) = dr(sCols(i))
    Next
Next


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


加好友 发短信
等级:四尾狐 帖子:824 积分:6294 威望:0 精华:0 注册:2012/3/1 3:17:00
  发帖心情 Post By:2012/12/19 23:49:00 [显示全部帖子]


图片点击可在新窗口打开查看此主题相关图片如下:错误1.png
图片点击可在新窗口打开查看

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

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


加好友 发短信
等级:四尾狐 帖子:824 积分:6294 威望:0 精华:0 注册:2012/3/1 3:17:00
  发帖心情 Post By:2012/12/20 0:20:00 [显示全部帖子]

按帮助文件中的“手工编码填充数据”里的代码来说的话,DataTables("表A").Select("[金额] > 100")这个代码不就是说明来源列的表吗
 

Dim Cols1() As String = {"来源列一","来源列二","来源列三"}
Dim
Cols2() As String = {"接收列一","接收列二","接收列三"}
For Each
dr1 As DataRow In DataTables("表A").Select("[金额] > 100")
    Dim
dr2 As DataRow = DataTables("表B").AddNew()
    For
i As Integer = 0 To Cols1.Length -1
       
dr2(Cols2(i)) = dr1(Cols1(i
))
    Next
Next

 

再回过头来看外部的,dt.DataRows 数据来源与外部数据里的(员工)表,既然数据来源与外部表, Dim nr As DataRow = DataTables("员工").AddNew(),这个又代表什么?自相矛盾?实在不解错误的原因在哪

 

Dim sCols() As String = {"列名1", "列名2", "列名3"}
Dim
dCols() As String = {"列名A", "列名B", "列名C"}
cmd
.ConnectionName = "数据源名称"
cmd
.CommandText = "SELECT * From {员工}"
dt
= cmd.ExecuteReader()    

For Each dr As DataRow In dt.DataRows
    Dim
nr As DataRow = DataTables("员工").AddNew()
    For
i As Integer =0 To sCols.Length -1
       
nr(dCols(i)) = dr(sCols(i))
    Next
Next
     


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


加好友 发短信
等级:四尾狐 帖子:824 积分:6294 威望:0 精华:0 注册:2012/3/1 3:17:00
  发帖心情 Post By:2012/12/20 0:32:00 [显示全部帖子]

再回过头重新看了下帮助文件里

 

例如项目中有一个员工表,要从一个外部文件中合并数据到这个员工表中,希望在合并过程中检查身份证号码,如果员工表已经存在相同身份证号码的行,则跳过此行。
假定被合并的表和员工表的结构相同,代码如下:

 

 

Dim cmd As New SQLCommand
Dim
dt As DataTable
cmd.ConnectionName =
"数据源名称"
cmd.CommandText =
"SELECT * From {员工}"
dt = cmd.ExecuteReader()

For
Each dr As DataRow In dt.DataRows
    If
DataTables("员工").Find("身份证号码 = '" & dr("身份证号码") & "'") Is Nothing Then
        Dim
nr As DataRow = DataTables("员工").AddNew()
        For
Each dc As DataCol In dt.DataCols
            nr(dc.name) = dr(dc.name)

        Next
    End
If
Next

 

可见要自己设计一个功能更强的Merger,其实是件很简单的事情。

如果两个表的结构不同,可以参考下面的代码:

Dim cmd As New SQLCommand
Dim
dt As DataTable
Dim
sCols() As String = {"列名1", "列名2", "列名3"}
Dim
dCols() As String = {"列名A", "列名B", "列名C"}
cmd
.ConnectionName = "数据源名称"
cmd
.CommandText = "SELECT * From {员工}"
dt
= cmd.ExecuteReader()
For Each
dr As DataRow In dt.DataRows
    Dim
nr As DataRow = DataTables("员工").AddNew()
    For
i As Integer =0 To sCols.Length -1
       
nr(dCols(i)) = dr(sCols(i))
    Next
Next

 

要从一个外部文件中合并数据到这个员工表中”这个说明是不是错误了,既然要从外部文件中合并数据到员工表,为什么还要从外部的员工表中读取数据?这样的话打个比方外部文件用“表A”来说明

cmd.CommandText = "SELECT * From {员工}"  这个代码不是要改成   cmd.CommandText = "SELECT * From {表A}"   ????数据来源是“表A”不是员工表。

 


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


加好友 发短信
等级:四尾狐 帖子:824 积分:6294 威望:0 精华:0 注册:2012/3/1 3:17:00
  发帖心情 Post By:2012/12/20 0:37:00 [显示全部帖子]

再从帮助文件里的“手工编码填充数据”里的代码来看

 

Dim Cols1() As String = {"来源列一","来源列二","来源列三"}
Dim
Cols2() As String = {"接收列一","接收列二","接收列三"}
For Each
dr1 As DataRow In DataTables("表A").Select("[金额] > 100")
    Dim
dr2 As DataRow = DataTables("表B").AddNew()
    For
i As Integer = 0 To Cols1.Length -1
       
dr2(Cols2(i)) = dr1(Cols1(i
))
    Next
Next

 

指定来源数据为表A,接收的为表B,代码执行完全没错误,一切正常

 

天那~~~~到底是我错了,还是帮助文件错了?


 回到顶部
总数 16 1 2 下一页