2015-01-17 7 views
1

Хорошо, эта проблема моя немного сложна в последние месяцы. РЕЗЮМЕ: Когда у меня только 5 столбцов в моей базе данных доступа, мой код успешно вставляет новую строку. Но когда я добавить еще один столбец в моей базе данных доступа (это будет 6 колонок сейчас) я сталкиваюсьОшибка синтаксиса INSERT INTO Statement (Command Builder)

Синтаксис INSERT ошибки INTO Заявление

Код:

Dim cb As New OleDb.OleDbCommandBuilder(SYSTEM_MainClient.dbda) 
    Dim dsNewRow As DataRow 
    dsNewRow = SYSTEM_MainClient.DataSet.Tables("Database").NewRow() 
    dsNewRow.Item("First_Name") = TXT_FirstName.Text 
    dsNewRow.Item("Last_Name") = TXT_Surname.Text 
    dsNewRow.Item("StudentID") = CInt(TXT_StudentID.Text) 
    dsNewRow.Item("Middle_Name") = TXT_MiddleName.Text 
    dsNewRow.Item("College") = TXT_College.Text 
    SYSTEM_MainClient.DataSet.Tables("Database").Rows.Add(dsNewRow) 
    SYSTEM_MainClient.dbda.Update(SYSTEM_MainClient.DataSet, "Database") 
    MsgBox("New Record added to the Database") 

Мои cColumns базы данных:

"StudentID" (primary key), 
"First_Name", "Last_Name", "Middle_Name" 
"College" 

РЕЗУЛЬТАТ: Это будет работать нормально, и в базу данных будет добавлена ​​новая запись.

Потому что есть только 5 столбцов.

НО ЕСЛИ Я ПРЕВЫШАЕТ:

Код:

Dim cb As New OleDb.OleDbCommandBuilder(SYSTEM_MainClient.dbda) 
    Dim dsNewRow As DataRow 
    dsNewRow = SYSTEM_MainClient.DataSet.Tables("Database").NewRow() 
    dsNewRow.Item("First_Name") = TXT_FirstName.Text 
    dsNewRow.Item("Last_Name") = TXT_Surname.Text 
    dsNewRow.Item("StudentID") = CInt(TXT_StudentID.Text) 
    dsNewRow.Item("Middle_Name") = TXT_MiddleName.Text 
    dsNewRow.Item("College") = TXT_College.Text 

    dsNewRow.Item("Section") = TXT_Section.Text 'I added a section insert 

    SYSTEM_MainClient.DataSet.Tables("Database").Rows.Add(dsNewRow) 
    SYSTEM_MainClient.dbda.Update(SYSTEM_MainClient.DataSet, "Database") 
    MsgBox("New Record added to the Database") 

Мои столбцы базы данных:

"StudentID" (primary key) 
"First_Name", "Last_Name", "Middle_Name" 
"College", "Section". 

Это возвращает ошибку

Синтаксис Inse Ошибка RT INTO Statement

Как будто он может вставлять не более 5 значений столбца, я думаю, что проблема заключается в доступе не к самому VB.

Надеюсь, вы понимаете мою проблему, пожалуйста, помогите мне. Это моя проблема в течение нескольких месяцев, я искал форумы и искал ее, но не могу найти ответ.

Большое вам спасибо!

+0

Возможно, проблема связана с 'командой обновления' 'dbda', вы можете ее показать? если проблема будет с ним, мы исправим его – jfun

+0

Хорошо, я опубликую его. – BillyD

+0

'section' является зарезервированным для доступа word.http: //support2.microsoft.com/default.aspx? Scid = kb; en-us; 286335. Попробуйте изменить его на что-то еще. – SearchAndResQ

ответ

3

Это происходит почти повсеместно, потому что одно или несколько имен столбцов являются зарезервированными словами или содержат пробелы или другие специальные символы. В вашем случае я подозреваю, что «раздел» - это зарезервированное слово.

Решение состоит в том, чтобы установить объекты .QuotePrefix и .QuoteSuffix объекта OleDbCommandBuilder, чтобы избежать всех имен столбцов. Для доступа установите для них «[» и «]» соответственно.

+0

Спасибо за головы :) Очень ценю это :) – BillyD

+0

Я должен отметить, что наилучшим решением является избежание имен столбцов, которые в первую очередь вызовут проблему. Я бы рекомендовал никогда не включать пробелы или другие специальные символы в имени столбца и избегать зарезервированных слов. Если вы этого не сделаете или не сделаете, «QuotePrefix» и «QuoteSuffix» помогут вам. – jmcilhinney

Смежные вопросы