1

我正在尝试使用参数将列表项中的多行插入到数据库中。但它不会给我任何错误,也不会在表中插入任何数据。有人对此有任何想法吗?

  strSQL = "insert into tbltrans2 (transid,itemcode,itemname,qty,price,[total],btw) values ( ?,?,?,?,?,?,?)"
    Using cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath + "\\POS.mdb"), _
          cmd As New OleDbCommand(strSQL, cn)

        cmd.Parameters.Add("?", OleDbType.VarChar).Value = txtTransId.Text
        cmd.Parameters.Add("?", OleDbType.VarChar, 10)
        cmd.Parameters.Add("?", OleDbType.VarChar, 50)
        cmd.Parameters.Add("?", OleDbType.Integer)
        cmd.Parameters.Add("?", OleDbType.Decimal)
        cmd.Parameters.Add("?", OleDbType.Decimal)
        cmd.Parameters.Add("?", OleDbType.VarChar, 50)

        cn.Open()
        For Each ls As ListViewItem In ListItems.Items
            cmd.Parameters(1).Value = ls.Tag
            cmd.Parameters(2).Value = ls.SubItems(0).Text
            cmd.Parameters(3).Value = Integer.Parse(ls.SubItems(1).Text)
            cmd.Parameters(4).Value = Decimal.Parse(ls.SubItems(2).Text)
            cmd.Parameters(5).Value = Decimal.Parse(ls.SubItems(3).Text)
            cmd.Parameters(6).Value = ls.SubItems(5).Text
        Next ls

    End Using

嘿史蒂夫,当我尝试这样做时,它给了我“更新语句中的语法错误”错误。这是我的代码:

 Try
        strSQL = "UPDATE set instock = ? where itemcode= ?"
        Using cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath + "\\POS.mdb"), _
               cmd As New OleDbCommand(strSQL, cn)
            cn.Open()
            For Each ls As ListViewItem In ListItems.Items
                cmd.Parameters.Add("?", OleDbType.Integer).Value = 100
                cmd.Parameters.Add("?", OleDbType.VarChar).Value = ls.Tag
                cmd.ExecuteNonQuery()
            Next ls
            cn.Close()
        End Using
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try

现在,我仍然需要帮助减少库存。这是我使用的代码,但它不起作用。

  strSQL = "UPDATE tblitem set instock ='instock'- ? where itemcode = ?"
            Using cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath + "\\POS.mdb"), _
                   cmd As New OleDbCommand(strSQL, cn)
                cn.Open()
                For Each ls As ListViewItem In SalesListItems.Items
                    If Not (ls.SubItems(1).Tag(0) = "n") Then
                        cmd.Parameters.Add("?", OleDbType.Integer).Value = ls.SubItems(1).Text
                        cmd.Parameters.Add("?", OleDbType.VarChar, 10).Value = ls.Tag
                        cmd.ExecuteNonQuery()
                    End If
                Next ls
                cn.Close()
            End Using
4

1 回答 1

4

您缺少执行部分

For Each ls As ListViewItem In ListItems.Items 
   cmd.Parameters(1).Value = ls.Tag 
   cmd.Parameters(2).Value = ls.SubItems(0).Text 
   cmd.Parameters(3).Value = Integer.Parse(ls.SubItems(1).Text) 
   cmd.Parameters(4).Value = Decimal.Parse(ls.SubItems(2).Text) 
   cmd.Parameters(5).Value = Decimal.Parse(ls.SubItems(3).Text) 
   cmd.Parameters(6).Value = ls.SubItems(5).Text 
   cmd.ExecuteNonQuery()
Next ls 

另外,您确定来自子项的输入值吗?如果在将它们添加到 ListView 时没有对它们的有效数值进行控制,则当您尝试使用 Parse 转换假定的数值时,循环可能会失败并出现异常。

编辑:这不是更新

strSQL = "UPDATE tblitem set instock = ? where itemcode= ?"  
Using cn As New OleDbConnection("......")   
    cmd As New OleDbCommand(strSQL, cn)  
    cmd.Parameters.Add("?", OleDbType.Integer).Value = 100
    cmd.Parameters.Add("?", OleDbType.VarChar).Value = yourItemCodeValue    
    cmd.ExecuteNonQuery()
End Using    

请记住,我认为 instock 是整数数据类型,而 itemcode 是 varchar。

于 2012-08-24T13:27:32.937 回答