首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过ComboBox从Visual向Access数据库输入多个ComboBox值

如何通过ComboBox从Visual向Access数据库输入多个ComboBox值
EN

Stack Overflow用户
提问于 2018-06-13 20:35:07
回答 1查看 297关注 0票数 0

使用我正在运行的当前代码,不会发生错误,但不会将任何数据添加到Microsoft中。只有在代码中包含了2个或更少的ComboBoxes时,它才会将数据上载到DB。这让我很困惑。我已经尝试过ComboBox1.SelectedItem.ToString、ComboBox1.SelectedItem.Text和ComboBox1。文本和类似的问题都会出现。有什么想法吗?

代码语言:javascript
复制
Imports System.Data.OleDb

Public DefineDataFile As String
Dim provider As String
Dim dataFile As String
Dim connString As String
Dim myConnection As OleDbConnection = New OleDbConnection


    provider = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
    dataFile = "XXXXXXXXXXXXX.mdb"
    connString = provider & dataFile
    myConnection.ConnectionString = connString
    myConnection.Open()

    Dim str As String
    str = "INSERT INTO [Panels/Equipment] ([Panel/Equipment Name], [Machine Name], [Panel/Equipment #], [Type], [Functional Location], [Facility], [Category], [Lifetime Cost Savings], [Hours Per Day], [Days Per Week], [Weeks Per Year], [Description], [Environmental Condition], [Environmental Option], [Environmental Finding], [Heating/Cooling Condition], [Heating/Cooling Option], [Heating/Cooling Finding], [Wiring Condition], [Wiring Option], [Wiring Finding], [Machines ID])"
    str += "SELECT ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,[Machines].[Machines ID]"
    str += "FROM [Machines] WHERE [Machines].[Machine Name] = ? "

    Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection)
    cmd.Parameters.Add(New OleDbParameter("Panel/Equipment Name", CType(TextBox_Name.Text, String)))
    cmd.Parameters.Add(New OleDbParameter("Machine Name", CType(TextBox_Machine.Text, String)))
    cmd.Parameters.Add(New OleDbParameter("Panel/Equipment #", CType(TextBox_PENum.Text, String)))
 *  cmd.Parameters.Add(New OleDbParameter("Type", CType(ComboBox_Type.SelectedItem.Text, String)))
    cmd.Parameters.Add(New OleDbParameter("Functional Location", CType(TextBox_FunctionalLocation.Text, String)))
    cmd.Parameters.Add(New OleDbParameter("Facility", CType(TextBox_Facility.Text, String)))
 *  cmd.Parameters.Add(New OleDbParameter("Category", CType(ComboBox_Category.SelectedItem.Text, String)))
    cmd.Parameters.Add(New OleDbParameter("Lifetime Cost Savings", CType(TextBox_LifetimeCostSavings.Text, String)))
    cmd.Parameters.Add(New OleDbParameter("Hours Per Day", CType(TextBox_HoursPerDay.Text, String)))
    cmd.Parameters.Add(New OleDbParameter("Days Per Week", CType(TextBox_DaysPerWeek.Text, String)))
    cmd.Parameters.Add(New OleDbParameter("Weeks Per Year", CType(TextBox_WeeksPerYear.Text, String)))
 *  cmd.Parameters.Add(New OleDbParameter("Priority", CType(ComboBox_Priority.SelectedItem.Text, String)))
    cmd.Parameters.Add(New OleDbParameter("Description", CType(TextBox_Description.Text, String)))
 *  cmd.Parameters.Add(New OleDbParameter("Environmental Condition", CType(ComboBox_EC.SelectedItem.Text, String)))
 *  cmd.Parameters.Add(New OleDbParameter("Environmental Option", CType(ComboBox_EO.SelectedItem.Text, String)))
 *  cmd.Parameters.Add(New OleDbParameter("Environmental Finding", CType(ComboBox_EF.SelectedItem.Text, String)))
 *  cmd.Parameters.Add(New OleDbParameter("Heating/Cooling Condition", CType(ComboBox_HCC.SelectedItem.Text, String)))
 *  cmd.Parameters.Add(New OleDbParameter("Heating/Cooling Option", CType(ComboBox_HCO.SelectedItem.Text, String)))
 *  cmd.Parameters.Add(New OleDbParameter("Heating/Cooling Finding", CType(ComboBox_HCF.SelectedItem.Text, String)))
 *  cmd.Parameters.Add(New OleDbParameter("Wiring Condition", CType(ComboBox_WC.SelectedItem.Text, String)))
 *  cmd.Parameters.Add(New OleDbParameter("Wiring Option", CType(ComboBox_WO.SelectedItem.Text, String)))
 *  cmd.Parameters.Add(New OleDbParameter("Wiring Finding", CType(ComboBox_WF.SelectedItem.Text, String)))
 *  cmd.Parameters.Add(New OleDbParameter("Machine ID", CType(ComboBox_Machine.SelectedItem.ToString, String)))
   Try
        cmd.ExecuteNonQuery()
        cmd.Dispose()
        myConnection.Close()
        MsgBox("Panel/Equipment Successfully Added")

    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
    myConnection.Close()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-13 20:57:17

为什么要将文本转换为字符串?在CType(TextBox_Name.Text, String)中,表达式TextBox_Name.Text已经是一个字符串了。简单地写

代码语言:javascript
复制
cmd.Parameters.Add(New OleDbParameter("Panel/Equipment Name", TextBox_Name.Text))

对于其他参数,必须提供与表列中的类型匹配的类型的值。例如,如果Access中的机器ID是数字长(32位),则编写

代码语言:javascript
复制
cmd.Parameters.Add(New OleDbParameter("Machine ID", _
    CType(ComboBox_Machine.SelectedItem, Integer))) 'Integer in VB is 32-bit

此外,您有21个?,但正在插入23个参数。Priority参数似乎是错误的。因为直接在INSERT中插入Machine ID,所以不应该为它添加一个参数,而应该在where子句中为Machine Name添加一个参数。

SelectedItem属性的ComboBox返回一个Object。对象不包含属性Text。组合框中包含什么样的对象?如果您添加了字符串,那么SelectedItem已经是一个字符串了。例如。

代码语言:javascript
复制
cmd.Parameters.Add(New OleDbParameter("Type", ComboBox_Type.SelectedItem))

此外,我建议您在VB中使用项目选项Strict On,因为这显示了未显示的编码错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50845862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档