以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  请老师验证下学生的代码是否正确  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=26944)

--  作者:mamuaiqing
--  发布时间: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

 

求教老师指点一、二


--  作者:狐狸爸爸
--  发布时间:2012/12/18 8:30:00
--  

看不懂你的代码,既然是按钮的代码,为什么代码中会出现e.DataRow?

你这个e.DataRow是什么?

还有下面这样,注释和代码是自相矛盾的啊:

If DataTables("账面明细").Find("销售日期 = \'" & dr("日期") & "\'") Is Nothing Then 如果“账面明细”表中已经存在相同日期的行

 

请重新表述一下你这段代码的目的和逻辑。

 

 

 


--  作者:lin_hailun
--  发布时间:2012/12/18 8:49:00
--  
 太乱。不好改,看2楼。

--  作者:mamuaiqing
--  发布时间:2012/12/18 13:48:00
--  

回老爹跟林总,

 

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

 

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

 

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

 

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


--  作者:lin_hailun
--  发布时间:2012/12/18 13:58: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
    Dim fdr As DataRow = DataTables("账面明细").Find("销售日期 = \'" & dr("日期") & "\'")
    If fdr IsNot Nothing Then
        If fdr("项目") = "门市收入"
            fdr("销售金额") = 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))
            Next
            nr("项目") = "门市收入"
        End If
    End If
Next

--  作者:mamuaiqing
--  发布时间:2012/12/19 3:37:00
--  

感谢林总的代码

 

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


 

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


--  作者:mamuaiqing
--  发布时间:2012/12/19 3:59:00
--  

上传项目,请老师帮忙下


--  作者:mamuaiqing
--  发布时间:2012/12/19 3:59:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:测试.zip


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

--  作者:狐狸爸爸
--  发布时间:2012/12/19 10:00:00
--  

下面这行出错:

 

fdr("销售金额") = DataTables("账面明细").Compute("Sum(收入)", Filter)

 

是因为你没有定义Filter这个变量。

 

改为:

 

fdr("销售金额") = DataTables("账面明细").Compute("Sum(收入)", "统计条件")

 

例如:


fdr("销售金额") = DataTables("账面明细").Compute("Sum(收入)", "销售日期 = \'" & dr("日期") & "\'")

 


--  作者:mamuaiqing
--  发布时间: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