none
關於Parameters 與 ComboBOX 問題 RRS feed

  • 問題

  • 先貼程式碼
    Dim InsertStr = "insert into table2 (日期,科目名稱,說明,收入,支出) values (?,?,?,?,?)"
            
            Dim MyParameter(4) As OleDbParameter
            MyDataAdapter.InsertCommand = New OleDbCommand(InsertStr, conn)
    
            MyParameter(0) = New OleDbParameter("日期", TextBox1.Text)
            MyParameter(1) = New OleDbParameter("科目名稱", Label6.Text)
            MyParameter(2) = New OleDbParameter("說明", TextBox2.Text)
            MyParameter(3) = New OleDbParameter("收入", TextBox3.Text)
            MyParameter(4) = New OleDbParameter("支出", TextBox4.Text)
                  MyDataAdapter.InsertCommand.Parameters.AddRange(MyParameter)
            MyDataAdapter.InsertCommand.ExecuteNonQuery()
    
    然後我的 ComboBOX 程式碼如下
     Private Sub ComboBox1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ComboBox1.MouseClick
            ComboBox1.DataSource = MyData_類別.Tables("table2")
            ComboBox1.DisplayMember = "科目名稱"
    
    
        End Sub
    
        Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
    
    
            '    ComboBox_類別 = MyData_類別.Tables("table2").Rows(ComboBox1.SelectedIndex).Item("科目名稱").ToString
            Label6.Text = MyData_類別.Tables("table2").Rows(ComboBox1.SelectedIndex).Item("科目名稱").ToString
        End Sub
    註解那邊 是我原本的設定 本以為
    comboBox_類別
    不是Textbox 的 型態 才改成 Label
    但是 還是一樣會出現錯誤
    錯誤訊息如下

    INSERT INTO 陳述式包含以下未知的欄位名稱 '科目名稱'。確定您已正確地鍵入名稱,然後再試一次


    但是在 Delete 的指令下 的指令 卻又可以很準確的刪除 (就算給他兩個 欄位名稱 且沒包含「科目名稱」的欄位 照樣可以刪除 ,只要資料不一樣就可以)
    其程式碼如下

            Dim DelStr As String
            Dim a, b, c, d As String
            a = DataGridView1.CurrentRow.Cells("日期").Value
            b = DataGridView1.CurrentRow.Cells("說明").Value
            c = DataGridView1.CurrentRow.Cells("收入").Value
            d = DataGridView1.CurrentRow.Cells("支出").Value
    
            DelStr = "delete from table2 where 日期 = @a and 說明 = @b and 收入 = @c and 支出 = @d"
    
            MyDataAdapter.DeleteCommand = New OleDbCommand(DelStr, conn)
    
            Dim myParameters(3) As OleDbParameter
    
            DataGridView1.Rows.RemoveAt(Val(TextBox4.Text))
    
            myParameters(0) = New OleDbParameter("日期", a)
            myParameters(1) = New OleDbParameter("說明", b)
            myParameters(2) = New OleDbParameter("收入", c)
            myParameters(3) = New OleDbParameter("支出", d)
    
            MyDataAdapter.DeleteCommand.Parameters.AddRange(myParameters)
    
            MyDataAdapter.DeleteCommand.ExecuteNonQuery()
    這種的 設定變數 可以刪除 (沒有 「科目名稱」)

    我在 監看式  內看到 Parameters 的 array 的 Parameters Name  有 「科目名稱」
    我不瞭解的是 在新增 的指令中 明明有 「科目名稱」的欄位 卻說沒有?
    2009年6月21日 上午 09:25

解答

  • 請確認您 ACCESS 資料庫中,資料表 table2 是否有欄位叫做 科目名稱
    • 已標示為解答 白楓林 2009年6月21日 下午 05:17
    2009年6月21日 上午 09:45
    版主
  • 1. 請確定你連的資料庫是對的。
    2. 資料表命名時,請盡量不要使用中文,用英文命名可以避免一些預期外的錯誤,而且用中文命名也不是業界的慣例...
    小人物一枚。
    2009年6月21日 下午 12:27
    版主

所有回覆

  • 請確認您 ACCESS 資料庫中,資料表 table2 是否有欄位叫做 科目名稱
    • 已標示為解答 白楓林 2009年6月21日 下午 05:17
    2009年6月21日 上午 09:45
    版主


  • 如同上面的圖形
    上面這張圖是執行過後的圖
    • 已編輯 白楓林 2009年6月21日 下午 12:03
    2009年6月21日 上午 11:37
  • 1. 請確定你連的資料庫是對的。
    2. 資料表命名時,請盡量不要使用中文,用英文命名可以避免一些預期外的錯誤,而且用中文命名也不是業界的慣例...
    小人物一枚。
    2009年6月21日 下午 12:27
    版主
  • 這些我是知道,只是我從「舊」資料庫轉來 (Foxpro 的 DBF 轉成 ACCESS 的 MDB)
    那些就已經是 他的欄位名稱了

    我很確定我連的資料庫是對的,
    且那個 科目名稱的資料庫 就像我上面圖片所呈現的 只有兩個

    我測試看看 欄位名稱改成英文的測試

    =======
    真是羞愧..
    太羞愧了...
    連的資料庫是該檔案沒錯,
    就像小朱說的 「真的是盡量別用中文」

    2009年6月21日 下午 04:30


  • 如同上面的圖形
    上面這張圖是執行過後的圖

    您貼的圖上面顯示的例外錯誤是找不到"科目名稱"
    你可以用ACCESS開啟資料庫~並確定有這一個資料行的存在?
    2009年6月21日 下午 04:42
  • 剛剛開了之後 才發現到,
    我太羞愧了
    小朱 說得對 「盡量別用中文命名」.
    2009年6月21日 下午 05:16