注册 登录
编程论坛 VB.NET论坛

大神帮忙看看异常报错啊

svip9527 发布于 2017-08-16 20:56, 2628 次点击
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录


我就是在图三列表里面编辑,点击保存到数据库同时列表也更新,但为什么会报图一得异常啊,我用的是dataapdpter对象的update方法去执行commandbuilder里面的命令自动生成的,我做第一个窗体增删改查查询,这样做没问题,可是第二个窗体换了个表,在同一个access数据库,为什么出现这个问题啊,真是搞不懂了
6 回复
#2
lhj564598972017-08-17 08:28
        Dim result(10)‘有n列定义n-1个,从0开始的
        dim STRstr as String=DataGridView1.Item(2, DataGridView1.CurrentCell.RowIndex).Value.ToString.Trim'将关键值字段值给全局变量,这里我将产品编号做为关键字段
        dim i as integer
        for i=0 to n-1 'n是多少列
         result(i) = DataGridView1.Item(i, DataGridView1.CurrentCell.RowIndex).Value.ToString.Trim
        next
        Dim updatastr As String = "update 卓艺标准工时 set "  'set 后留一空格
        if result(0)<>"" then
              updatastr=updatastr &  "序号='" & result(0) & "',"
        else
              updatastr=updatastr &  "序号='',"          '如果不设此值,更新时会出错
        endif
        if result(1)<>"" then
              updatastr=updatastr &  "产品编号='" & result(1) & "',"
        else
              updatastr=updatastr &  "产品编号='',"
        endif
...........................最后一项后面不要加逗号
        updataStr = updataStr & " where 产品编号='" & STRstr "'"    ’where 前留一空格
        cn.Open()
        Dim da As New oledbommand(updataStr, cn)
         = CommandType.Text
       da.ExecuteNonQuery()
此方法比较笨,应该有更好的办法,不过能实现你要的结果。。。。
#3
svip95272017-08-17 09:24
回复 2楼 lhj56459897
我第一个form窗体,就直接用的commandBuilder对象啊,没有任何问题啊,为什么第二个窗体就这样啊
#4
lhj564598972017-08-17 21:22
我试验了一下,如果用SQl语句和数据库的话,可以把dt定义成dataset,你的这些语句完全成立。
在这个程序里你把dim cb as new oledbcommandbuilder(da)放在button2_click事件里
因为更新以后要重新构造,你放在上面直接构造了,再改是以后的了
dim cb as new oledbcommandbuilder(da)
da.update(dt)
msgbox("更新成功")
#5
svip95272017-08-18 08:09
回复 4楼 lhj56459897
其实是我数据库的问题,因为不能对access查询设计后的表直接查询,你知道怎么对access数据库表实现计算功能吗
#6
lhj564598972017-08-18 08:26
统计记录
Dim Ston As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath + "\vb1\KScount.mdb;Persist Security Info=False"
        Dim myConn As New OleDbConnection(Ston)
        myConn.Open()
        Dim Strcom As String = "select * from Tcount"
        Dim myComd As New OleDb.OleDbDataAdapter(Strcom, myConn)
        Dim mydataset As New DataSet
        myComd.Fill(mydataset, "Tcount")
        Dim consum1 As Single
        Dim consum2 As Single
        If mydataset.Tables(0).Rows.Count > 0 Then
            Dim strcom1 As String = "select sum(val(西药费)),sum(val(中草药)) from Tcount"  '这两个字段是字符型的,要转换下
            Dim myCommand As New OleDb.OleDbCommand(strcom1, myConn)
            Dim rd As OleDbDataReader = myCommand.ExecuteReader
            Do While rd.Read
                Try
                    consum1 = rd.GetValue(0)
                    consum2 = rd.GetValue(1)
                Catch
                    MsgBox(Err.Description)
                End Try
            Loop
        End If
        myConn.Close()
        myComd.Dispose()
        TextBox24.Text = consum1
        TextBox25.Text = consum2

[此贴子已经被作者于2017-8-18 08:56编辑过]

#7
svip95272017-08-18 09:39
回复 6楼 lhj56459897
不是数据库聚合函数啊,聚合函数都是普通的查询计算啊,我就是excel哪些计算的,换成access里面啊,用日期类型减去整型得到一个日期类型啊怎么做到啊,excel都可以实现,但项目不需要excel做计算,在access里面计算,或者计算后把结果也存入数据库里
1