标题:新手求助窗体内多表多重关联
只看楼主
xcfafeng
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-5-9
结帖率:0
已结贴  问题点数:20 回复次数:6 
新手求助窗体内多表多重关联
2005 + Access
按照教材做一个管理系统,中间有问题请教大家。

其中制作了一个“输入学生成绩”的窗体,窗体里有4个表
DataGridView形态的“成绩表”
ComboBox形态的“班级表”和“科目表(学科框)”
“学生基本情况表”

要求用FillByToolStrip类对象完成关联查询。右击数据环境中的“成绩表TableAdapter” 对象,“添加查询”,在“生成查询器”窗口的select语句后面加入Where子句:where 班级编号=@bh and 科目编号=@km (教材用的是SQL,我自己用的Access。将语句改成了:where 班级编号=[bh] and 科目编号=[km] ),生成的“FillByToolStrip”导航条设为不可见。
对“学生基本信息表TableAdapter”生成查询对象“FillByToolStrip1”,Where语句为:where 班级=@bh (我Access改成:where 班级=[bh] )

编写代码:

(a) 定义窗体级变量:Dim n As Integer。

(b) 班级表ComboBox_SelectedIndexChanged 事件过程代码为:
程序代码:

        Try
            '下面2行代码有错
            Me.成绩表TableAdapter.FillBy(Me.学生信息管理DataSet.成绩表, Me.班级表ComboBox.SelectedValue, Me.科目表ComboBox.SelectedValue)
            Me.学生基本信息表TableAdapter.FillBy(Me.学生信息管理DataSet.学生基本信息表, Me.班级表ComboBox.SelectedValue)

            n = Me.学生信息管理DataSet.成绩表.Count
            If n < Me.学生信息管理DataSet.学生基本信息表.Count Then
                TextBox1.Text = Me.学生信息管理DataSet.学生基本信息表(n).姓名
                TextBox2.Text = 0
                Button1.Enabled = True
            Else
                MsgBox("该班级本门学科成绩输入完毕!")
                Button1.Enabled = False
            End If
        Catch
        End Try



(c) 科目表ComboBox_SelectedIndexChanged 事件过程代码为:
程序代码:
 

             班级表ComboBox_SelectedIndexChanged(sender, e)




(d) 存入按钮Button1_Click 事件过程代码为:

程序代码:

        '下面1行代码有错
        Me.学生信息管理DataSet.成绩表.Add成绩表Row(Me.学生信息管理DataSet.学生基本信息表(n).学号, Me.科目表ComboBox.SelectedValue, TextBox2.Text, Me.班级表ComboBox.Text, Me.班级表ComboBox.SelectedValue)

        Me.Validate()
        Me.成绩表BindingSource.EndEdit()
        Me.成绩表TableAdapter.Update(Me.学生信息管理DataSet.成绩表)
        n += 1
        If n < Me.学生信息管理DataSet.学生基本信息表.Count Then
            TextBox1.Text = Me.学生信息管理DataSet.学生基本信息表(n).姓名
            TextBox2.Text = 0
        Else
            MsgBox("该班级本门学科成绩输入完毕!")
            Button1.Enabled = False
        End If



(e) 窗体的 输入学生成绩_Load 事件过程代码为:

程序代码:

        Me.学生基本信息表TableAdapter.Fill(Me.学生信息管理DataSet.学生基本信息表)
        Me.科目表TableAdapter.Fill(Me.学生信息管理DataSet.科目表)
        Me.班级表TableAdapter.Fill(Me.学生信息管理DataSet.班级表)
        Me.成绩表TableAdapter.Fill(Me.学生信息管理DataSet.成绩表)
        Me.班级表ComboBox.SelectedIndex = 0
        Me.科目表ComboBox.SelectedIndex = 0
        班级表ComboBox_SelectedIndexChanged(sender, e)



现在有3句错误代码。请大家看一下。
根据SQL数据库的实验指导做的,请大家帮帮忙。

[ 本帖最后由 xcfafeng 于 2014-5-10 20:17 编辑 ]
搜索更多相关主题的帖子: 管理系统 成绩表 情况表 where 制作 
2014-05-09 21:16
xcfafeng
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-5-9
得分:0 
貌似发错了
2014-05-09 21:20
xcfafeng
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-5-9
得分:0 
貌似发错区了
2014-05-09 21:20
tw_love_code
Rank: 2
来 自:chongqing
等 级:论坛游民
威 望:2
帖 子:34
专家分:97
注 册:2012-7-7
得分:10 
呵呵,你觉得呢,你那是.NET的,这里是VB

失踪几年,我又回来啦
2014-05-09 21:32
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
得分:10 
参数过多一般是你调用的函数参数多于你定义的函数参数
            Me.成绩表TableAdapter.FillBy(Me.学生信息管理DataSet.成绩表, Me.班级表ComboBox.SelectedValue, Me.科目表ComboBox.SelectedValue)
            Me.学生基本信息表TableAdapter.FillBy(Me.学生信息管理DataSet.学生基本信息表, Me.班级表ComboBox.SelectedValue)

第一句你提供了3个参数,实际上只需要一个参数应该是:Me.成绩表TableAdapter.FillBy(Me.学生信息管理DataSet.成绩表)
第二句你提供了2个参数调用,你前面3个,这里2个,同样是DataSet表的FillBy方法,不可能接受的参数个数不一样,这一句应该是:Me.学生基本信息表TableAdapter.FillBy(Me.学生信息管理DataSet.学生基本信息表)

第三个错误是告诉你对象“Me.学生信息管理DataSet.成绩表”没有“Add成绩表Row”方法。我觉得改为这样“Me.学生信息管理DataSet.成绩表.AddRow”即可。从直觉上说对象DataSet一定不会有一个内部方法或属性含中文(Add成绩表Row),但“AddRow”这个方法可能有。


[ 本帖最后由 lowxiong 于 2014-5-10 00:52 编辑 ]
2014-05-10 00:37
xcfafeng
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-5-9
得分:0 
回复 5 楼 lowxiong
谢谢您的解答,不过不是正确答案。
表所显示的应该是“班级+学科”的动态筛选表(除了成绩空缺),然后点击表中的一行,在下方的TextBox1显示姓名。然后在TextBox2中输入成绩后保存。
2014-05-10 21:53
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
得分:0 
可能你理解错误。
我只擅长传统的ado操作数据库,不会在.net里使用数据源操作数据库,所以并没有解答你多表多重关联的问题。我只对你语句错误部分进行了解答。你的代码有3处错误,经分析,都是参数传递错误,我今天专门用vs2008进行了模拟,现可以确认我分析的是对的。下面两份图片,一个是我模拟无错误的,一个是你的原图片,我在图片上明确说明了错误缘由,我认为我解释的很清楚了。

2014-05-11 01:01



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-431281-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.411238 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved