Foxtable(狐表)用户栏目专家坐堂 → 关于代码问题请教,谢谢


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

主题:关于代码问题请教,谢谢

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


加好友 发短信
等级:婴狐 帖子:38 积分:368 威望:0 精华:0 注册:2017/2/8 19:27:00
关于代码问题请教,谢谢  发帖心情 Post By:2017/8/29 18:19:00 [只看该作者]

你好,我想咨询一下,我在窗口设计里面写了代码,根据姓名比较两个表工资大小的代码,但是如果一个表中有这个人,另一个表没有这个人就执行不下去了,请教怎么给这种情况赋值默认值。谢谢,以下为我写的代码,加粗的地方是进行比较后的取值。

Dim dtb As New DataTableBuilder("职工购股情况差异对比表8月份")
dtb.AddDef("工资编号", Gettype(String), 16)
dtb.AddDef("姓名", Gettype(String), 16)
dtb.AddDef("原职位", Gettype(String), 16)
dtb.AddDef("职位", Gettype(String), 16)
dtb.AddDef("职位差异", Gettype(String), 16)
dtb.AddDef("原技术职务", Gettype(String), 16)
dtb.AddDef("技术职务", Gettype(String), 16)
dtb.AddDef("技术职务差异", Gettype(String), 16)
dtb.AddDef("原购股标准", Gettype(Double))
dtb.AddDef("购股标准", Gettype(Double))
dtb.AddDef("购股标准差异", Gettype(Double))
dtb.AddDef("现持股金", Gettype(String), 16)
dtb.Build()
Dim dt As DataTable = DataTables("职工购股情况差异对比表8月份")
Dim dt2 As DataTable = DataTables("原人员信息岗位股明细表8月份")
Dim dt4 As DataTable = DataTables("人员信息岗位股明细表")
For Each nm As String In dt2.GetValues("工资编号")
    Dim dr As DataRow = dt.AddNew()
    dr("工资编号") = nm
    Dim num1 As Double = dt2.Compute("max(购股标准)", "工资编号 = '" & nm & "'")
    Dim num2 As Double = dt2.Compute("max(对应购股标准)", "工资编号 = '" & nm & "'")
    Dim fdr1 As DataRow
    If num1 > num2 Then
        dr("原购股标准") = num1
        fdr1 = dt2.find("工资编号 = '" & nm & "' and 购股标准 = '" & num1 & "'")
        
    Else
        dr("原购股标准") = num2
        fdr1 = dt2.find("工资编号 = '" & nm & "' and 对应购股标准 = '" & num2 & "'")
    End If
    dr("姓名") = fdr1("姓名")
    dr("原技术职务") = fdr1("原技术职务等级")
    dr("原职位") = fdr1("原职位")
    Dim num3 As Double = dt4.Compute("max(购股标准)", "工资编号 = '" & nm & "'")
    Dim num4 As Double = dt4.Compute("max(对应购股标准)", "工资编号 = '" & nm & "'")
    Dim fdr2 As DataRow
    If num3 > num4 Then
        dr("购股标准") = num3
        fdr2 = dt4.find("工资编号 = '" & nm & "' and 购股标准 = '" & num3 & "'")
    Else
        dr("购股标准") = num4
        fdr2 = dt4.find("工资编号 = '" & nm & "' and 对应购股标准 = '" & num4 & "'")
    End If
    dr("技术职务") = fdr2("技术职务等级")
    dr("职位") = fdr2("职位")
    dr("现持股金") = fdr2("现持股金")
    dr("购股标准差异") = dr("原购股标准")-dr("购股标准")
      For Each r As Row In  Tables("职工购股情况差异对比表8月份").Rows
     If r("原职位") = r("职位") Then
    r("职位差异") ="0"
    Else
        r("职位差异") ="1"
   End If     
     dr("职位") = fdr2("职位")
     dr("原职位") = fdr1("原职位")
     If r("原技术职务") = r("技术职务") Then
    r("技术职务差异") ="0"
    Else
        r("技术职务差异") ="1"
   End If     
     dr("技术职务") = fdr2("技术职务等级")
     dr("原技术职务") = fdr1("原技术职务等级")
Next
Next


MainTable= Tables("职工购股情况差异对比表8月份")

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


加好友 发短信
等级:超级版主 帖子:106209 积分:540168 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/8/29 20:10:00 [只看该作者]

……
dtb.AddDef("现持股金", Gettype(String), 16)
dtb.Build()
Dim dt As DataTable = DataTables("职工购股情况差异对比表8月份")
Dim dt2 As DataTable = DataTables("原人员信息岗位股明细表8月份")
Dim dt4 As DataTable = DataTables("人员信息岗位股明细表")

Dim sql As String = "Select distinct 工资编号 from (Select 工资编号 from 原人员信息岗位股明细表8月份 union Select 工资编号 from 人员信息岗位股明细表) As a"
Dim cmd As new SQLCommand
cmd.CommandText = sql
Dim dt As DataTable = cmd.ExecuteReader

For Each drgj As DataRow In dt.DataRows
Dim nm Asstring = drgj("工资编号")
Dim dr As DataRow = dt.AddNew()
    dr("工资编号") = nm
    Dim num1 As Double = dt2.Compute("max(购股标准)", "工资编号 = '" & nm & "'")
    Dim num2 As Double = dt2.Compute("max(对应购股标准)", "工资编号 = '" & nm & "'")
……原来的比较代码

Next

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


加好友 发短信
等级:婴狐 帖子:38 积分:368 威望:0 精华:0 注册:2017/2/8 19:27:00
  发帖心情 Post By:2017/8/29 21:19:00 [只看该作者]

您好,我刚按照您写的代码试了下,提示以下错误,“原人员信息岗位股明细表8月份”是个查询表,请您看下以下错误提示怎么处理?谢谢

The Microsoft Jet database engine cannot find the input table or query '原人员信息岗位股明细表8月份'.  Make sure it exists and that its name is spelled correctly.

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


加好友 发短信
等级:超级版主 帖子:106209 积分:540168 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/8/29 22:37:00 [只看该作者]

参考上面sql的用法,把查询表使用到的数据表放到sql中。

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


加好友 发短信
等级:婴狐 帖子:38 积分:368 威望:0 精华:0 注册:2017/2/8 19:27:00
  发帖心情 Post By:2017/8/30 9:10:00 [只看该作者]

您好,我修改了后,还是不行,我用的这些表都是外部数据源的表,是不是需要转化成内部表才行呢?

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


加好友 发短信
等级:婴狐 帖子:38 积分:368 威望:0 精华:0 注册:2017/2/8 19:27:00
  发帖心情 Post By:2017/8/30 9:27:00 [只看该作者]

您好,我试了下也没法迁移成内部数据表,提示没有找到可用的关键列。像这种外部数据表,写SQL有没有特殊的格式来引用,请帮忙指导下,谢谢

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/8/30 9:38:00 [只看该作者]

以下是引用dm0630在2017/8/29 18:19:00的发言:
你好,我想咨询一下,我在窗口设计里面写了代码,根据姓名比较两个表工资大小的代码,但是如果一个表中有这个人,另一个表没有这个人就执行不下去了,请教怎么给这种情况赋值默认值。

 

直接判断是否查找到对应的值不就行了?

 

If fdr2 Is Nothing Then

    msgbox("没找到对应的人")

Else

    '其余代码

End If


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


加好友 发短信
等级:婴狐 帖子:38 积分:368 威望:0 精华:0 注册:2017/2/8 19:27:00
  发帖心情 Post By:2017/8/30 9:59:00 [只看该作者]

我加上只显示了一条数据,以下是我的代码,麻烦看下哪有问题,加粗的是我按照您说的增加的语句:
Dim dtb As New DataTableBuilder("职工购股情况差异对比表8月份")
dtb.AddDef("工资编号", Gettype(String), 16)
dtb.AddDef("姓名", Gettype(String), 16)
dtb.AddDef("原职位", Gettype(String), 16)
dtb.AddDef("职位", Gettype(String), 16)
dtb.AddDef("职位差异", Gettype(String), 16)
dtb.AddDef("原技术职务", Gettype(String), 16)
dtb.AddDef("技术职务", Gettype(String), 16)
dtb.AddDef("技术职务差异", Gettype(String), 16)
dtb.AddDef("原购股标准", Gettype(Double))
dtb.AddDef("购股标准", Gettype(Double))
dtb.AddDef("购股标准差异", Gettype(Double))
dtb.AddDef("现持股金", Gettype(String), 16)
dtb.Build()
Dim dt As DataTable = DataTables("职工购股情况差异对比表8月份")
Dim dt2 As DataTable = DataTables("原人员信息岗位股明细表8月份")
Dim dt4 As DataTable = DataTables("人员信息岗位股明细表")
For Each nm As String In dt2.GetValues("工资编号")
    Dim dr As DataRow = dt.AddNew()
    dr("工资编号") = nm
    Dim num1 As Double = dt2.Compute("max(购股标准)", "工资编号 = '" & nm & "'")
    Dim num2 As Double = dt2.Compute("max(对应购股标准)", "工资编号 = '" & nm & "'")
    Dim fdr1 As DataRow
    If num1 > num2 Then
        dr("原购股标准") = num1
        fdr1 = dt2.find("工资编号 = '" & nm & "' and 购股标准 = '" & num1 & "'")
        
    Else
        dr("原购股标准") = num2
        fdr1 = dt2.find("工资编号 = '" & nm & "' and 对应购股标准 = '" & num2 & "'")
    End If
    dr("姓名") = fdr1("姓名")
    dr("原技术职务") = fdr1("原技术职务等级")
    dr("原职位") = fdr1("原职位")
    Dim num3 As Double = dt4.Compute("max(购股标准)", "工资编号 = '" & nm & "'")
    Dim num4 As Double = dt4.Compute("max(对应购股标准)", "工资编号 = '" & nm & "'")
    Dim fdr2 As DataRow
    If fdr2 Is Nothing Then
    msgbox("没找到对应的人")
    Else
    If num3 > num4 Then
        dr("购股标准") = num3
        fdr2 = dt4.find("工资编号 = '" & nm & "' and 购股标准 = '" & num3 & "'")
    Else
        dr("购股标准") = num4
        fdr2 = dt4.find("工资编号 = '" & nm & "' and 对应购股标准 = '" & num4 & "'")
    End If
    dr("技术职务") = fdr2("技术职务等级")
    dr("职位") = fdr2("职位")
    dr("现持股金") = fdr2("现持股金")
    dr("购股标准差异") = dr("原购股标准")-dr("购股标准")
    End If
      For Each r As Row In  Tables("职工购股情况差异对比表8月份").Rows
     If r("原职位") = r("职位") Then
    r("职位差异") ="0"
    Else
        r("职位差异") ="1"
   End If     
     dr("职位") = fdr2("职位")
     dr("原职位") = fdr1("原职位")
     If r("原技术职务") = r("技术职务") Then
    r("技术职务差异") ="0"
    Else
        r("技术职务差异") ="1"
   End If     
     dr("技术职务") = fdr2("技术职务等级")
     dr("原技术职务") = fdr1("原技术职务等级")

Next
Next


MainTable= Tables("职工购股情况差异对比表8月份")

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/8/30 10:11:00 [只看该作者]

fdr1、fdr2要分别判断。

 

If num1 > num2 Then
    dr("原购股标准") = num1
    fdr1 = dt2.find("工资编号 = '" & nm & "' and 购股标准 = '" & num1 & "'")
   
Else
    dr("原购股标准") = num2
    fdr1 = dt2.find("工资编号 = '" & nm & "' and 对应购股标准 = '" & num2 & "'")
End If
If fdr1 Is Nothing Then
    msgbox("没找到对应的人")
Else
   
   
End If


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


加好友 发短信
等级:婴狐 帖子:38 积分:368 威望:0 精华:0 注册:2017/2/8 19:27:00
  发帖心情 Post By:2017/8/30 10:26:00 [只看该作者]

您好,我试了下好像没起作用,执行到没有数据的时候,弹出“没找到对应的人”,后面就数据不执行了


Dim dtb As New DataTableBuilder("职工购股情况差异对比表8月份")
dtb.AddDef("工资编号", Gettype(String), 16)
dtb.AddDef("姓名", Gettype(String), 16)
dtb.AddDef("原职位", Gettype(String), 16)
dtb.AddDef("职位", Gettype(String), 16)
dtb.AddDef("职位差异", Gettype(String), 16)
dtb.AddDef("原技术职务", Gettype(String), 16)
dtb.AddDef("技术职务", Gettype(String), 16)
dtb.AddDef("技术职务差异", Gettype(String), 16)
dtb.AddDef("原购股标准", Gettype(Double))
dtb.AddDef("购股标准", Gettype(Double))
dtb.AddDef("购股标准差异", Gettype(Double))
dtb.AddDef("现持股金", Gettype(String), 16)
dtb.Build()
Dim dt As DataTable = DataTables("职工购股情况差异对比表8月份")
Dim dt2 As DataTable = DataTables("原人员信息岗位股明细表8月份")
Dim dt4 As DataTable = DataTables("人员信息岗位股明细表")
For Each nm As String In dt2.GetValues("工资编号")
    Dim dr As DataRow = dt.AddNew()
    dr("工资编号") = nm
    Dim num1 As Double = dt2.Compute("max(购股标准)", "工资编号 = '" & nm & "'")
    Dim num2 As Double = dt2.Compute("max(对应购股标准)", "工资编号 = '" & nm & "'")
    Dim fdr1 As DataRow
    If num1 > num2 Then
        dr("原购股标准") = num1
        fdr1 = dt2.find("工资编号 = '" & nm & "' and 购股标准 = '" & num1 & "'")
        
    Else
        dr("原购股标准") = num2
        fdr1 = dt2.find("工资编号 = '" & nm & "' and 对应购股标准 = '" & num2 & "'")
    End If
    If fdr1 Is Nothing Then
    msgbox("没找到对应的人")
    Else
    dr("姓名") = fdr1("姓名")
    dr("原技术职务") = fdr1("原技术职务等级")
    dr("原职位") = fdr1("原职位") 
    End If
    Dim num3 As Double = dt4.Compute("max(购股标准)", "工资编号 = '" & nm & "'")
    Dim num4 As Double = dt4.Compute("max(对应购股标准)", "工资编号 = '" & nm & "'")
    Dim fdr2 As DataRow
       If num3 > num4 Then
        dr("购股标准") = num3
        fdr2 = dt4.find("工资编号 = '" & nm & "' and 购股标准 = '" & num3 & "'")
    Else
        dr("购股标准") = num4
        fdr2 = dt4.find("工资编号 = '" & nm & "' and 对应购股标准 = '" & num4 & "'")
    End If
 If fdr2 Is Nothing Then
    msgbox("没找到对应的人")
    Else

    dr("技术职务") = fdr2("技术职务等级")
    dr("职位") = fdr2("职位")
    dr("现持股金") = fdr2("现持股金")
    dr("购股标准差异") = dr("原购股标准")-dr("购股标准")
    End If
      For Each r As Row In  Tables("职工购股情况差异对比表8月份").Rows
     If r("原职位") = r("职位") Then
    r("职位差异") ="0"
    Else
        r("职位差异") ="1"
   End If     
     dr("职位") = fdr2("职位")
     dr("原职位") = fdr1("原职位")
     If r("原技术职务") = r("技术职务") Then
    r("技术职务差异") ="0"
    Else
        r("技术职务差异") ="1"
   End If     
     dr("技术职务") = fdr2("技术职务等级")
     dr("原技术职务") = fdr1("原技术职务等级")

Next
Next


MainTable= Tables("职工购股情况差异对比表8月份")

 回到顶部
总数 23 1 2 3 下一页