none
[VB2005 + Access] insert 的語法錯誤? RRS feed

  • 問題

  • 各位老師好

    我的語法大概如下

        Public conn As New OleDb.OleDbConnection
        Public Save_DB As New OleDb.OleDbCommand


                   Save_DB.Parameters.Clear()
                    Save_DB.CommandText = "Insert into tb_data(no, num, val)VALUES(" & no & "," & i & "," & MjArray(i) & ")"
                    Save_DB.Connection = conn
                    Save_DB.ExecuteNonQuery()


    可是出現例外狀態

    Insert into 的語法敘述有誤

    請問問題出在哪呢

    謝謝老師

    易耳易兒
    2009年10月30日 上午 09:54

解答

  • 不要再組字串寫SQL Statement, 這件事大概說了快幾十次了.
    "Insert into tb_data(no, num, val)VALUES(" & no & "," & i & "," & MjArray(i) & ")"
    你為何不用.OleDbCommand.Pamameters 去加入你的條件呢 ? 用Parameter既美觀, 對於型別上也比較容易處理
    如果寫成這樣不是很好看 ? 還有, 留點空格是個美德
        Save_DB.CommandText = "Insert into tb_data (no, num, val) VALUES (? , ?, ?) " 

    請參閱MSDN文件庫

    [OleDbCommand.Parameters 屬性 ]
    [設定參數和參數資料型別 (ADO.NET) ]
    [OleDbParameterCollection 類別 ]
    [OleDbParameterCollection. Add 方法 ]
    [OleDbParameter 類別 ]
    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    • 已提議為解答 Lolota Lee 2009年11月2日 上午 01:55
    • 已標示為解答 Lolota Lee 2009年11月3日 上午 09:01
    2009年10月30日 上午 10:10

所有回覆

  • 不要再組字串寫SQL Statement, 這件事大概說了快幾十次了.
    "Insert into tb_data(no, num, val)VALUES(" & no & "," & i & "," & MjArray(i) & ")"
    你為何不用.OleDbCommand.Pamameters 去加入你的條件呢 ? 用Parameter既美觀, 對於型別上也比較容易處理
    如果寫成這樣不是很好看 ? 還有, 留點空格是個美德
        Save_DB.CommandText = "Insert into tb_data (no, num, val) VALUES (? , ?, ?) " 

    請參閱MSDN文件庫

    [OleDbCommand.Parameters 屬性 ]
    [設定參數和參數資料型別 (ADO.NET) ]
    [OleDbParameterCollection 類別 ]
    [OleDbParameterCollection. Add 方法 ]
    [OleDbParameter 類別 ]
    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    • 已提議為解答 Lolota Lee 2009年11月2日 上午 01:55
    • 已標示為解答 Lolota Lee 2009年11月3日 上午 09:01
    2009年10月30日 上午 10:10
  •                Save_DB.CommandText = "Insert into tb_data(no, num, val) VALUES(" & no & "," & i & "," & MjArray(i) & ")"
    該有空白就要有空白.
    2009年10月30日 上午 10:49
  • 各位老師好
    我改寫了我的cod

        Public conn As New OleDb.OleDbConnection
        Public Access_String As String
        Public Save_DB As New OleDb.OleDbCommand(Access_String, conn)
    
                Dim i As Long
                For i = 0 To MjArray.Length - 1
                    Save_DB.Connection = conn
                    Save_DB.Parameters.Clear()
                    Save_DB.Parameters.AddWithValue("no", no)
                    Save_DB.Parameters.AddWithValue("num", i)
                    Save_DB.Parameters.AddWithValue("val", MjArray(i))
                    Save_DB.ExecuteNonQuery()
                Next

    如果是這樣的話
    資料表要怎麼指定ㄋ?

    謝謝老師


    易耳易兒
    2009年11月3日 上午 12:58
  • Hi,


    可以這樣指定:

    Public Access_String As String  = "Insert into tb_data (no, num, val) VALUES (? , ?, ?) "  



    微軟技術支援中心 (CSS)
    2009年11月3日 上午 01:40
  •             Dim i As Long
                For i = 0 To MjArray.Length - 1
                    Access_String = "Insert into tb_data(no, num, val) VALUES(?, ?, ?) "
                    Save_DB.CommandText = Access_String
                    Save_DB.Connection = conn
                    Save_DB.Parameters.Clear()
                    Save_DB.Parameters.AddWithValue("no", no)
                    Save_DB.Parameters.AddWithValue("num", i)
                    Save_DB.Parameters.AddWithValue("val", MjArray(i))
                    Save_DB.ExecuteNonQuery()
                Next
                Return True
    =======================================================================================

    老師好

    我改寫成這樣還是顯示insert into陳述式語法錯誤

    謝謝老師
    易耳易兒
    2009年11月3日 上午 02:43
  • Hi,


    剛剛試了一下, 這樣寫法沒有問題,
    OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Test.mdb");
    OleDbCommand cmd = new OleDbCommand("insert into MyTestTb(Name,Help) Values(?,?)", conn);
    
    conn.Open();
    for (int i = 0; i < 5; i++)
    {
        cmd.Parameters.Clear();
        cmd.Parameters.AddWithValue("Name",i+15);
    cmd.Parameters.AddWithValue("Help",i+12); cmd.ExecuteNonQuery(); } conn.Close();
    這邊您要注意connection 要open跟close.



    微軟技術支援中心 (CSS)
    2009年11月3日 上午 03:12
  • 怪了...

    一樣阿...
    易耳易兒
    2009年11月3日 上午 03:46
  • Hi,

    您把您現在整段語法post上來看看, Table的no欄位是PK嗎(會自動遞增數值?)?



    Lolota
    微軟技術支援中心 (CSS)
    2009年11月3日 上午 04:11
  • 各位老師

    我的問題解決了

    原來問題就出在...

    我不能把欄位取名為 no ,我改為 id 就好了

    好像是保留字吧

    是嗎?

    謝謝老師
    易耳易兒
    2009年11月3日 上午 08:56
  • 使用關鍵字時,用中括號把表格名、欄位名框起來。不確定的話可以全框。
    例如:
    Insert into [tb_data] ([no], [num], [val]) VALUES (? , ?, ?)


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2009年11月3日 上午 09:16